【问题标题】:How to use fzero in MATLAB如何在 MATLAB 中使用 fzero
【发布时间】:2015-08-31 18:43:02
【问题描述】:

我想用fzero来近似的根

x+sin(x)=e^x  

接近 -1。

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

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

实际答案应该是 -.354。我的问题是什么?

【问题讨论】:

  • 我认为 Luis 已经充分回答了您的问题。请考虑接受他的回答

标签: matlab math equation


【解决方案1】:

你的代码有几个问题:

  • fzero 试图找到作为第一个参数提供的 function 的零。您提供的是方程,而不是函数。
  • 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

【讨论】:

  • fzero 也可以接受匿名函数,但我相信你已经知道了!
  • @rayryeng 是的 :-) 我使用了字符串,因为 OP 使用了。但这是一个很好的提示!
  • @rayryeng 感谢您的指正!我打字太快了:-D
  • 呵呵抱歉...我看到你正在积极编辑它,我等了几分钟看看你是否发现了那个拼写错误,但我没有看到你发现它所以我决定为你修复它大声笑。对不起。错字盯着我看,好像需要改正。
  • 在最新版本的 Matlab 中,字符串选项似乎完全没有记录。理论上它可以在未来完全删除。它也比使用匿名函数慢(使用 OP 函数调用 100 次 fzero 会慢 5-6 倍)。
猜你喜欢
  • 1970-01-01
  • 2018-01-10
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
相关资源
最近更新 更多