0

我想实现以下内容:我为我的特定功能编写了一个执行 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(2) 为 x 和先前找到的 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
4

1 回答 1

0

y0您的循环应该已经在每次连续运行时都使用前一个。
如果要y0在 Matlab 命令窗口中显示迭代次数和迭代次数,首先需要更改newton-function 以不仅返回y0迭代次数,还返回迭代次数,iteraties

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

此外,您的函数实际上应该将最终返回y0nulpunt

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它找到的内容以及花费了多长时间。

于 2014-01-18T16:27:40.433 回答