Newton Raphson在MATLAB中

时间:2014-01-17 18:06:05

标签: matlab implicit newtons-method

我想实现以下内容:我编写了一个脚本,为我的特定功能执行Newton Raphson算法。现在我想编写一个脚本,使用之前找到的零作为我的下一个初始起点重复自己:

x=zeros(1,31);
for i=1:31
    x(i)=(i-1)/10;
end
y0=0;
for i=1:length(x)
    y0=newton(x(i),y0)
end

所以,我希望这个脚本执行newton(x,y0)。所以它将从newton(0,0)开始,它将找到一个新的值y0然后我希望脚本执行newton(0.1,y0)等。我希望这些值与数量一起显示在表中迭代找到值y0所需的。

我希望我的问题很明确。谢谢。

再次:我有一个向量x,元素为0,0.1,0.2,...,3 当我用初始值y0实现x(i)时,newton(x,y)将给出一个值。然后我希望脚本再次执行newton(x,y),x值为x(2),之前找到y0。所以我需要某种循环,但我无法完成它... :(

修改
这是我的newton - 函数:

function nulpunt=newton(x,y0)

tolerantie=1e-8;
iteraties=0;

while (abs(functie1(y0,x))>tolerantie)
    y0=y0-functie1(y0,x)/afgeleide_functie1(y0);
    iteraties=iteraties+1;
end

if iteraties==100;
    fprintf('Maximaal aantal iteraties bereikt')
else
    fprintf('De benadering van het nulpunt y*(%.2f) is %.4f gevonden in %d iteraties.\n',x,y0,iteraties)
end
end

1 个答案:

答案 0 :(得分:0)

你的循环应该在每次连续操作时使用之前的y0 如果要在Matlab命令窗口中显示y0和迭代次数,首先需要更改newton - 函数,不仅返回y0,还要返回迭代次数,iteraties

function [nulpunt, iteraties]=newton(x,y0)

此外,您的函数实际上应该将最终y0作为nulpunt

返回
if iteraties==100;
    fprintf('Maximaal aantal iteraties bereikt')
    nulpunt = 0; % in this case, no solution was found, return the baseline value;
else
    fprintf('De benadering van het nulpunt y*(%.2f) is %.4f gevonden in %d iteraties.\n',x,y0,iteraties)
    nulpunt = y0;
end

显示每次执行y0后的迭代次数和newton,在调用函数后添加以下两行:

[y0, iteraties] = newton(x(i),y0);
disp(['This point was found: ',num2str(y0)])
disp(['It took ',num2str(iteraties),' iterations.'])  

这实际上可能是多余的,因为您的函数已经输出了y0找到的内容以及花了多长时间。