crout分解法

更新时间:2024-06-29 17:16:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Crout 方法解线性方程组的程序设计

制作人:李超(小),李超(大),黄黎越,李海燕,黄芳

任务分工:李海燕 ,黄黎越,求出分解矩阵L与U并输出

李超(小),李超(大),x与y的求解输出,算法的设计编写

黄芳:程序中系数矩阵a与方程组y的输入与输出 共同完成流程图和注释语句的编写

Crout 方法解线性方程组的算法

给定线性方程组AX = b ,其中系数矩阵A = (aij) n×n 非奇异,x=(x1 ,x2 ,…, x n)T ,b =( b1,b2,…bn)T , 用 Crout 方法解AX=b的算法如下:

(1) 对A 作LU 分解

由A = LU及矩阵的乘法原理可得: Lij = aij -

?LikUki , j = 1, 2 , …, i, i=1,2,…n;

k?1j?1Uij = ( aij -

?LikUki) / Lii , j = i + 1, i + 2 , …, n,i=1,2,…n;

k?1i?1(2)解两个三角型方程组

由A = LU 及AX = b 可得L (UX) = b ,令 Y = ( y 1 , y 2 , …, y n) T = UX ,则L Y = b ,于是求解AX = b 就被化为求解下三角型方程组L Y = b 及单位上三角型方程组UX = Y . a) 先解下三角型方程LY=b由 l11y1=b1, l21y1+l22y2=b2l11, ……

ln1y1+ln2y2+…+lnnyn=bn ∴yi=b1/l11, i=1

yi=( bi-?LikYk)/lii, i=2,3,…,n

k?1i?1b)再解单位上三角型方程组UX=Y 由UX=Y得 x1+u12x2+…+u1nxn=y1 x2+…+u2nxn=y2 ……… xn-1+un-1nxn=yn-1 xn=yn

利用回代解法可得方程组AX=b的解为 xi=yn,i=n

xi=yi-?UikXk,i=n-1,…,2,1

k?i?1n

(3)程序为:

#include \

#include \头文件 #define N 20//自定义N=20 int main()//主函数 {

int i,j,k; int size;

float a[N][N],l[N][N],u[N][N]; float b[N],x[N],y[N];//定义变量

printf(\分解法解方程组\\n\ printf(\请输入方阵A的n:\ scanf(\ printf(\

printf(\请输入方程组的系数:\\n\ for(i=0;i

scanf(\输入方程组系数矩阵a[][] } }

printf(\请输入方程组的y:\\n\for(i=0;i

printf(\方程组y为:\\n\for(i=0;i

for(i=0;i

for(i=0;i

for(j=0;j

l[0][0]=a[0][0]; for(i=1;i

for(i=1;i

for(k=0;k

printf(\ for(j=i+1;j

for(j=1;j

printf(\

printf(\输出矩阵L[i][j]\\n\ for(i=0;i

for(j=0;j

printf(\ printf(\ \输出下三角矩阵l[][] }

printf(\ }

printf(\输出矩阵U[i][j]\\n\ for(i=0;i

for(j=0;j

printf(\ printf(\ \输出单位上三角矩阵u[][] }

printf(\ }

y[0]=b[0]/l[0][0];//给y[0]初始值

for(i=1;i

y[i]=y[i]/l[i][i]; }

printf(\

printf(\值:\\n\ for(i=0;i

printf(\的值:\\n\

x[size-1]=y[size-1];//给x[size-1]赋值 for(i=size-2;i>=0;i--) { x[i]=y[i]; for(k=i+1;k

for(i=0;i

(4)流程图

本文来源:https://www.bwwdw.com/article/5f63.html

Top