用c语言实现高斯消去法,解三元一次方程组。求具体程序!!
#include<iostream>
#include<cmath>
using namespace std;
#define MAX 50
void input(double a[MAX][MAX+1],int n)
{
cout<<"输入原方程组的增广矩阵"<<endl;
for(int i=0;i<n;i++)
for(int j=0;j<n+1;j++)
cin>>a[i][j];
}
void output(double x[],int n)
{
cout<<"Gauss 消去法得到的原方程组的解为"<<endl;
for(int k=0;k<n;k++)
cout<<x[k]<<" ";
}
int main()
{
double a[MAX][MAX+1],x[MAX],sum,max,t;
int n,i,j,k,max_i;
cout<<"输入原方程组的阶"<<endl; cin>>n;
input(a,n);
for(k=0;k<n-1;k++)//选主元素
{ max=a[k][k];
max_i=k;
for(i=k+1;i<n;i++)
if(fabs(a[i][k])>fabs(max))
{
max=a[i][k];
max_i=i;
}
if(max==0)
break;
if(max_i!=k)//交换两行
for(j=k;j<n+1;j++)
{
t=a[k][j];
a[k][j]=a[max_i][j];
a[max_i][j]=t;
}
for(i=k+1;i<n;i++)
{
a[i][k]=a[i][k]/-a[k][k];
for(j=k+1;j<n+1;j++)
a[i][j]=a[i][j]+a[i][k]*a[k][j];
}//消元
}
if(max==0)cout<<"原方程组无解"<<endl;
else
{
for(k=n-1;k>=0;k--)
{
sum=0;
for(j=k+1;j<n;j++)
sum=sum+a[k][j]*x[j];
x[k]=(a[k][n]-sum)/a[k][k];
}//回代
output(x,n);
cout<<endl;
}
return 0;
}
2024-11-14 广告