来自「收集的C语言算法程序」· 代码 · 共 91 行

TXT
91
字号
        /***************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 + =
减小字号Ctrl + -
显示快捷键?