您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页LU分解法

LU分解法

来源:化拓教育网


LU分解法求解线性方程:

#include

void solve(float l[][100],float u[][100],float b[],float x[],int n) {int i,j;

float t,s1,s2; float y[100];

for(i=1;i<=n;i++) /* 第一次回代过程开始 */ {s1=0; for(j=1;js1=s1+t*y[j]; } y[i]=(b[i]+s1)/l[i][i]; }

for(i=n;i>=1;i--) /* 第二次回代过程开始 */ { s2=0; for(j=n;j>i;j--) { t=-u[i][j];

s2=s2+t*x[j]; } x[i]=(y[i]+s2)/u[i][i]; } }

void main()

{float a[100][100],l[100][100],u[100][100],x[100],b[100]; int i,j,n,r,k; float s1,s2;

for(i=1;i<=99;i++)/*将所有的数组置零,同时将L矩阵的对角值设为1*/ for(j=1;j<=99;j++) { l[i][j]=0,u[i][j]=0; if(j==i) l[i][j]=1; }

printf (\"input n:\\n\");/*输入方程组的个数*/ scanf(\"%d\

printf (\"input array A:\\n\");/*读取原矩阵A*/ for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

scanf(\"%f\

printf (\"input array B:\\n\");/*读取列矩阵B*/ for(i=1;i<=n;i++)

scanf(\"%f\

for(r=1;r<=n;r++)/*求解矩阵L和U*/ { for(i=r;i<=n;i++) {

s1=0;

for(k=1;k<=r-1;k++) s1=s1+l[r][k]*u[k][i]; u[r][i]=a[r][i]-s1; }

for(i=r+1;i<=n;i++) {s2=0;

for(k=1;k<=r-1;k++) s2=s2+l[i][k]*u[k][r]; l[i][r]=(a[i][r]-s2)/u[r][r]; } }

printf(\"array L:\\n\");/*输出矩阵L*/ for(i=1;i<=n;i++) {

for(j=1;j<=n;j++)

printf(\"%7.3f \ printf(\"\\n\"); }

printf(\"array U:\\n\");/*输出矩阵U*/ for(i=1;i<=n;i++) {

for(j=1;j<=n;j++)

printf(\"%7.3f \ printf(\"\\n\"); }

solve(l,u,b,x,n); printf(\"解为:\\n\"); for(i=1;i<=n;i++)

printf(\"x%d=%f\\n\}

实验结果:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务