📄 线形方程组求解.txt
字号:
用Gauss消元法、选列主元的Gauss消元法求线性方程组(1)的解,要求输出增广矩阵的消元变化过程。
用Gauss消元法、选列主元的Gauss消元法求线性方程组(1)的解,要求输出增广矩阵的消元变化过程
42x1+2x2+3x3=3
x1+7x2+7x3=1
-2x1+4x2+5x3=-7
算法思想:Gauss消元法是将线性方程组化为上三角形线性方程组,然后再用一个回代过程求这个上三角形线性方程组的解;选主元的Gauss消元法是在Gauss消元法上增加了选列主元的过程,选列主元是为了避免当akk 为零或绝对值充分小时使计算过程被迫终止或计算误差较大,选列主元是将akk、a(k+1)k 、…、ank 中绝对值最大的元素移到主对角线上,从而改进Gauss消元法性能
#include<iostream.h>
#include<math.h>
int n=3;
double a[3][4]; //定义方程的增广矩阵
double b[3][4]={2,2,3,3,4,7,7,1,-2,4,5,-7};
double x[3];
void f0(int n) //对原方程赋初值
{
for(int i=0;i<n;i++)
{
for(int j=0;j<=n;j++)
{
a[i][j]=b[i][j];
}
}
}
void print(int n) //输出运算结果
{
cout<<"A[i][j]"<<'\t';
for(int i=0;i<=n;i++)
cout<<'['<<i<<']'<<'\t';
cout<<'\n';
for(i=0;i<n;i++)
{
cout<<i<<'\t';
for(int j=0;j<=n;j++)
cout<<a[i][j]<<'\t';
cout<<'\n';
}
cout<<"--------------------------------"<<'\n';
}
void f1(int n) //求原方程上三角矩阵
{
cout<<"Gauss消元法求线性方程组"<<'\n';
cout<<"--------------------------------"<<'\n';
for(int i=0;i<n;i++)
{
double temp=a[i][i];
for(int j=i;j<=n;j++)
{
a[i][j]/=temp;
}
print(n);
for(int k=i+1;k<n;k++)
{
temp=a[k][i];
for(j=i;j<=n;j++)
{
a[k][j]-=a[i][j]*temp;
}
}
print(n);
}
}
void f2(int n) //求解方程
{
for(int i=n-1;i>=0;i--)
{
x[i]=a[i][n];
for(int j=i+1;j<n;j++)
x[i]-=a[i][j]*x[j];
cout<<"x["<<i<<"]="<<x[i]<<'\n'<<'\n';
}
cout<<"------------------------------"<<'\n';
}
void f3(int n) //选主元求解
{
cout<<"选主元Gauss消元法求线性方程组"<<'\n';
cout<<"-------------------------------"<<'\n';
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(fabs(a[j][i])>fabs(a[i][i]))
{
for(int k=i;k<=n;k++)
{
double temp=a[i][k];
a[i][k]=a[j][k];
a[j][k]=temp;
}
}
}
print(n);
double temp=a[i][i];
for(j=0;j<=n;j++)
{
a[i][j]/=temp;
}
print(n);
for(int k=i+1;k<n;k++)
{
temp=a[k][i];
for(j=i;j<=n;j++)
{
a[k][j]-=a[i][j]*temp;
}
}
print(n);
}
}
void main()
{
f0(n);
f1(n);
f2(n);
f0(n);
f3(n);
f2(n);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -