如何在MATLAB中使用fzero

use*_*605 1 math matlab equation

我想fzero用来近似根

x+sin(x)=e^x  
Run Code Online (Sandbox Code Playgroud)

接近-1.

但是,fzero似乎只是返回我提供的猜测:

> fzero('x+sin(x)==e^x', -1)
-1
> fzero('x+sin(x)==e^x', -4) 
-4
Run Code Online (Sandbox Code Playgroud)

实际答案应该是-.354.这是我的问题?

Lui*_*ndo 5

您的代码中存在几个问题:

  • 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
Run Code Online (Sandbox Code Playgroud)

如@rayryeng所述,fzero还接受函数句柄来定义其输入函数.实际上,正如@horchler所观察到的那样,使用字符串当前没有记录,而且 速度较慢.因此,建议以fzero函数句柄的形式定义要传递的函数.在您的情况下,您可以直接使用匿名函数,如下所示:

>> fzero(@(x) x+sin(x)+exp(x), -1)
ans =
   -0.3545
Run Code Online (Sandbox Code Playgroud)

  • `fzero`也可以采用匿名函数,但我相信你已经知道了! (2认同)
  • 在最近的Matlab版本中,字符串选项似乎完全没有记录.理论上它可以在将来完全删除.它也比使用匿名函数慢(对于使用OP函数的100`fzero`调用,减少5-6倍). (2认同)