- #include<iostream>
- using namespace std;
- #define M 50
- int main(){
- double A[M][M],L[M][M],U[M][M];
- cout<<"请输入矩阵的行列数:"<<endl;
- int n; //n矩阵的行列数
- cin>>n;
- int num=n*n; //num矩阵的总数据个数
- cout<<'/n'<<"请输入矩阵:"<<endl;
- double temp;
- for(int i=1;i<n+1;i++)
- for(int j=1;j<n+1;j++)
- {
- cin>>A[i][j];
- }
- cout<<"你输入的矩阵如下:"<<endl;
- for(int i=1;i<n+1;i++){
- for(int j=1;j<n+1;j++)
- {
- cout<<A[i][j]<<' ';
- }
- cout<<endl;
- }
- for(int i=1;i<n+1;i++)
- L[i][i]=1; //对角线 已经 知道全部为 1;
- for(int i=1;i<n+1;i++) //求U矩阵的第一行元素
- U[1][i]=A[1][i]; //U 的第一行 等于 a 的第一行
- for(int i=2;i<n+1;i++)
- L[i][1]=A[i][1]/U[1][1]; //求L矩阵的第一列元素
- for(int r=2;r<n+1;r++)
- {
- for(int i=r;i<n+1;i++)
- {
- temp=0; //用来做临时变量 来存取L[r][k]*U[k][i]的和 其中k=1...........r-1
- for(int k=1;k<r;k++)
- temp+=L[r][k]*U[k][i];
- U[r][i]=A[r][i]-temp;
- }
- for(int i=r+1;i<n+1;i++)
- {
- temp=0;
- for(int k=1;k<r;k++)
- temp+=L[i][k]*U[k][r];
- L[i][r]=(A[i][r]-temp)/U[r][r];
- }
- }
- cout<<"LU分解的结果如下:"<<endl;
- cout<<"L矩阵:"<<endl;
- for(int i=1;i<n+1;i++){
- for(int j=1;j<n+1;j++){
- if(i>j)
- cout<<L[i][j]<<' '; //L全部在 i<j 部分
- else
- if(i==j)
- cout<<'1'<<' '; //对角线 为1
- else
- cout<<'0'<<' '; // 其他部分 为 0
- }
- cout<<endl;
- }
- cout<<"U矩阵:"<<endl;
- for(int i=1;i<n+1;i++)
- {
- for(int j=1;j<n+1;j++)
- if(i>j)
- cout<<'0'<<' ';
- else
- cout<<U[i][j]<<' '; //U矩阵 在 右上角 这时的 i<j;
- cout<<endl;
- }
- }