C++高斯列主元消去法,这是我写的程序,计算结果不正确,求高手修改下

#include<iostream.h>#include<math.h>#defineN100intmain(){intn,k,i,j,m,l;doubleA[N][N]... #include<iostream.h>
#include<math.h>
#define N 100
int main()
{
int n,k,i,j,m,l;
double A[N][N],b[N],eps,temp,x[N];
cout<<"请输入方程组维数"<<endl;
cin>>n;
cout<<"请输入控制精度"<<endl;
cin>>eps;
cout<<"请输入矩阵A"<<endl;
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
cin>>A[i][j];
}
}
cout<<"矩阵输入完毕"<<endl;
cout<<"请输入右端项b"<<endl;
for(i=0;i<=n-1;i++)
{
cin>>b[i];
}
cout<<"右端项输入完毕"<<endl;
for(k=0;k<n-1;k++)
{
double max=A[k][k];
for(j=k+1;j<=n-1;j++)
{
if(abs(A[j][k])>abs(A[k][k]))
{
max=A[j][k];
}
}
if(max<eps)
{
return 0;
}
if(max!=A[k][k])
{
temp=A[k][k];
A[k][k]=A[j][k];
A[j][k]=temp;
temp=0;
temp=b[k];
b[k]=b[j];
b[j]=temp;
for(l=0;l<=n-1;l++)
{
temp=0;
temp=A[k][l];
A[k][l]=A[j][l];
A[j][l]=temp;
}
}
for(j=k+1;j<=n-1;j++)
{
double tmp=A[j][k]/A[k][k];
b[j]-=tmp*b[k];
for(l=0;l<=n-1;l++)
{
A[j][l]-=tmp*A[k][l];
}
}
}
cout<<"整理完毕,此时方程组为"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<A[i][j]<<" ";
}
}
cout<<"此时右端项为"<<endl;
for(i=0;i<n;i++)
{
cout<<b[i]<<" ";
}
x[n-1]=b[n-1]/A[n-1][n-1];
for(i=n-1;i>=0;i--)
{
for(j=n-1;j>=i+1;j--)
{
b[i]-=A[i][j]*x[j];
}
x[i]=b[i]/A[i][i];
}
cout<<"方程的解为"<<endl;
for(l=0;l<n;l++)
cout<<x[i]<<" ";
return 0;
}
展开
 我来答
xoaxa
2012-10-22 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3467万
展开全部
/*
方程组维数 : 3
控制精度 : 0.0000006
系数矩阵
2 1 -1
3 -1 1
1 3 -1
系数矩阵输入完毕!
常数项矩阵
-1 6 2
常数项矩阵输入完毕!
整理完毕,此时方程组为
1 -0.333333 0.333333 2
0 1 -0.4 0
0 0 1 5
方程的解为
1
2
5
Press any key to continue
*/
#include <iostream.h>#include <math.h>
#define N 100
int main() {
int n,k,i,j,m;
double A[N][N],b[N],eps,temp;
cout << "方程组维数 : ";
cin >> n;
cout << "控制精度 : ";
cin >> eps;
cout << "系数矩阵" << endl;
for(i = 0;i < n;i++)
for(j = 0;j < n;j++)
cin >> A[i][j];
cout << "系数矩阵输入完毕!" << endl;
cout << "常数项矩阵" << endl;
for(i = 0;i < n;i++) cin >> b[i];
cout << "常数项矩阵输入完毕!" << endl;
for(k = 0; k < n; ++k) {
m = k;
for(i = k + 1; i < n; ++i)
if(fabs(A[i][k]) > fabs(A[m][k]))
m = i;
if(fabs(A[m][k]) <= eps) return 0;
if(m != k) {
for(i = k;i < n;i++) {
temp = A[k][i];
A[k][i] = A[m][i];
A[m][i] = temp;
}
temp = b[k];
b[k] = b[m];
b[m] = temp;
}
for(i = k + 1; i < n; ++i) A[k][i] /= A[k][k]; // 主元系数“归一”划
b[k] /= A[k][k];
A[k][k] = 1.0;
for(i = k + 1;i < n;i++) { // 消元
temp = A[i][k];
for(j = k; j < n; ++j) {
A[i][j] -= A[k][j] * temp;
}
b[i] -= b[k] * temp;
A[i][k] = 0.0;
}
}
cout << "整理完毕,此时方程组为" << endl;
for(i = 0;i < n;i++) {
for(j = 0;j < n;j++) cout << A[i][j] << " ";
cout << b[i] << endl;
}
for(i = n - 2;i >= 0;i--)
for(j = i + 1;j < n;j++) b[i] -= A[i][j] * b[j];
cout << "方程的解为" << endl;
for(i = 0; i < n;i++) cout << b[i] << endl;
return 0;}
Sievers分析仪
2024-10-13 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准... 点击进入详情页
本回答由Sievers分析仪提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式