大家给看看这个c++程序哪里错了

来源:百度知道 编辑:UC知道 时间:2024/09/23 19:22:23
是超松弛迭代法的公式编程,程序能运行,就是结果不对。请您帮我看看,感激不尽!
#include<iostream.h>
main()
{
int i,k,j,sum1=0,sum2=0,m;
double w=1.2;
int a[5][5]={0,0,0,0,0,
0,5,-1,-1,-1,
0,-1,10,-1,-1,
0,-1,-1,5,-1,
0.-1,-1,-1,10};
int b[5]={0,-4,12,8,34};
double x[5][9];
for(k=1;k<=9;k++)
{
for(i=1;i<=4;i++)
{
if(j<=i)
{
for(j=1;j<=i-1;j++)
sum1+=a[i][i]*x[j][k];
}
for(j=i+1;j<=4;j++)
sum2+=a[i][j]*x[j][k-1];
x[i][k]=w*(b[i]-sum1-sum2)/a[i][i]+(1-w)*x[i][k-1];
}
}
for(m=1;m<=4;m++)
cout<<x[m][9]<<endl;
}
这个c++程序关于超松弛迭代法求解方程组,为了和公式对应起来,对于数组a(矩阵a)的访问只能从第二行第二列开始。前面那个人指出的问题我改了,还是不行,但是同样谢谢他!其中k表示迭代次数,i表示地i个未知数!该程序是三重for循环,第二个for循环里有一个if语句和一个for语句!

算法部分我就不看了. 有点头晕 :S

就说一点. 声明时 a[3], a有3个元素,分别是 a[0],a[1],a[2] 而不是 a[1],a[2],a[3]
所以你程序一个明显的问题就是这个

比如最后
for(m=1;m<=4;m++)
cout<<x[m][9]<<endl;
就应改成
for(m=0;m<=4;m++)
cout<<x[m][8]<<endl;

同理,前面的那些for等等的条件也要相应改,检查仔细点.

====================
a的第一行全为0, 所以你说的只能从a的第2行开始计算. 下面这个程序没写这个判断, 是从一行开始的, 为了正确运行,我把你a[0][0]改成5了. 要完成你的要求再稍微修改下就可以了.代码随便写的, 中间一堆if else if比较蠢, 你的代码没仔细看. 可能你的更好. 没时间改进了-_-!

#include<iostream>
using namespace std;

int main()
{ int k,i,t,z,n,m;
double w=1.2;
double l;
int a[5][5]={5,0,0,0,0,
0,5,-1,-1,-1,
0,-1,10,-1,-1,
0,-1,-1,5,-1,
0,-1,-1,-1,10};
int b[5]={0,-4,12,8,34};
double x[9][5]={0};
for (k=0;k<=8;k++){
for (i=0;i<=4;i++){
if (i==0){
t=0;z=0;n=0;m=0;}
else if (i==1){
t=1;
z=0;n=0;m=0;}