代码先锋网 代码片段及技术文章聚合

克洛特分解法Crout_解线性方程组的直接解法

技术标签: 克洛特分解法  Crout

克洛特分解法Crout_解线性方程组的直接解法

标签:计算方法实验

#include <stdio.h>
#include <math.h>

const int maxn = 15;

int main(){
    double a[maxn][maxn], b[maxn], y[maxn], x[maxn], l[maxn][maxn], u[maxn][maxn];
    int i, j, k, r, n, sum;

    freopen("lu.txt", "r", stdin);
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++)  scanf("%lf", &a[i][j]);
        scanf("%lf", &b[i]);
    }
    /*打印数据文件
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++)  printf("%10f", a[i][j]);
        printf("%10f\n", b[i]);
    }
    */

    for(i = 1; i <= n; i++)  l[i][1] = a[i][1];  //L的第一列元素
    for(i = 1; i <= n; i++)  u[1][i] = a[1][i] / l[1][1];  //U的第一行元素

    for(k = 2; k <= n; k++){
        for(i = k; i <= n; i++){  //计算L的第k列元素
            for(r = 1, sum = 0; r <= k - 1; r++)  sum += (l[i][r] * u[r][k]);
            l[i][k] = a[i][k] - sum;
        }
        for(j = k; j <= n; j++){  //计算U的第k行元素
            for(r = 1, sum = 0; r <= k - 1; r++)  sum += (l[k][r] * u[r][j]);
            u[k][j] = (a[k][j] - sum) / l[k][k];
        }
    }
    /*打印L   U
    for(i = 1; i <= n; i++){
        for(j = 1; j <= n; j++)  printf("%10f", l[i][j]);
        printf("\t\t");
        for(k = 1; k <= n; k++)  printf("%10f", u[i][k]);
        printf("\n");
    }
    */

    y[1] = b[1] / l[1][1];  //求解Ly = b
    for(i = 2; i <= n; i++){
        for(k = 1, sum = 0; k <= i; k++)  sum += (l[i][k] * y[k]);
        y[i] = (b[i] - sum) / l[i][i];
    }

    x[n] = y[n];  //求解Ux = y
    for(i = n - 1; i >= 1; i--){
        for(k = i + 1, sum = 0; k <= n; k++)  sum += (u[i][k] * x[k]);
        x[i] = y[i] - sum;
    }

    for(int i = 1; i <= n; i++)  printf("%10f\n", x[i]);

    return 0;
}

数据文件
input
实验结果
output

版权声明:本文为sunshineacm原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sunshineacm/article/details/78838728

智能推荐

【高等代数】线性方程组的解法

Gauss - Jordan 消元法 几个重要结论 n n n元线性方程组有解 ⇔ \Leftrightarrow ⇔ 方程组对应的增广矩阵化为行阶梯形后,不出现 0 = d 0 = d 0=d (其中d为非零数) 当 n n n元线性方程组有解时,设行阶梯形矩阵的非零行数目为 r r r ,未知量数目为 n n n 。若 r = n r = n r=n 则有唯一解;若 r &...

Matlab中线性方程组的解法

本文将介绍Matlab求解线性方程组的方法: 一、函数rref 二、函数mldivide(\) 三、函数inv、pinv 四、函数linsolve 五、函数lsqminnorm 六、函数decomposition 完整代码如下: 测试平台matlab 2018Rb,结果如下: 可以发现mldivide函数并没有优势,虽然官方文档建议使用mldivide函数。decomposition函数结合mld...

线性方程组的SVD解法

SVD方法求解线性方程组 本文详细推导如果利用奇异值分解得到 A X = 0 AX=0 AX=0及 A X = b AX=b AX=b的解,推导如下。 齐次方程组求解AX=0 对于一个维度为 m × n m\times n m×n的矩阵 A A A来说,我们可以将其进行奇异值分解得到: A m × n = U m × m W m × n ...

实验三 线性方程组的直接解法

一、问题提出 给出下列几个不同类型的线性方程组,请用适当的算法计算其解。 1、设线性方程组 二、要求 1、对上述三个方程组分别用Gauss顺序消元法与Gauss列主元消元法:平方根法与改进平方根法:追赶法求解(选择其一); 2、应用结构程序设计编出通用程序; 3、比较计算结果、分析数值解误差的原因; 4、尽可能利用相应模板输出系数矩阵的三角分解式; 三、目的和意义 1、通过该课题的实验,体会模板化...

Matlab实现 LU分解法解线性方程组(全选主元&&列选主元)

选主元LU分解 实验内容:列选主元LU分解和全选主元LU分解求解线性方程组 计算方法: 全选主元消元法 1.1 初始化 根据参数A、b,记录下矩阵、右端项的尺寸n; 以得到的尺寸n初始化解向量x; 同时,以尺寸(n-1)初始化一个记录列交换顺序的向量tcolum; 1.2 进入循环 for k=1:n-1 选主元:|A(p1,p2)|=max{|A(i,j)|:i=k:n,j=k:n} 记录列交换...

猜你喜欢

matlab实现用不同方法求线性方程组AX=b的解 高斯消元法、列主消元法、杜立特尔分解法

代码如下 分别建立函数文件 注意文件名匹配 建立好后直接运行就行...

计算方法:三角分解法(线性方程组求解)

问题描述 为求解一个线性方程组,首先采用偏序选主元策略的三角分解法构造矩阵L,U和P,再用前向替换法对方程组LY=PB求解Y,最后用回代法对方程组UX=Y求解X。 输入形式 在屏幕上依次输入方阵阶数n,系数矩阵A和常数矩阵B。 输出形式 先输出LU分解结果,再输出方程解。 样例1输入 4 1 2 4 1 2 8 6 4 3 10 8 8 4 12 10 6 21 52 79 82 样例1输出 [[...

消息队列RabbitMQ与Spring集成,消费者监听队列报错

2019独角兽企业重金招聘Python工程师标准>>> 错误信息: 错误原因由于spring版本太低 而spring-amqp和spring-rabbitMQ版本太高导致。 最后换成spring3和spring-amqp-1.4.6.RELEASE、spring-rabbit-1.4.6.RELEASE 如果是spring4 换成更高版本spring的的amqp和rabbit即可...

standard_init_linux.go:207: exec user process caused "no such file or directory"

运行docker容器异常中止,使用docker logs CONTAINER_ID查看异常信息如下: 经过一番搜索,在https://www.jianshu.com/p/ffe2b5a08897文章中找到了答案。...

Mybatis-plus总结

Mybatis-Plus总结 1、根据对象做批量查询...