#include <iostream.h>
#include <math.h>
#include <String.h>
int A[100][100];
int L[100][100];
int U[100][100];
int b[100];
int x[100];
int y[100];
int n,s;
int sum,sumx,sumy;
int main()
{
memset(&A, 0, sizeof(A));
memset(&L, 0, sizeof(L));
memset(&U, 0, sizeof(U));
int i,j,k,m;
cout<<"请输入阶数n:"<<endl;
cin>>n;
cout<<"请输入矩阵A:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<"A["<<i<<"]["<<"["<<j<<"]:";
cin>>A[i][j];
}
}
cout<<"please input b:"<<endl;
for(j=0;j<n;j++)
{
cout<<"b["<<j<<"]:";
cin>>b[j];
}
for(j=0;j<n;j++)
{
U[0][j]=A[0][j];
}
for(i=1;i<n;i++)
{
L[i][0]=A[i][0]/U[0][0];
}
for(i=0;i<n;i++)
{
L[i][i]=1;
}
for(k=1;k<n;k++)
{
for(j=k;j<n;j++)
{
sum=0;
for(m=0;m<k;m++)
{
sum+=L[k][m]*U[m][j];
}
U[k][j]=A[k][j]-sum;
}
for(i=k+1;i<n;i++)
{
sum=0;
for(m=0;m<k;m++)
{
sum+=L[i][m]*U[m][k];
}
L[i][k]=(A[i][k]-sum)/U[k][k];
}
}
cout<<"矩阵L:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<" "<<L[i][j]<<" ";
}
cout<<endl;
}
cout<<"矩阵U:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<" "<<U[i][j]<<" ";
}
cout<<endl;
}
for(i=0;i<n;i++)
{
sumy=0;
for(j=0;j<i;j++)
{
sumy+=L[i][j]*y[j];
}
y[i]=b[i]-sumy;
}
for(i=n-1;i>=0;i--)
{
sumx=0;
for(j=i+1;j<=n;j++)
{
sumx+=U[i][j]*x[j];
}
x[i]=(y[i]-sumx)/U[i][i];
}
cout<<"y:"<<" ";
for(j=1;j<=n;j++)
cout<<y[j-1]<<" ";
cout<<"x:"<<" ";
for(j=1;j<=n;j++)
cout<<x[j-1]<<" ";
return 0;
}
计算方法中的 LU分解法
4星 · 超过85%的资源 需积分: 18 75 浏览量
2008-12-16
16:05:57
上传
评论
收藏 239KB RAR 举报
machen3131988
- 粉丝: 0
- 资源: 2