2015-08-31 97 views
1

我想用fzero如何使用fzero在MATLAB

x+sin(x)=e^x 

密切根近似爲-1。

然而,fzero似乎只是回到我公司提供的猜測:

> fzero('x+sin(x)==e^x', -1) 
-1 
> fzero('x+sin(x)==e^x', -4) 
-4 

實際的答案應該是-.354。我的問題在這裏?

+0

我認爲路易斯已經充分回答了你的問題。請考慮接受他的回答 – rayryeng

回答

6

有在你的代碼的幾個問題:

  • fzero試圖找到作爲第一個參數提供的功能的零。你提供的是一個等式,而不是一個函數。
  • Matlab不知道e是什麼。使用exp
  • 方程x+sin(x)==exp(x)似乎沒有真正的解決方案。你的意思可能是x+sin(x)==-exp(x)

考慮到這三點,你要計算的零的函數是字符串形式,'x+sin(x)+exp(x)'。所以:

>> fzero('x+sin(x)+exp(x)', -1) 
ans = 
    -0.3545 

正如@rayryeng指出,fzero也接受function handle來定義其輸入功能。實際上,正如@horchler所觀察到的那樣,使用一個字符串當前是沒有記錄的,而它的比較慢。因此,建議以函數句柄的形式定義要傳遞給fzero的函數。在你的情況下,你可以直接使用anonymous function如下:

>> fzero(@(x) x+sin(x)+exp(x), -1) 
ans = 
    -0.3545 
+2

'fzero'也可以採用匿名功能,但我相信你已經知道了! – rayryeng

+0

@rayryeng是的:-)我使用字符串,因爲OP有。但這是一個很好的提示! –

+0

@rayryeng感謝您的更正!我輸入得太快了:-D –