一、 实验目的及内容
1.实验目的:体会并了解列主元高斯消去法求解方程组得算法。
2.实验内容: 用列主元高斯消去法求解方程组。
二、程序流程图 找站长QQ3710167
三.所用仪器,材料
PC机一台
四. 程序代码
#include
#define n 3//指定方程个数
double x[n+1];//x[1]~x[n]用于存放方程组的解
static double aa[n][n+1]={{2,2,1,3},{1,3,5,0},{6,1,1,3}};
void main()
{
int i,j,det;
double a[n+1][n+2];
int solve();
for(i=1;i<=n;i++)
for(j=1;j<=n+1;j++)
a[i][j]=aa[i-1][j-1];
det=solve(a,x);//调用函数solve用求解方程组
if(det!=0)
{
for(i=1;i<=n;i++)
printf("[%d]=%f\n",i,x[i]);
printf("\n");
}
}
int solve(a,x)
double a[n+1][n+2],x[n+1];
{
int i,j,k,r;
double c;
for(k=1;k<=n;k++)
{
r=k;
for(i=k;i<=n;i++)
if(fabs(a[i][k])>fabs(a[r][k]))
r=i;
if(fabs(a[r][k])+1.0==1.0)
{
printf("\ndet=0 fail!");
return 0;
}
if(r!=k)
for(j=k;j<=n+1;j++)
{
c=a[k][j]; a[k][j]=a[r][j]; a[r][j]=c;
}
for(i=k+1;i<=n;i++)
{
c=a[i][k]/a[k][k];
for(j=k+1;j<=n+1;j++)
a[i][j]=a[i][j]-c*a[k][j];
}
}
if(fabs(a[n][n])+1.0==1.0)
{
printf("\n det=0. fail!");
return (0);
}
for(k=n;k>=1;k--)
{
x[k]=a[k][n+1];
for(j=k+1;j<=n;j++)
x[k]=x[k]-a[k][j]*x[j];
x[k]=x[k]/a[k][k];
}
return (1);
}
五、实验结果、分析和结论
1、结果
2、结果分析
经过计算,运行结果基本达到了预期的结果。 3、小结: 经过此次实验基本上理解了列主元高斯消去法求解方程组