📄
字号:
/***************data.txt******************
0 0 0 0 0
0 -1 2 -2 -1
0 3 -1 4 7
0 2 -3 -2 0
******************************************/
#include<fstream>
#include<iostream>
using namespace std;
#define N 3
void main()
{
int i,j,k;
double a[N+1][N+2];
fstream f("data.txt",ios::in);
if(!f)
{
cerr<<"文件打开失败,程序已被中止!\n"<<endl;
exit(1);
}
for(i=1;i<=N;i++)
for(j=1;j<=N+1;j++)
f>>a[i][j];
f.close();
static double U[N+1][N+2],L[N+1][N+2];
/* 进行LU分解*/
for(i=1;i<=N;i++)
{
//获取L
for(j=1;j<=i-1;j++)
{
for(k=1;k<=j-1;k++)
{
a[i][j]-=a[i][k]*a[k][j];
}
a[i][j]/=a[j][j];
L[i][j]=a[i][j];
}
//获取U
for(j=i;j<=N;j++)
{
for(k=1;k<=i-1;k++)
{
a[i][j]-=a[i][k]*a[k][j];
}
U[i][j]=a[i][j];
}
}
//获取y
for(i=1;i<=N;i++)
{
//用b代替y
for(j=1;j<=i-1;j++)
{
a[i][N+1]-=a[i][j]*a[j][N+1];
}
}
//获取x
for(i=N;i>=1;i--)
{
for(j=i+1;j<=N;j++)
{
a[i][N+1]-=a[i][j]*a[j][N+1];
}
a[i][N+1]/=a[i][i];
}
cout<<"****矩阵U****\n";
for(i=1;i<N+1;i++)
{
for(j=1;j<N+2;j++)
{
cout<<U[i][j]<<ends;
}
cout<<endl;
}
cout<<"****矩阵L****\n";
for(i=1;i<N+1;i++)
{
for(j=1;j<N+2;j++)
{
cout<<L[i][j]<<ends;
}
cout<<endl;
}
cout<<"****************************X**********************************\n";
cout<<"经过LU分解法计算知,该方程组的解为:x1="<<a[1][N+1]<<ends<<"x2="<<a[2][N+1]<<ends<<"x3="<<a[3][N+1]<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -