function p = newton_hw(p0,tol,Nmax)
%NEWTON'S METHOD: Enter f(x), f'(x), x0, tol, Nmax
f = @(x) x*cos(x)-((sin(x))^2);
fp= @(x) -x*sin(x)+ cos(x)-2*sin(x)*cos(x);
p = p0 - (f(p0)/fp(p0));
y1=f(p);
fprintf('y1=%f',y1)
i = 1;
while (abs(p - p0) >= tol)
p0 = p;
p = p0 - f(p0)/fp(p0);
i = i + 1;
if (i >= Nmax)
fprintf('Fail after %d iterations\n',Nmax);
break
end
y=f(p);
fprintf('a=%f,y=%f,\n',p,y);
end
end
这是我的问题:
如何为每个p0 = 0,.1,.2,...,49,5
进行迭代。
答案 0 :(得分:1)
使用用户的步骤迭代可以这样做:
for i = 0:0.1:5
任何索引都可以用同样的方式完成:x = [0:2:50]
。
如果你的功能正常(我想是这样),我们就可以这样:
k = 1;
for i = 0:0.1:5
res(k) = newton_hw(i,0.001,1000);
k = k+1;
end
但我们也可以用一种方式来做 - 风格:
res = arrayfun( @(x) newton_hw(x, 0.001, 1000), I)