我对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)希望它能工作但显然我的代码需要工作。 感谢
答案 0 :(得分:0)
这应该可以解决问题,函数g的定义如下所述:
g=@(x)(sin((pi.*x)/2)+(1/x)-(10.*x));
但您也应该定义n
和c0
,例如:
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
。