📄 doolitle分解法.cpp
字号:
#include <iostream.h>
void main()
{
const int row=3;
const int col=4;
double a[row][col]={{8.1,2.3,-1.5,6.1},
{0.5,-6.23,0.87,2.3},
{2.5,1.5,10.2,1.8}};
double y[row];
double x[row];
double b[row];
double L[row][col-1];
double U[row][col-1];
//进行矩阵的三角分解
for(int k=0;k<=row-1;k++)
{
//计算U矩阵的值和b的值
for (int j=k;j<=col-1;j++)
for(int t=1;t<=k-1;t++)
a[k][j]=a[k][j]-a[k][t]*a[t][j];
//计算L矩阵的值
for (int i=k+1;i<=row-1;i++)
{
for (int t=1;t<=k-1;k++)
a[i][k]=a[i][k]-a[i][t]*a[t][k];
a[i][k]=a[i][k]/a[k][k];
}
}
//读取b数组的值
cout<<"b数组的值"<<endl;
for (int i=0;i<row;i++)
{
b[i]=a[i][col-1];
cout<<"b"<<i<<"="<<b[i]<<endl;
}
//读取U矩阵的值
for(i=0;i<row;i++)
for (int j=0;j<col-1;j++)
{
if (i<=j)
U[i][j]=a[i][j];
else
U[i][j]=0;
}
//输出数组
cout<<"输出数组U"<<endl;
for(i=0;i<row;i++)
{
for (int j=0;j<col-1;j++)
cout<<U[i][j]<<" ";
cout<<endl;
}
//读取L矩阵的值
for(i=0;i<row;i++)
for (int j=0;j<col-1;j++)
{
if (i>j)
L[i][j]=a[i][j];
else if (i==j)
L[i][j]=1;
else
L[i][j]=0;
}
cout<<"输出数组L"<<endl;
for(i=0;i<row;i++)
{
for (int j=0;j<col-1;j++)
cout<<L[i][j]<<" ";
cout<<endl;
}
//计算y的值
y[0]=b[0];
for (i=1;i<=row-1;i++)
for (int t=1;t<=i-1;i++)
y[i]=b[i]-L[i][t]*y[t];
//输出y的值
cout<<"输出y的值"<<endl;
for ( i=0;i<row;i++)
cout<<"y"<<i+1<<"="<<y[i]<<endl;
//计算x的值
x[row-1]=y[row-1]/U[row-1][col-2];
for (i=row-2;i>=0;i++)
{
for (int t=i+1;t<=row-1;i++)
x[i]=y[i]-U[i][t]*x[t];
x[i]=x[i]/U[i][i];
}
//输出x的值
cout<<"输出x的值"<<endl;
for (i=0;i<row-1;i++)
cout<<"x"<<i+1<<"="<<x[i]<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -