2016-08-21 116 views
1

当前尝试编写一个正在使用先前函数的输出的函数。输出如下:将一个函数的输出用作另一个函数的输入

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),因为它在脚本文件前面为我工作,但现在它说

错误没有足够的输入参数

任何想法gre非常感谢。

原题:

The question

+0

我真的不明白什么叫做如何。如果只有'x_new',返回值'f','fp'和'fpp'是什么意思?如果你的功能是“有趣”,那么它就不是“有趣(x)”而是? –

+0

'f','fp'和'fpp'是符号形式的第一个函数的输出。 'x_new'是第二个函数的输出。是的意思是“有趣(x)”,不幸的是错字。 –

回答

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 
+0

假设它是一个迭代:) –

+0

它是一个迭代。 x_new是第二个函数的唯一输出参数,所以'函数[f,fp,fpp,x_new] = fun(x)'不读'function [x_new] = halley(fun,x,acc)'? FYI'halley'是第二个函数的名称,'fun'是第一个函数的名字(其输出是'f','fp','fpp'。'acc'是给定的值,'x'是在函数中不使用区间'[-5 5]'。'acc',而是在while循环中使用。 –

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,所以也许你不应该使用象征性的数学? 我希望这可以让事情更清楚,但我不知道这种方法应该如何工作。

+0

然后如何在'-5'处包含'x'值的开始点,并且使用while循环来停止函数,当连续的'x'值之间的差异小于输入'acc'(值为'1.0e -8'),并且当'abs(fun(x))

+0

'fun(x)'有3个输出,所以'abs(fun(x)) EBH

+0

我认为你应该在你的问题中增加更多的细节,因为不清楚这一切的目的是什么,'acc'和' - 5'输入到'halley'?应该输出什么? – EBH

相关问题