LU
分解法求解线性方程:
#include
voidsolve(floatl[][100],floatu[][100],floatb[],floatx[],intn)
{inti,j;
floatt,s1,s2;
floaty[100];
for(i=1;i<=n;i++)/*
第一次回代过程开始
*/
{s1=0;
for(j=1;j
{
t=-l[i][j];
s1=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];
}
}
voidmain()
{floata[100][100],l[100][100],u[100][100],x[100],b[100];
inti,j,n,r,k;
floats1,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("inputn:\n");/*
输入方程组的个数
*/
scanf("%d",&n);
printf("inputarrayA:\n");/*
读取原矩阵
A*/
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%f",&a[i][j]);