📄 t2_3.cpp
字号:
// cpp t2_3源代码 上机练习题2_3
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
const int N=20;
int main()
{
int i,j,k,p;
double aa[N+1][N+1],rr[N+1],bb[N+1][N+1];
double ss;
for(i=1;i<=N;i++) ///计算矩阵的元素
for(j=1;j<=N;j++)
if(i==j)
aa[i][j]=i;
else
if(i>j)
aa[i][j]=j-2;
else
aa[i][j]=i-2;
for(i=1;i<=N;i++) ///备份矩阵bb
for(j=1;j<=N;j++)
bb[i][j]=aa[i][j];
cout<<"上机练习题2_3"<<endl;
cout<<"矩阵A为:"<<endl;
for(i=1;i<=N;i++) ///输出矩阵A
{
for(j=1;j<=N;j++)
cout<<setw(3)<<aa[i][j];
cout<<endl;
}
///////////LDLT分解
for(k=1;k<=N;k++)
{
ss=0;
for(p=1;p<k;p++)
{
rr[p]=aa[p][p]*aa[k][p];
ss=ss+aa[k][p]*rr[p];
}
aa[k][k]-=ss;
if(fabs(aa[k][k])<1E-6)
{
cout<<"主元为零错误!!!"<<endl;
}
for(i=k+1;i<=N;i++)
{
aa[i][k]-=ss;
aa[i][k]/=aa[k][k];
}
}
cout<<endl;
cout<<"矩阵A经过LDLT分解后"<<endl;
cout<<"L为下三角,D为对角线:"<<endl;
for(i=1;i<=N;i++) ///输出矩阵L,D
{
for(j=1;j<=i;j++)
cout<<setw(3)<<aa[i][j];
cout<<endl;
}
//////////////////////Cholesky分解
bb[1][1]=sqrt(bb[1][1]);
for(i=2;i<=N;i++)
{
for(j=1;j<i;j++)
{
ss=0;
for(p=1;p<j;p++)
ss+=bb[i][p]*bb[j][p];
bb[i][j]=(bb[i][j]-ss)/bb[j][j];
}
ss=0;
for(p=1;p<i;p++)
ss+=bb[i][p]*bb[i][p];
bb[i][i]=sqrt(bb[i][i]-ss);
}
cout<<"矩阵A经过Cholesky分解后"<<endl;
cout<<"矩阵G为:"<<endl;
for(i=1;i<=N;i++) ///输出矩阵G
{
for(j=1;j<=i;j++)
cout<<setw(3)<<bb[i][j];
cout<<endl;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -