如何为每个初始点找到牛顿迭代

时间:2017-10-04 07:29:10

标签: matlab loops

 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进行迭代。

1 个答案:

答案 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)