【问题标题】:General Newton Method Function File Matlab通用牛顿法函数文件 Matlab
【发布时间】:2017-03-10 03:46:09
【问题描述】:

我对 Matlab 的了解非常有限,我正在尝试制作一个通用的 Newton Raphson 函数,但每次都会出现错误,提示输入参数不足。我的代码需要三个输入,f(函数)、c0(初始猜测)和 n(步数)。到目前为止,这是我的代码:

function [c] = Q3(f,c0,n)


for i=1:n

c(0)=c0;
f=f(x);
fp=diff(f,x);

c(i)=c(i-1)-subs(f,x,c(i-1))/subs(fp,c(i-1));

end


disp(c)

我在脚本文件中写了这个函数

g=@(x)(sin((pi.*x)/2)+(1/x)-(10.*x));

然后我将其放入命令窗口 [c]=Q3(g(x),1,n) 希望它可以工作,但显然我的代码需要工作。 谢谢

【问题讨论】:

  • 代码错误。 subs 用于符号替换,如果你想评估函数,你需要做f(c(i-1))。除其他外......大部分代码都是错误的。
  • 可能唯一缺少的是将x 声明为f=f(x) 之前的符号,以便正确地将f 从函数更改为符号表达式。
  • @LutzL 是的,但是 NR 是一种数字方法,因此象征性地使用 NR 并不是一个非常聪明的主意。如果你有符号表达式,你可以用solve解决它。

标签: matlab math newtons-method


【解决方案1】:

这应该可以解决问题,函数 g 的定义如您所说:

g=@(x)(sin((pi.*x)/2)+(1/x)-(10.*x));

但你也应该定义nc0,例如:

clearvars

g=@(x)(sin((pi.*x)/2)+(1/x)-(10.*x));

n=10
c0=1

c=Q3(g,c0,n)

然后在另一个文件中为 NR 编写函数:

function [c] = Q3(f,c0,n)

h=1e-4;
c(1)=c0;

for i=1:n 
    g=f(c(i));
    gp=(f(c(i)+h)-f(c(i)-h))/(2*h)
    c(i+1)=c(i)-g/gp
end

disp(c)

在这种情况下,我选择h=1e-4 作为数值导数近似,但您可以更改它。我建议h<1e-2

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 2019-06-19
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多