一:实验目的:
1. 掌握LU分解算法原理;
2. 使用C语言编程实现LU分解算法。
二:实验要求
用LU分解算法求解给定的线性方程组 。
函数接口定义:
bool Direct( int n, double a[][MAX_SIZE], double b[] )。
在Direct的接口定义中,n为矩阵a的维数,MAX_SIZE是由裁判程序定义的矩阵最大维数,b是方程组中的常向量,求得的解将存储在b中返回。本题目要求先用杜利特尔分解,再求解两个三角型方程组。函数返回布尔型值,当求解成功时返回TRUE,否则返回FALSE。
实验代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>#define MAX_SIZE 100 /* 矩阵最大维数 */
#define ZERO 0.000000001 /* 当一个正数小于ZERO就认为该数是0 */int Direct( int n, double a[][MAX_SIZE], double b[] )
{double L[MAX_SIZE][MAX_SIZE],U[MAX_SIZE][MAX_SIZE];double y[MAX_SIZE];int i,j,k;double t;for(i=0;i<n;i++){/*对LU矩阵进行初始化操作*/L[i][i]=1;U[0][i]=a[0][i];for(j=i+1;j<n;j++){L[i][j]=0;U[j][i]=0;}}for(i=0;i<n;i++){/*求解L矩阵*/for(k=i+1;k<n;k++){t=0;for(j=0;j<i;j++)t=t+L[k][j]*U[j][i];t=a[k][i]-t;if(t!=0&&U[i][i]==0)//判断分母是否为零return 0;L[k][i]=t/U[i][i];}/*求解U矩阵*/for(k=i+1;k<n;k++){t=0;for(j=0;j<=i;j++)t=t+L[i+1][j]*U[j][k];t=a[i+1][k]-t;U[i+1][k]=t/L[i+1][i+1];}}/*求解线性方程组LY=b*/for(i=0;i<n;i++){t=0;for(j=0;j<i;j++)t=t+L[i][j]*y[j];y[i]=b[i]-t;}//for(i=0;i<n;i++)//  {//  printf(".8lf\n",y[i]);// }/*通过回代法求解线性方程组UX=Y,并将结果放入b[]中*/for(i=n-1;i>=0;i--){t=0;for(j=i+1;j<n;j++)t=t+U[i][j]*b[j];t=y[i]-t;if(t!=0&&U[i][i]==0)//判断分母是否为零return 0;b[i]=t/U[i][i];}return 1;
}int main()
{int n, i, j;double a[MAX_SIZE][MAX_SIZE], b[MAX_SIZE];while ( scanf("%d", &n) != EOF ) { /* 读取裁判测试用例 */for ( i=0; i<n; i++ ) {for ( j=0; j<n; j++ )scanf("%lf", &a[i][j]);scanf("%lf", &b[i]);}/*--- 输出直接法的解 ---*/if ( Direct(n, a, b) ) {printf("Result of direct method:\n");for ( j=0; j<n; j++ )printf("%.8lf\n", b[j]);}elseprintf("Doolittle factorization failed.\n");printf("\n");}return 0;
}

实验结果:

心得体会:

主要是通过等式两边对于元素相等,来将矩阵A分解为一个单位下三角矩阵L和上三角矩阵U。例如

1:通过比较等式两边第一行和第一列可以分别得出:

U(1,j)=a(1,j)(j=1…n)

L(i,1)=a(i,1)/U(1,1)(i=2,..,n)

2:通过比较等式两边第二行和第二列可以得出

U(2,j)=a(i,2)-l(2,1)*U(1,j) j=2,..,n

L(i,2)=(a(i,2)-l(i,1)*U(1,2))/U(2,2) i=3,…,n

因此类推可以得出:

(j=k…,n)

(i=k+1,…,n)

依次到第n步即可求出矩阵L和矩阵U中的所有元素。

在求得LU后,原方程组AX=b即可变为LUX=b的形式。在令UX=Y。

所有原式可以变成:LY=b,和UX=Y。两个线性方程组。又因为LU分别为下三角矩阵和上三角矩阵,因此可以通过直接d代入法求出Y,然后通过回代法求出X。

2:LU分解其实本质是高斯消元法的一种表达形式。实质上是将A通过初等行变换变成一个上三角矩阵,其变换矩阵就是一个单位下三角矩阵。因此若矩阵A可以进行LU分解则应该满足A的顺序主子式不等于零。

解线性方程组之LU分解算法实现相关推荐

  1. 紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法

    紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法 标签:计算方法实验 /* 紧凑存储的杜利特尔分解法Doolittle:如果初始矩阵不要求保留的话,可以紧凑存储.因为每 ...

  2. 计算方法LU分解c语言程序解线性方程组,LU分解求线性方程组的解

    LU分解是矩阵分解的一种,可以将一个矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积. LU分解可以用来求逆矩阵,解线性方程组等.本文将介绍LU分解求线性方程组的解. 1.定义 如果A是一个方阵,A的L ...

  3. matlab lu分解求线性方程组_计算方法(二)直接三角分解法解线性方程组

    封面是WH2里春希在编辑部的上司麻理前辈,有一说一,这条线的第一次H有点恶趣味,不是很喜欢. 一:概述 矩阵分解我学过的挺多种,比如极分解,谱分解,满秩分解,正交三角分解还有这里的直接三角分解大部分我 ...

  4. matlab算线性方程解,MATLAB计算方法3解线性方程组计算解法.pptx

    第三章线性方程组数值解法解线性方程组 §3.1 直接法一. Gauss 消去法设 有消 元: 用Matlab实现顺序Gauss消去法在Matlab程序编辑器中输入:function x=nagauss ...

  5. 计算方法(三)平方根法及其改进解线性方程组

    一:概述 本篇文章介绍解线性方程组的平方根法及改进平方根法,适用范围为系数矩阵为正定Hermite矩阵(下称H阵)的线性方程组.这个方法的理论依据我觉得是来自Schur引理的H阵结构定理,从这个角度我 ...

  6. c语言三角分解法解方程,用直接三角分解法解线性方程组.ppt

    用直接三角分解法解线性方程组 * §5 用直接三角分解法解线性方程组 5.1 矩阵的三角分解 列主元高斯消去法实质上是对方程组进行等价变形,即是对 定理 10 1.矩阵的杜里特尔(Doolittle) ...

  7. 二、解线性方程组的直接方法

    https://zhuanlan.zhihu.com/p/30485749 设 n n n阶线性方程组: { a 11 x 1 + a 12 x 2 + . . . + a 1 n x n = b 1 ...

  8. matlab在解线性方程组的应用,matlab解线性方程组线性方程组及MATLAB应用

    matlab解线性方程组线性方程组及MATLAB应用 1matlab 解线性方程组 线性方程组及 MATLAB 应用数值实验 线性方程组与 MATLAB 应用王1.实验目的:理解矩阵的范数与条件数. ...

  9. 解线性方程组的直接法

    总结自<数值分析>李乃成版 解线性方程组的直接法 高斯消去法 高斯消去法就是初等数学的消元法,这里是将求解步骤规范化,使之便于编写计算机程序(设置好每一步执行的顺序,使程序具有最小的时间复 ...

最新文章

  1. python 第六章 函数 pta(1)
  2. 一文讲透推荐系统提供web服务的2种方式
  3. iOS进阶之类别(Category)(9)
  4. 人脸识别有风险,美国全面禁止,可为什么中国却全面推广?
  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统--任务调度系统解析
  6. Photoshop图像修饰工具
  7. Postman 出现Error: connect ECONNREFUSED 127.0.0.1:7890
  8. 【网络安全面试题】—如何注入攻击Java Python PHP等主流语言
  9. 判断两个ListInteger是否包含同样的值,不考虑位置关系
  10. C++--第9课 - 构造与析构 - 上
  11. SCVMM 2012 部署测试之五向SCVMM中添加Hyper-V主机
  12. 线程编程 pthread 问题集合
  13. 网络聊天室Java群聊私聊_Java Spring + Spring MVC + Mybatis WebSocket实现网络聊天室(群聊+私聊)...
  14. 面向对象编程实例——句柄类的使用
  15. Ubuntu-阿里云搭建Gitlub
  16. 鸡兔同笼——算法详解
  17. Springboot爱护大自然的设计与实现 毕业设计-附源码231643
  18. 【ansible】如何将ansible jinja2的双花括号转义?
  19. 文件及文件的操作-读、写、追加的t和b模式
  20. 模拟键盘按键 自动输入文字

热门文章

  1. 全国计算机等级考试一级练习题,全国计算机等级考试一级练习题
  2. 动态规划-最长公共子序列-最长递增子序列-最大递增子序列和-miking time
  3. 一个极佳的编程语言练习项目
  4. c语言中字符表,C语言指令表与符号表
  5. Oracle数据库对小数点的操作
  6. 荣耀路由pro没有虚拟服务器,荣耀路由怎么设置端口映射规则
  7. web前端大作业 (仿英雄联盟网站制作HTML+CSS+JavaScript) 学生dreamweaver网页设计作业
  8. 考研复试怎么穿搭?看这一篇就够了!
  9. PVZ的建国保龄球?
  10. 2022年上半年,产品经理的55条心得总结!