列主元消去法 的问题 输出结果有问题 跪求哪位达人帮看下 哪出的问题 运行结果有问题

BJUTmark 2008-05-12 08:48:36
我想通过输入一个N值 来构造矩阵A及常数项,然后用列主元消去法 解这个方程
但是调试了好多次,没有语法错误,结果总是问题
大家可以尝试输入 6 看下结果
希望能帮我看看哪出的错。。。谢谢了
#include <iostream.h>
#include <string.h>
#include <math.h>
struct jie{double answer[20];};
struct marix{double A[20][20];double B[20];};
class rg
{
public:
rg(int N){n=N;}
int getn(){return n;};
int maxi(double a[20]);
marix initAB();
jie qiujie(marix m);
private:
int n;
};
int rg::maxi(double a[20])
{
double q;
int p;
double c[20];
for(int r=0;r <20;r++)
{c[r]=a[r];};
for(int i=0;i <19;i++)
{
if(fabs(a[i])>fabs(a[i+1]))
{
a[i+1]=a[i];
}
q=fabs(a[i+1]);


}

for(int j=0;j <20;j++)
{
if(c[j]==q ¦ ¦c[j]==-q)
{
p=j;
}
}
return p;
}
marix rg::initAB()
{
marix xishu;

memset(xishu.A,0,400*sizeof(double));
memset(xishu.B,0,20*sizeof(double));

int s;
s=getn();
for(int z=0;z <s;z++)
{
for(int w=0;w <s;w++)
{
xishu.A[z][w]=(-(double((z+1)*(w+1))/double((z+1)+(w+1)-1))+(double(2*(z+1)*(w+1)+(z+1)+(w+1))/double((w+1)+(z+1)))-(double(1+(z+1)*(w+1)+(z+1)+(w+1))/double((z+1)+(w+1)+1))-(2/double((z+1)+(w+1)+2))+1/double((w+1)+(z+1)+3)+1/(double((w+1)+(z+1)+1)));
}
xishu.B[z]=(-1/double((z+3)*(z+4)));
}
return xishu;
}
jie rg::qiujie(marix m)
{
double zhongjie[20];
double huajian[20];

memset(zhongjie,0,20*sizeof(double));
memset(huajian,0,20*sizeof(double));

int s;
s=getn();
int q;double p,pp=0; jie x;double r;
for(int i=0;i <s-1;i++)
{

for(int j=i;j <s;j++)
{
zhongjie[j-i]=m.A[j][i];
huajian[j-i]=m.A[j][i];

}

/* for(int k=0;k <s;k++)
{
juedui[k]=fabs(zhongjie[k]);
}*/
q=maxi(zhongjie)+i;
if(q!=i)
{
for(int h=i;h <s;h++)
{
r=m.A[i][h];
m.A[i][h]=m.A[q][h];
m.A[q][h]=r;
}

p=m.B[i];
m.B[i]=m.B[q];
m.B[q]=p;
pp=huajian[i];
huajian[i]=huajian[q];
huajian[q]=pp;

}
for(int d=i+1;d <s;d++)
{

for(int n=i;n <s;n++)
{
m.A[d][n]=m.A[d][n]-(huajian[d-i]/m.A[i][i])*m.A[i][n];
if(m.A[d][n] <0.0000000001&&m.A[d][n]>(-0.0000000001))
{m.A[d][n]=0;}


}
m.B[d]=m.B[d]-(huajian[d-i]/m.A[i][i])*m.B[i];
if(m.B[d] <0.0000000001&&m.B[d]>(-0.0000000001))
{m.B[d]=0;}
}
for(int vv=0;vv <s;vv++){
for(int zz=0;zz <s;zz++){
cout < <m.A[vv][zz] < <" ";
}
cout < <m.B[vv] < <" ";
cout < <endl;

}
cout < <endl;


}

for(int v=0;v <s;v++){
for(int z=0;z <s;z++){
cout < <m.A[v][z] < <" ";}
cout < <endl;

}cout < <endl;
for(int g=0;g <s;g++)
cout < <m.B[g] < <" ";
cout < <endl;


x.answer[s-1]=m.B[s-1]/m.A[s-1][s-1];
for(int y=s-2;y>=0;y--)
{
for(int z=s-1;z>y;z--)
{
m.B[y]-=m.A[y][z]*x.answer[y+1];

}
x.answer[y]=m.B[y]/m.A[y][y];
}


return x;
}
void main()
{
int n;
cout < <"请输入n的值" < <endl;
cin>>n;
if(n>20)
cout < <"本程序不适用于n>20的情况" < <endl;
rg riga(n);
marix m=riga.initAB();
for(int s=0;s <n;s++)
{
for(int u=0;u <n;u++)
{
cout < <m.A[s][u] < <" ";
}
cout < <m.B[s] < <" ";
cout < <endl;
}
jie x=riga.qiujie(m);
for(int t=0;t <n;t++)
{
cout < <"c" < <t+1 < <"=" < <x.answer[t] < <endl;
}

}
...全文
28 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧