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;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];
}
}
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",&n);
printf ("input array A:\n");/*
读取原矩阵
A*/
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%f",&a[i][j]);