这个程序那里错了?
function y=ya_100_100(x)format long
eps=input('please input your accuracy:');
a=-5;
b=5;
x0=a+(b-a)*rand(1,100);
A=diag();
m=1;
iterstep(1,:)=x;
while mod(m,2)~=0&&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
while mod(m,2)==0&&norm((x-x0)*A)>eps
x1=iterstep(m-1,:);
x2=iterstep(m,:);
grad1=(x1-x0)*A;
grad2=(x2-x0)*A;
alpha1=grad1*grad1'/(grad1*A*grad1');
alpha2=grad2*grad2'/(grad2*A*grad2');
alpha=2/(sqrt((1/alpha1-1/alpha2)^2+4*norm(grad2)^2/norm(x2-x1)^2)+1/alpha1+1/alpha2);
x2=x2-alpha*grad2;
x=x2;
iterstep(m+1,:)=x;
m=m+1;
end
step=max(size(iterstep))-1
我想求出它的迭代步数来
但是出来的结果总是不对
循环体好像进行不下去
我也不知道哪里错了
先谢谢各位了!
回复
eps改为epsi;把判断norm((x-x0)*A)>epsi和mod(m,2)分开写,后者可用一条if--else语句实现. 为什么要将eps改成epsi 原帖由 changyl01 于 2006-11-15 16:17 发表
为什么要将eps改成epsi
请help eps一下 原帖由 changyl01 于 2006-11-15 16:17 发表
为什么要将eps改成epsi
eps为matlab内置的一个参数,eps近似为2.2e-16 原帖由 xjzuo 于 2006-11-14 08:36 发表
eps改为epsi;
把判断norm((x-x0)*A)>epsi和mod(m,2)分开写,后者可用一条if--else语句实现.
有道理啊
页:
[1]