一:实验目的:
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. 链表问题12——将单链表的每K个节点之间逆序
  2. eclipse 创建maven web 项目
  3. 折腾一天总结下安装centos的安装方法。。。
  4. 为什么黑客用python-为什么如此多的黑客都用python?
  5. C++Primer学习之二#define,const,constexpr
  6. mysql死锁语句_记一次神奇的Mysql死锁排查
  7. 《2021国庆出行报告》出炉:全国高速拥堵里程占比同比下降37%
  8. 从零开始刷Leetcode——数组(11.15.16.18)
  9. Go语言中使用panic和recover简化错误处理
  10. VS2017编写C++多文件时,出现LNK2005、LNK1169报错的解决方法
  11. 科学计算机要用的电池是几号,科学计算器电池
  12. PS 工具获取:Photoshop CS6超级免安装精简版来临!不到200M!
  13. overleaf 图片排版
  14. 家用无线路由器服务器,ZOL实测:家用无线路由器WiFi性能排行榜
  15. 获取android应用缓存目录时遇到的问题
  16. 深信服2019届校园招聘专场(私聊博主得内推码,免简历筛选)
  17. 学习PHP——高级(总)
  18. Windows10创建还原点备份系统(解决类似网络重置网卡错误代码56问题!!!)
  19. pro4重影花屏 surface_【图】- 微软Surfacepro4会花屏模糊抖动怎么回事 - 厦门思明湖滨南路电脑维修 - 厦门百姓网...
  20. android 消息推送方法,一种基于Android系统的消息推送方法技术方案

热门文章

  1. 如何编辑 删除 修改 pdf文件中的文字
  2. IE 和 标准盒模型 floa浮动 清除浮动 定位
  3. 离职通知邮件主题写什么好_“辞职”发邮件标题怎么写?
  4. Docker之API操作
  5. 蓝桥ROS云课→一键配置←f1tenth和PID绕圈
  6. 如何使用JavaMailSender给曾经心爱的她发送一封特别的邮件
  7. oracle ldom ipmp,在 Logical Domains 环境中配置 IPMP
  8. plsql 复制表结构到指定表空间_数据库知识总结—(八)数据库amp;表的CRUD
  9. Mitaka正式发布 盘点OpenStack中国贡献
  10. 量化进阶——为何需要进行量化对冲