C語言 例題6-8 LU分解法求線性代數解
-1.00x1 1.00x2 2.00x3 = 2.00
3.00x1 -1.00x2 1.00x3 = 6.00
-1.00x1 3.00x2 4.00x3 = 4.00
x3 = 2.000 x2 = -1.000 x1 = 1.000
/************** LU Decomposition for solving linear equations ***********/
/*
[A] = [L][U]
where, L is the lower triangular matrix and
U is the upper triangular matrix.
The elements of these three matrices row-wise are:
[A] = { a11, a12, a13,
a21, a22, a23,
a31, a32, a33 }
[L] = { 1, 0, 0,
l21, 1, 0,
l31, l32, 1}
[U] = {u11, u12, u13,
0 , u22, u23,
0 , 0, u33}
-1.00x1 1.00x2 2.00x3 = 2.00
3.00x1 -1.00x2 1.00x3 = 6.00
-1.00x1 3.00x2 4.00x3 = 4.00
x3 = 2.000 x2 = -1.000 x1 = 1.000
*/
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,k,j,p;
float l[10][10]={0},u[10][10]={0},sum,z[10]={0},x[10]={0};
n=3;
printf("The order of square matrix: %2d\n",n);
float a[3][3]= { { -1, 1, 2 },
{ 3, -1, 1 },
{ -1, 3, 4 } };
float b[3]= {2,6,4};
for(i=0;i<n;i++)
{
printf("\nRow%1d\t",i);
for(j=0;j<n;j++)
printf("%0.2lf\t\t",a[i][j]);
}
printf("\n\nelements of b matrix\n");
for(i=0;i<n;i++)
printf("%0.2lf\t\t",b[i]);
//********** LU decomposition *****//
for(k=0;k<n;k++)
{
u[k][k]=1;
for(i=k;i<n;i++)
{
sum=0;
for(p=0;p<k;p++)
sum+=l[i][p]*u[p][k];
l[i][k]=a[i][k]-sum;
}
for(j=k+1;j<n;j++)
{
sum=0;
for(p=0;p<k;p++)
sum+=l[k][p]*u[p][j];
u[k][j]=(a[k][j]-sum)/l[k][k];
}
}
//******** Displaying LU matrix**********//
printf("\n\nLU matrix is : \n");
//==================L matrix===============
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%0.2lf\t",l[i][j]);
printf("\n");
}
printf("\n\n");
//==================U matrix===============
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%0.2lf\t",u[i][j]);
printf("\n");
}
//***** FINDING Z; LZ=b*********//
for(i=0;i<n;i++)
{ //forward subtitution method
sum=0;
for(p=0;p<i;p++)
sum+=l[i][p]*z[p];
z[i]=(b[i]-sum)/l[i][i];
}
//********** FINDING X; UX=Z***********//
for(i=n-1;i>=0;i--)
{
sum=0;
for(p=n-1;p>=i;p--)
sum+=u[i][p]*x[p];
x[i]=(z[i]-sum)/u[i][i];
}
//*********** DISPLAYING SOLUTION**************//
printf("\n\nSet of solution is\n");
for(i=0;i<n;i++)
printf("%0.2lf\t",x[i]);
return 0;
}
輸出畫面
The order of square matrix: 3
Row0 -1.00 1.00 2.00
Row1 3.00 -1.00 1.00
Row2 -1.00 3.00 4.00
elements of b matrix
2.00 6.00 4.00
LU matrix is :
-1.00 0.00 0.00
3.00 2.00 0.00
-1.00 2.00 -5.00
1.00 -1.00 -2.00
0.00 1.00 3.50
0.00 0.00 1.00
Set of solution is
1.00 -1.00 2.00
2019年5月28日 星期二
訂閱:
張貼留言 (Atom)
2024_09 作業3 以Node-Red 為主
2024_09 作業3 (以Node-Red 為主 Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker 2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...
-
python pip 不是内部或外部命令 -- 解決方法 要安裝 Pyqt5 1. 首先,開啟命令提示字元。 2. 輸入 pip3 install pyqt5 好像不能執行 ! ! 錯誤顯示 : ‘ pip3 ’ 不是內部或外部命令、可執行的程式或批...
-
課程講義 下載 11/20 1) PPT 下載 + 程式下載 http://www.mediafire.com/file/cru4py7e8pptfda/106%E5%8B%A4%E7%9B%8A2-1.rar 11/27 2) PPT 下載...
-
• 認 識 PreFix、InFix、PostFix PreFix(前序式):* + 1 2 + 3 4 InFix(中序式): (1+2)*(3+4) PostFix(後序式):1 2 + 3 4 + * 後 序式的運算 例如: 運算時由 後序式的...
沒有留言:
張貼留言