2016-08-21 120 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

相關問題