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

📄 t2_3.cpp

📁 本题采用的计算方法为:矩阵的 分解和Cholesky分解。根据Gauss消去法的的矩阵意义
💻 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 + -