changyl01 发表于 2006-11-9 00:13

这个程序错在哪里了?

这是一个迭代的程序,我输入x=以后,在运行过程中一直busy,按说这个不是非常大阿
是不是我的循环体有问题啊
请各位大虾指点!
function y=bb2_2_10(x)
format short
eps=input('please input your accuracy:');
a=-5;
b=5;
x0=a+(b-a)*rand(1,2);
A=diag();
m=1;
iterstep(1,:)=x;
while m==1
   while norm((x-x0)*A)>eps
   grad=(x-x0)*A;
   alpha=grad*grad'/(grad*A*grad');
   x=x-alpha*grad;
   iterstep(m+1,:)=x;
   m=m+1;
end
end
while m>=2
   while norm((x-x0)*A)>eps
    x1=iterstep(m-1,:);
    x2=iterstep(m,:);
    grad1=(x1-x0)*A;
    grad2=(x2-x0)*A;
    alpha=grad1*grad1'/(grad1*A*grad1');
    x2=x2-alpha*grad2;
    x=x2;
    iterstep(m+1,:)=x;
    m=m+1;
   end
end


step=max(size(iterstep))-1
x
iterstep

xjzuo 发表于 2006-11-9 08:20

回复

你的程序问题出在两个while外循环,稍作修改,可以很快得出结果.

songzy41 发表于 2006-11-9 09:15

eps是MATLAB中常量的名称,eps=2.2204e-016。因此不合适作为变量的名称。

changyl01 发表于 2006-11-9 20:03

请教二楼

我是一个新手
请帮忙告之如何修改!
谢谢!
谢谢三楼

happy 发表于 2006-11-10 12:45

判断条件有问题

while m>=2
这一句表示只要m>=2就运行循环中的语句

而在你的循环中
和m相关的只有 m=m+1;

也就是说每运行一次m增加1,永远都满足m>=2这个条件,程序也就无限循环下

建议先搞清楚程序的逻辑关系,给出程序运行结束的条件

changyl01 发表于 2006-11-10 22:09

我说来

happy 发表于 2006-11-11 14:13

原帖由 changyl01 于 2006-11-10 22:09 发表
我说来

????

changyl01 发表于 2006-11-12 00:26

大错了
呵呵
不好意思
谢谢特聘教授!
您是哪里的?
页: [1]
查看完整版本: 这个程序错在哪里了?