📄
字号:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream fin("guass.in");
#define NN 100
// g是系数巨阵n*n,b是增广向量n,
double g[NN][NN],b[NN],x[NN]; // x是方程组的解n维。
int n; // 下标一律以零开始计算。
//
bool guass(); // guass()函数对以上参数进行求解方程组
// 并将结果放入x中。
void outg();
void in();
int main()
{
fin>>n;
in();
if (!guass()) cout<<"No solution!"<<endl;
else{
for (int i=0;i<n;i++)
cout<<"x [ "<<i<<" ]= "<<x<<endl;
cout<<endl;
}
getchar();
fin.close();
return 0;
}
void in()
{
int i,j;
for (i=0;i<n;i++) {
for (j=0;j<n;j++)
fin>>g[j];
fin>>b;
}
return;
}
bool guass()
{
int i,j,k,p;
int flag[NN];
double l;
memset(flag,0,sizeof(flag));
for (i=0;i<n;i++){
p=-1;
for (j=0;j<n;j++)
if (!flag[j])
if (fabs(g[j]-0.0)>1e-8)
if (p==-1) p=j;
else
if (fabs(g[p])+1e-8<=fabs(g[j])) p=j;
cout<<"p="<<p<<endl;
flag[p]=1;
if (p==-1) return false;
for (j=0;j<n;j++)
if (p!=j){
l=g[j]/g[p];
for (k=i;k<n;k++)
g[j][k]-=g[p][k]*l;
b[j]-=b[p]*l;
}
outg();
}
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (fabs(g[j]-0.0)>1e-8){
x[j]=b/g[j];
break;
}
return true;
}
void outg()
{
int i,j;
cout.setf(ios::fixed);
cout.precision(2);
for (i=0;i<n;i++){
for (j=0;j<n;j++)
cout<<setw(8)<<g[j];
cout<<setw(8)<<b;
cout<<endl;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -