目前正在尝试编写一个使用前一个函数输出的函数。产出如下:
f(x) = exp(x) -3*x.^2
fp(x) = exp(x) -6*x
fpp(x) = exp(x) -6
新功能是:
x_new = x - 2*(f(x))*(fp(x)) / 2*(fp(x).^2) -(f(x))*(fpp(x))
试图写[f,fp,fpp] = fun(x)
,因为它之前在一个脚本文件中对我有用,但现在说它
错误输入参数不够
任何想法都非常感激。
最初的问题:
答案 0 :(得分:0)
我不知道为什么它不起作用,但我认为以下代码对我来说效果很好:
function[f,fp,fpp,x_new]=fun(x)
f=exp(x) -3*x.^2 ;
fp=exp(x) -6*x ;
fpp=exp(x) -6;
x_new= x - 2*(f)*(fp) / 2*(fp.^2) -(f)*(fpp);
return
x=1234;
for ind=1:10
[f,fp,fpp,x]=fun(x);
end
答案 1 :(得分:0)
我不确定这里的数学,但你只需要一个函数,它应该是这样的:
function r = halley(fun,x0,acc)
syms x
fp = diff(fun);
fpp = diff(fp);
x_new = symfun(x - 2*(fun(x))*(fp(x)) / 2*(fp(x).^2) -(fun(x))*(fpp(x)),x);
xold = x0;
xnew = x_new(xold);
while abs(fun(xold)) < acc && abs(xold-xnew) > acc
tmp = xnew;
xnew = x_new(xold);
xold = tmp;
end
r = xnew;
end
然后从具有另一个函数作为输入的脚本中调用它:
acc = 1.0e-8;
x0 = -5;
syms x
fun = symfun(exp(x) -3*x.^2 +1,x);
r = halley(fun,x0,acc)
然而,在本练习中,它表示函数的输入应该是函数句柄,如@fun
,所以也许你不应该使用符号数学?
我希望这会让事情更清楚,但我不知道这种方法应该如何运作。