【问题标题】:Newton Raphson in MATLABMATLAB 中的牛顿拉夫森
【发布时间】:2014-01-17 18:06:04
【问题描述】:

我想实现以下内容:我为我的特定功能编写了一个执行 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

【问题讨论】:

  • 您的函数是否还返回查找y0所需的迭代次数?
  • 1.) 您是否考虑过将函数放在forwhile 循环中? 2.) 您希望在哪里打印迭代次数和y0 值?在屏幕上,在文件中?
  • 在屏幕上,我该如何设置?

标签: matlab implicit newtons-method


【解决方案1】:

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

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

另外,你的函数实际上应该返回最终的y0as 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

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

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

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

【讨论】:

  • 在 matlab 中我收到错误,即在通话期间未分配“nulpunt”。此外,只要你给它一个 x 和 y0 的值,牛顿函数本身就可以正常工作。问题是我想要一个给定 x 和 y0 值的循环,它使用找到的值作为新的 y0
  • 再试一次。您的函数实际上需要为nulpunt 分配一个值——我假设您需要y0。您应该已经有了解决方案的屏幕输出。只要您在循环内,y0 的值将在每次调用 newton 后被覆盖,因此被用作下一次运行的起始值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 2012-04-18
  • 2018-07-29
  • 2022-01-10
  • 2015-03-04
  • 1970-01-01
相关资源
最近更新 更多