📄 gauss_row.cpp
字号:
// Gauss_row.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
int main(int argc, char* argv[])
{
double A[4][5]={
{0.4096,0.1234,0.3678,0.2943,0.4043},
{0.2246,0.3872,0.4015,0.1129,0.1550},
{0.3645,0.1920,0.3781,0.0643,0.4240},
{0.1784,0.4002,0.2786,0.3927,0.2557}
};
double det,d,s;
int i,j,k,p,n,m;
cout<<"输入系数矩阵行数、列数:";
cin>>n>>m; //m+1即为增广矩阵的列数
cout<<endl<<"列数="<<n<<" 行数="<<m<<endl;
det=1.0;
//消去过程的主循环
for (k=0;k<=n-2;k++)
{
//进入选列主元程式
for (i=k+1;i<=n-1;i++)
{
d=A[k][k]; p=k;
if (fabs(A[i][k])>fabs(d))
{
d=A[i][k];
p=i; //p记录最大列主元的行号
}
}//列主元选择完毕
if (d==0) //最大列主元是否为0
{
det=0;
cout<<"Gauss选列主元消去算法无效!"<<endl;
return 0;
}
else
{
if (p!=k) //是否需要换行
{
for (j=k;j<=m;j++)
{
A[k][j]=A[k][j]+A[p][j];
A[p][j]=A[k][j]-A[p][j];
A[k][j]=A[k][j]-A[p][j];
}
det=-det;
}
}
//进入消元程式
for (i=k+1;i<=n-1;i++)
{
A[i][k]=A[i][k]/A[k][k]; //计算乘数
for(j=k+1;j<=4;j++) //消元计算
A[i][j]=A[i][j]-A[i][k]*A[k][j];
}
det=A[k][k]*det;
} //消元过程结束
//回代过程
A[3][4]=A[3][4]/A[3][3]; //即x4
for (i=n-2;i>=0;i--)
{
s=0;
for (j=i+1;j<=m-1;j++)
{
s=s+A[i][j]*A[j][m];
}
A[i][m]=(A[i][m]-s)/A[i][i];
}
det=det*A[n-1][m-1];
//输出结果
cout<<"DET OF A IS:"<<det<<endl;
cout<<setiosflags(ios::fixed);
for (i=0;i<=3;i++)
cout<<"X"<<i+1<<"="<<setw(17)<<setprecision(10)<<A[i][m]<<endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -