⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 use_lu_for_equations.cpp

📁 用杜利特尔分解法求解方程组,对矩阵A分解成为两个矩阵U和L
💻 CPP
字号:
#include <iostream.h>
#define n 4
 float a[n][n];
 float l[n][n];
 float u[n][n];
void destar()     //对矩阵a,l,u 进行初始化,
{for(int i=1;i<=n;i++)
{for(int j=1;j<=n;j++)
	 {a[i][j]=0;
	  l[i][j]=0;
	  u[i][j]=0;
	 }
}
for(i=1;i<=n;i++)  //矩阵l,的对角线的值置1.
    l[i][i]=1;

	 
}
void in_and_out_a()  //输入矩阵A中的元素和输出矩阵A。
{  float ka;
   int i,j;
   cout<<"输入矩阵A中的元素:"<<endl;
   for(i=1;i<=n;i++)
   { cout<<"输入第"<<i<<"行元素:"<<endl;
     for(j=1;j<=n;j++)
	 { cin>>ka;
	   a[i][j]=ka;
       if(j%n==0)break;
	 }
   }
   cout<<"输出矩阵A:"<<endl;
   for(i=1;i<=n;i++)
       for(j=1;j<=n;j++)
	   {cout<<a[i][j]<<'\t';
	    if(j%n==0) cout<<endl;
	   }
}
void soulusion_l_u() //求U和L的元素.
{ int j,i,k,r;
  float m;
	for( j=1;j<=n;j++)//得U的第一行元素.
    u[1][j]=a[1][j];
 for( i=2;i<=n;i++)
	 l[i][1]=a[i][1]/u[1][1];//得L的第一列元素.
 for( k=2;k<=n;k++)    //求U的第k行元素和L的第k列元素
 { for(j=k;j<=n;j++){  m=0;
                      for(int r=1;r<k;r++)
					  {m=m+l[k][r]*u[r][j];}
					  u[k][j]=a[k][j]-m;}
   for(i=k+1;i<=n;i++){m=0;
                       for(r=1;r<k;r++)
					   {m=m+l[i][r]*u[r][k];}
					   l[i][k]=(a[i][k]-m)/u[k][k];}
 }
  
}
void main()
{ int i,j;
 float b[n+1];
 float y[n],x[n];
 float m;
 cout<<"输入矩阵b的值:"<<endl;
  for(i=1;i<=n;i++)
  { cin>>m;
    b[i]=m;
	
  }
 destar();
 in_and_out_a();					   
 soulusion_l_u();
 cout<<"输出矩阵l:"<<endl;
   for(i=1;i<=n;i++)
       for(j=1;j<=n;j++)
	   {cout<<l[i][j]<<'\t';
	    if(j%n==0) cout<<endl;
	   }
   cout<<"输出矩阵u:"<<endl;
   for(i=1;i<=n;i++)
       for(j=1;j<=n;j++)
	   {cout<<u[i][j]<<'\t';
	    if(j%n==0) cout<<endl;
	   }
  y[1]=b[1];   //求矩阵y的值。
  for(i=2;i<=n;i++)
  { m=0;
    for(j=1;j<i;j++){m=m+l[i][j]*y[j];}
    y[i]=(b[i]-m);
  }
   cout<<"输出矩阵y:"<<endl;
   for(i=1;i<=n;i++)
   {cout<<y[i]<<'\t';
	if(i%n==0) cout<<endl;
   }
  x[n]=y[n]/u[n][n];  //求矩阵x的值。
   for(i=n-1;i>=1;i--)
  { m=0;
    for(j=i+1;j<=n;j++){m=m+u[i][j]*x[j];}
    x[i]=(y[i]-m)/u[i][i];
  }
   cout<<"输出矩阵x:"<<endl;
   for(i=1;i<=n;i++)
   {cout<<x[i]<<'\t';
	if(i%n==0) cout<<endl;
   }
}
   
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -