您的位置:首页 > 其它

高斯消元模板

2017-02-23 20:14 246 查看
const int maxn=305;
long double a[maxn][maxn];
const long double eps=1e-14;
int main()
{
for(int i=1;i<=n;i++)
{
int p=i;
for(int j=i+1;j<=n;j++)
if(fabs(a[j][i])>eps) p=j;//找一个这一列不等于0的数
if(fabs(a[p][i])>eps)
{
for(int j=i;j<=n+1;j++) swap(a[i][j],a[p][j]);
for(int j=i+1;j<=n;j++)
{
if(fabs(a[j][i])>eps)
{
long double k=a[j][i]/a[i][i];
for(int t=i;t<=n+1;t++)
a[j][t]-=a[i][t]*k;//消去这一列的其他数
}
}
}
}
for(int i=n;i>=1;i--)
{
for(int j=i+1;j<=n;j++) if(fabs(a[i][j])>eps)
a[i][n+1]-=a[i][j]*a[j][n+1];
if(abs(a[i][i])<=eps&&abs(a[i][n+1])>eps)
{
cout<<-1<<endl;
return 0;
}
a[i][n+1]/=a[i][i];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: