c++下编写高斯列主元消去解方程组
答案:1 悬赏:60
解决时间 2021-02-19 13:14
- 提问者网友:心牵心
- 2021-02-18 17:49
c++下编写高斯列主元消去解方程组
最佳答案
- 二级知识专家网友:野味小生
- 2021-02-18 18:31
这个~
因为熟悉C.所以用C写的~
改下就可以用C++了
#include
#include
#include
#include
#define n 3
#define precision 1e-16
static double aa[n][n+1]={{1,2,-1,3},{1,-1,5,0},{4,1,-2,2}};
void main()
{int i,j,det;double a[n+1][n+2],x[n+1];
int GaussElimination_ColumnSelect();
for(i=1;i<=n;i++) for(j=1;j<=n+1;j++)
a[i][j]=aa[i-1][j-1];
det=GaussElimination_ColumnSelect(a,x);
if(det!=0)
for(i=1;i<=n;i++)
printf("\nx[%d]=%f\n",i,x[i]);printf("\n");
getch();
}
int GaussElimination_ColumnSelect(double a[][n+2],double x[n+1])
{int i,j,k,r;double c;
for(k=1;k<=n-1;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]) {printf("\n det A=0.Elimination faild!");exit(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]) {printf("\n det A=0.Algorithm faild!");exit(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);
}
因为熟悉C.所以用C写的~
改下就可以用C++了
#include
#include
#include
#include
#define n 3
#define precision 1e-16
static double aa[n][n+1]={{1,2,-1,3},{1,-1,5,0},{4,1,-2,2}};
void main()
{int i,j,det;double a[n+1][n+2],x[n+1];
int GaussElimination_ColumnSelect();
for(i=1;i<=n;i++) for(j=1;j<=n+1;j++)
a[i][j]=aa[i-1][j-1];
det=GaussElimination_ColumnSelect(a,x);
if(det!=0)
for(i=1;i<=n;i++)
printf("\nx[%d]=%f\n",i,x[i]);printf("\n");
getch();
}
int GaussElimination_ColumnSelect(double a[][n+2],double x[n+1])
{int i,j,k,r;double c;
for(k=1;k<=n-1;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])
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])
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);
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯