📄 pfg.cpp
字号:
//改进的平方根法解线性方程组
//Ax=b; 把A进行A=LDL’分解;L是一个单位下三角阵,D是一个对角阵;
//把Ax=b改写为LDL'x=b,他等价于:
// Ly=b; DL'x=y;
#include<iostream.h>
#include<stdlib.h>
#define N 100
void main()
{
cout<<"用改进的平方根法解线性方程组!\n"<<"Ax=b\n"<<"其中A是一个n*n的方阵,x和b是n维的列向量\n";
int i,j,k;
int n; //n是A的维数
double a[N][N],b[N],l[N][N],temp=0;
cout<<"请输入方阵A的阶数n:";
cin>>n;
cout<<"请输入方阵A:\n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cin>>a[i][j];
}
cout<<"请输入列向量b:\n";
for(i=0;i<n;i++)
cin>>b[i];
if(a[0][0]==0)
{
cout<<"A的各介顺序主子不全为非零;\n"<<"Ax=b无解";
exit(0);
}
for(i=1;i<n;i++)
{
for(j=0;j<i;j++)
{
temp=0;
for(k=0;k<j;k++)
temp+=a[i][k]*l[j][k];
a[i][j]=a[i][j]-temp;
l[i][j]=a[i][j]/a[j][j];
}
temp=0;
for(k=0;k<i;k++)
temp+=a[i][k]*l[i][k];
a[i][i]-=temp;
if(a[i][i]==0)
{
cout<<"A的各介顺序主子不全为非零;\n"<<"Ax=b无解";
exit(0);
}
}
for(i=0;i<n;i++)
{
temp=0;
for(k=0;k<i;k++)
temp+=l[i][k]*b[k];
b[i]=b[i]-temp;
}
for(i=n-1;i>=0;i--)
{
temp=0;
for(k=i+1;k<n;k++)
temp+=l[k][i]*b[k];
b[i]=b[i]/a[i][i]-temp;
}
cout<<"Ax=b的解为:\n";
for(i=0;i<n;i++)
cout<<"x"<<i+1<<"="<<b[i]<<"\n";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -