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

BJUTmark BJUTmark 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我想通过输入一个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;
}

}
...全文

相关推荐

使用matlab高斯消去法、列主元高斯消去法计算n阶线性方程组

分别取n=20,60,100,200,采用高斯消去法、列主元高斯消去法计算下列n阶线性方程组Ax=b的解:

王召旭啊

MATLAB实现高斯消去法,列主元消去法

求解线性方程组 Ax=b,其中 A 为 nxn 维的已知矩阵,b 为 n 维的已 知向量,x 为 n 维的未知向量。 (1)高斯消去法。 (2)列主元消去法。 A 与 b 中的元素服从独立同分布的正态分布。令 n=10、50、100、200,测试计算时间并 绘制 曲线。

我叭想起名啊

Gauss列主元消去法求解线性方程组实验报告

本实验报告主要解决了Gauss列主演消去法的几个简单问题的MATLAB实现,仅供参考,如有不足,烦请指正。

我是初九

列主元Gauss消去法解方程组及matlab代码实现

列主元Gauss消去法是指在解方程组时,未知数顺序消去,在要消去的那个未知数的系数中找按模最大者作为主元.完成消元后,系数矩阵化为上三角形,然后在逐步回代求解未知数.列主元Gauss消去法是在综合考虑运算量与舍人误差控制的情况下一种较为理想的算法.本文档给出了算法描述及算法matlab代码实现。

快乐孩童

python写的列主元Gauss消去法

Gauss消去法可以有效计算线性方程组。针对《数值分析》中的列主元Gauss消去算法,编写的python程序。在这个程序中,可以计算出线性方程组的一个x解,并能逐步打印出线性方程组的每一步变换。注意:运行此程序需要了解基本的线性代数知识。tar.gz是我在Ubuntu下的压缩包,请自行解压,如有问题或意见,欢迎反馈,谢谢!

两鬓已不能斑白
评论
收藏 已收藏
分享
返回顶部
BJUTmark
C++ 语言 65,214 成员 250,514 内容