📄
字号:
列主元的Gauss消去法2007-07-16 18:55#include<iostream>
#include<math.h>
#define n 3 //以三阶方程为例
using namespace std;
void interchangerow(double *p,double *q) //交换行元素的函数,重要
{
int i;
double temp;
for(i=0;i<n;i++)
{temp=*(p+i);
*(p+i)=*(q+i);
*(q+i)=temp;}
}
void main()
{
int i,j,k,s;
double A[n][n],r,m[n][n],b[n],u,temp;
cout<<"Please input the matrix of coefficients:"<<"\n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>A[i][j];
cout<<"Please input the right part:"<<"\n";
for(i=0;i<n;i++)
cin>>b[i];
for(k=0;k<n-1;k++)
{
s=k;
r=fabs(A[k][k]);
for(i=k;i<n;i++)
if(r<fabs(A[i][k]))
{r=fabs(A[i][k]);s=i;}
if(r==0) {cout<<"Error Equation!"<<"\n";break;}
if(s!=k)
{
interchangerow(*(A+k),*(A+s)); //此处如果写成 for(j=k+1;j<n;j++){temp2=A[s][j];A[s][j]=A[k][j];A[k][j]=temp2;}
//即想通过for逐次换,结果却不对,为什么?
temp=b[k];b[k]=b[s];b[s]=temp;
}
for(i=k+1;i<n;i++)
{
m[i][k]=A[i][k]/A[k][k];
for(j=k+1;j<n;j++)
A[i][j]=A[i][j]-m[i][k]*A[k][j];
b[i]=b[i]-m[i][k]*b[k];
}
}
for(i=n-1;i>=0;i--)
{ u=0;
for(j=i+1;j<n;j++)
u=u+A[i][j]*b[j];
b[i]=(b[i]-u)/A[i][i];
}
cout<<"The final result is:"<<"\n";
for(i=0;i<n;i++)
cout<<"x"<<i+1<<"="<<b[i]<<"\n";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -