注册 登录
编程论坛 新人交流区

[求助]看看这个方程的解问题出在哪

rollingsteel 发布于 2007-10-13 19:14, 547 次点击

#include <stdio.h>
#include <math.h>
#include <iostream.h>
#include <conio.h>
main()
{
int k=0,i,j,m;
double a[3][3],b[3],x[3][1000],p,p1,p2,p0;
clrscr();
printf("Please input the coefficients :a11..a33 and b1 b2 b3\nWarning:The value of aii can't be zero!\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
scanf("%lf",&a[i][j]);
}
for(i=0;i<3;i++)
scanf("%lf\n",&b[i]);

printf("Please input the start value of x1[0],x2[0],x3[0]\n");
for(m=0;m<3;m++)
scanf("%lf\n",&x[m][0]);

do
{ x[0][k+1]=(b[0]-a[0][1]*x[1][k]-a[0][2]*x[2][k])/a[0][0];
x[1][k+1]=(b[1]-a[1][0]*x[0][k]-a[1][2]*x[2][k])/a[1][1];
x[2][k+1]=(b[2]-a[2][0]*x[0][k]-a[2][1]*x[1][k])/a[2][2];
p0=x[0][k+1]-x[0][k];
p1=x[1][k+1]-x[1][k];
p2=x[2][k+1]-x[2][k];
if(p0>p1&&p0>p2)
p=p0;
else
p=(p1>p2?p1:p2);k++;
}while (p>0.00001);
printf("x1=%lf\n",x[0][k+1]);
printf("x2=%lf\n",x[1][k+1]);
printf("x3=%lf\n",x[2][k+1]);
printf("The Jaxobi iterative number is:%d\n",k+1);
return 0;
}

说明:本方程是用雅克比迭代法解决三元一次方程的一个小程序。
有几个点可能有点问题: "x[3][1000]" 语言对数组的大小有规定么?
在输入方程组系数6个和b 3个之后本来要求输入初始值3个,但是程序却出现不只6+3+3个数要输入。
高手指教!

9 回复
#2
xyffyyin2007-10-13 20:11
呃...前面输入不是6.而是9吧.
#3
绿梦2007-10-13 21:41

真打击俺的自信,唉,俺没有学过

#4
炮炮兵2007-10-13 23:54
还没学啊~~~~~~~~~~
#5
l6703973062007-10-14 19:20
太难了,看不懂呀,不知道什么时候才能把C学好啊
#6
zero0c2007-10-14 19:54

确实挺难的

#7
moximon2007-10-14 20:38

考数学的成分多于C的成分....C的部分很容易理解,解释下数学吧,尽量写容易理解些....

a[3][3], b[3], x[3]---->形式是这样:
b[0] = a[0][0]x[1] + a[0][1]x[2] + a[0][3]x[3]
b[1] = a[1][0]x[1] + a[1][1]x[2] + a[1][3]x[3]
b[2] = a[2][0]x[1] + a[2][1]x[2] + a[2][3]x[3]
以上三元一次方程通式....可以看作解线性代数解x1,x2,x3值....
(x0, x1, x2) = (b0, b1, b2) / (a00, a01, a02 ; a10, a11, a12 ; a20, a21, a22)

以前没有接触雅克比迭代法,但猜测是用逼近法....允许X的值离真值有p=0.00001的差距...具体怎样解方程,这是数学问题了....初学者拿这种题目出来(考问?)的不仅仅是C问题了...>______<...做人谦虚点吧


#8
moximon2007-10-14 20:39

多发了...>________<

[此贴子已经被作者于2007-10-14 20:40:33编辑过]

#9
烟雨寒风2007-10-15 09:31

还在学习中````

#10
shunfawang2007-10-15 10:22

有点难
现在还不是很了解

1