㈠ Gauss消去法C语言程序
void gauss(double a[n][n+1],double x[n])
{
int i,j,k;
double temp,s,l;
for(i=0;i<n-1;i++)
{
//猛余选列主元
k=i;
for(j=i+1;j<n;j++)
{ if(fabs(a[j][i])>fabs(a[k][i]))
k=j;
}
//换行
if(k!=i)
for(j=i;j<=n;j++)
{
temp=a[i][j];
a[i][j]=a[k][j];
a[k][j]=temp;
}
/此镇/消元
for(j=i+1;j<n;j++)
{
l=1.0*a[j][i]/a[i][i];
for(k=0;k<枝扒滚n+1;k++)
a[j][k]=a[j][k]-a[i][k]*l;
}
print(a);
printf("\n");
}
print(a);
//回代
x[n-1]=a[n-1][n]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{
s=0.0;
for(j=i;j<n;j++)
{
if(j==i)
continue;
s+=a[i][j]*x[j];
}
x[i]=(a[i][n]-s)/a[i][i];
}
}
㈡ 用c语言实现高斯消去法,解三元一次方程组。求具体程序!!
#include<iostream>
#include<cmath>
usingnamespacestd;
#defineMAX50
voidinput(doublea[MAX][MAX+1],intn)
{
cout<<"输入原方程组的增广矩阵"<<endl;
for(inti=0;i<n;i++)
for(intj=0;j<n+1;j++)
cin>>a[i][j];
}
voidoutput(doublex[],int稿灶n)
{
cout<<"Gauss消去法得到的原方程组的解为"<<endl;
for(intk=0;k<n;k++)
cout<<x[k]<<"";
}
intmain()
{
doublea[MAX][MAX+1],x[MAX],sum,max,t;
intn,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;
}
return0;
}