程序写出运行没有结果 求大神帮忙看看哪儿错了。是用共轭梯度法解线性方程组,财富值不够了 见谅。 10

#include<stdio.h>#include<math.h>main(){doubleA[3][3]={2,-1,-1,-1,2,0,-1,0,1};doubleb... #include <stdio.h>
#include <math.h>
main()
{
double A[3][3]={2,-1,-1,-1,2,0,-1,0,1};
double b[3]={0,1,0};
double x[3]={0,0,0};
double r[3]={0,1,0};
double xk[3]={0,0,0};
double p[3]={0,1,0};
double m,n,temp,t;
int i,j,k=0,flag=0;
while (flag!=1)
{ k=k+1;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
m=p[i]*r[i]/(p[i]*A[i][j]*p[j]);
x[i]=xk[i]+m*p[i];
r[i]=r[i]-m*A[i][j]*p[j];
n=p[i]*A[i][j]*r[j]/(p[i]*A[i][j]*p[j]);
p[i]=r[i]-n*p[i];
temp=xk[i];
xk[i]=x[i];
}
}
}
for (i=0;i<3;i++)
{ t=fabs(x[i]-temp);
if (t=0)
flag=1;
printf ("%d次迭代\n",k);
}
printf ("解为:\n");
for(i=0;i<3;i++)
{
printf("x%d=%.5lf\n",i+1,x[i]);
}
}
展开
 我来答
cj3292855
2013-04-15 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:112
采纳率:0%
帮助的人:95.5万
展开全部
while (flag!=1)
{
k=k+1;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
m=p[i]*r[i]/(p[i]*A[i][j]*p[j]);
x[i]=xk[i]+m*p[i];
r[i]=r[i]-m*A[i][j]*p[j];
n=p[i]*A[i][j]*r[j]/(p[i]*A[i][j]*p[j]);
p[i]=r[i]-n*p[i];
temp=xk[i];
xk[i]=x[i];
}
}
}
条件语句问题。
while的条件恒成立,flag在while循环中未改变值且while语句中无跳出语句。
更多追问追答
追问
那要肿么修改呢 π.π
追答
抱歉啊,共轭梯度法不是很明白,所以就算法上,我帮不了你。你可以找找其他人。
还有,你上面的程序中忘了说一点:
double A[3][3]={2,-1,-1,-1,2,0,-1,0,1};
定义不规范。
double A[3][3]={{2, -1, -1}, {-1, 2, 0}, {-1, 0, 1}};
chr1999
2013-04-15 · TA获得超过1056个赞
知道小有建树答主
回答量:2462
采纳率:0%
帮助的人:1246万
展开全部
float 请 fabs()< 0.00001等比较
追问
-。- 啥意思,,,,我是菜鸟不太懂额。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式