我想实现以下内容:我编写了一个脚本,为我的特定功能执行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
答案 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
找到的内容以及花了多长时间。