列主元GAUSS消去法 C++ 换行不对,结果也不对
在取列中最大元素时不能取到最大的,不知道该怎么写,求助大神#include<iostream>#include<conio.h>#include<math.h>#incl...
在取列中最大元素时不能取到最大的,不知道该怎么写,求助大神
#include<iostream>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
#define N 100
using namespace std;
int main()
{
int i,j,n,k,m;
double temp;
double A[N][N];
double b[N];
cout<<"请输入矩阵维数"<<endl;
cin>>n;
cout<<"请输入方程组系数矩阵A"<<endl;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cin>>A[i][j];}
cout<<"请输入常系数矩阵b"<<endl;
for(i=1;i<=n;i++)
cin>>b[i];
//开始选主元
for(k=1;k<=n-1;k++)
{
{m=k;
for(i=k+1;i<=n;i++){
if(fabs(A[i][k])>fabs(A[m][k]) )
m=i;}
if(m!=k)
{for(i=k;i<=n;i++){
temp=A[k][i];
A[k][i]=A[m][i];
A[m][i]=temp;
temp=b[k];
b[k]=b[m];
b[m]=temp;}
}//换行
for(i=k+1;i<=n;i++){
A[i][k]/=A[k][k];
temp=A[i][k];}
for(j=k;j<=n;j++){
A[i][j]=A[i][j]-temp*A[k][j];
b[i]=b[i]-temp*b[k];} }} //gauss第三步
cout<<"整理完毕,输出方程组"<<endl;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cout<<setw(3)<<A[i][j]<<endl;}
for(i=1;i<=n;i++)
cout<<b[i];
for(i=n-1;i>=1;i--){
for(j=i+1;j<=n;j++)
b[i]=(b[i]-A[i][j]*b[j])/A[i][i];}
b[n]/=A[n][n];
cout<<" 方程解为"<<endl;
for(i=1;i<=n;i++)
cout<<b[i]<<endl;
getch();} 展开
#include<iostream>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
#define N 100
using namespace std;
int main()
{
int i,j,n,k,m;
double temp;
double A[N][N];
double b[N];
cout<<"请输入矩阵维数"<<endl;
cin>>n;
cout<<"请输入方程组系数矩阵A"<<endl;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cin>>A[i][j];}
cout<<"请输入常系数矩阵b"<<endl;
for(i=1;i<=n;i++)
cin>>b[i];
//开始选主元
for(k=1;k<=n-1;k++)
{
{m=k;
for(i=k+1;i<=n;i++){
if(fabs(A[i][k])>fabs(A[m][k]) )
m=i;}
if(m!=k)
{for(i=k;i<=n;i++){
temp=A[k][i];
A[k][i]=A[m][i];
A[m][i]=temp;
temp=b[k];
b[k]=b[m];
b[m]=temp;}
}//换行
for(i=k+1;i<=n;i++){
A[i][k]/=A[k][k];
temp=A[i][k];}
for(j=k;j<=n;j++){
A[i][j]=A[i][j]-temp*A[k][j];
b[i]=b[i]-temp*b[k];} }} //gauss第三步
cout<<"整理完毕,输出方程组"<<endl;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cout<<setw(3)<<A[i][j]<<endl;}
for(i=1;i<=n;i++)
cout<<b[i];
for(i=n-1;i>=1;i--){
for(j=i+1;j<=n;j++)
b[i]=(b[i]-A[i][j]*b[j])/A[i][i];}
b[n]/=A[n][n];
cout<<" 方程解为"<<endl;
for(i=1;i<=n;i++)
cout<<b[i]<<endl;
getch();} 展开
1个回答
展开全部
学数值分析吧?我把我曾用的代码写在这里。函数分开写了。
附工程文件
void exchangerow(double **A,double *B,int n,int p,int q)
{
for(int i=0;i<n;i++)
{
double tem=A[q][i];
A[q][i]=A[p][i];
A[p][i]=tem;
}
double tem=B[q];
B[q]=B[p];
B[p]=tem;
}
int findmax(double **A,int n,int col,int st) //返回行号
{
double tem=abs(A[st][col]);
int r=st;
for(int i=st+1;i<n;i++)
{
if(tem<abs(A[i][col]))
{
tem=abs(A[i][col]);
r=i;
}
}
return r;
}
double *solve(double **A,double *B,int n)
{
double *c=new double[n];
*(c+n-1)=B[n-1]/A[n-1][n-1];
for(int j=n-2;j>=0;j--)
{
double tem=0;
for(int p=j+1;p<n;p++)
{
tem=tem+A[j][p]*c[p];
}
*(c+j)=(B[j]-tem)/A[j][j];
}
return c;
}
double *Gauss_main(double **A,double *B,int n)
{
double *R=new double[n];
for(int i=0;i<n-1;i++)
{
int tem=findmax(A,n,i,i);
exchangerow(A,B,n,tem,i);
for(int p=i+1;p<n;p++)
{
double tem=A[p][i]/A[i][i];
for(int j=i+1;j<n;j++)
{
A[p][j]=A[p][j]-tem*A[i][j];
}
B[p]=B[p]-tem*B[i];
}
for(int p=i+1;p<n;p++)
A[p][i]=0;
}
cout<<"Result of the Equation"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<A[i][j]<<" ";
cout<<B[i]<<endl;
}
/////////////
R=solve(A,B,n);
cout<<"R:"<<endl;
for(int i=0;i<n;i++)
cout<<R[i]<<" ";
cout<<endl;
return R;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询