changyl01 发表于 2006-11-13 23:49

这个程序那里错了?

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
我想求出它的迭代步数来
但是出来的结果总是不对
循环体好像进行不下去
我也不知道哪里错了
先谢谢各位了!

xjzuo 发表于 2006-11-14 08:36

回复

eps改为epsi;
把判断norm((x-x0)*A)>epsi和mod(m,2)分开写,后者可用一条if--else语句实现.

changyl01 发表于 2006-11-15 16:17

为什么要将eps改成epsi

eight 发表于 2006-11-15 16:51

原帖由 changyl01 于 2006-11-15 16:17 发表
为什么要将eps改成epsi


请help eps一下

happy 发表于 2006-11-16 14:18

原帖由 changyl01 于 2006-11-15 16:17 发表
为什么要将eps改成epsi

eps为matlab内置的一个参数,eps近似为2.2e-16

xjtu211 发表于 2006-11-16 16:27

原帖由 xjzuo 于 2006-11-14 08:36 发表
eps改为epsi;
把判断norm((x-x0)*A)>epsi和mod(m,2)分开写,后者可用一条if--else语句实现.
有道理啊
页: [1]
查看完整版本: 这个程序那里错了?