matlab 中fzero,matlab – 一个变量的fzero和fsolve之间的差异
就在这里.我只想提到两者之间最直接的区别:07000 can be used to solve for the zero of a single variable equation. However, 07001 will find the zero if and only if the function crosses the x-axis.这是一个简单的例子:考虑函数f = x ^ 2.该函数
就在这里.我只想提到两者之间最直接的区别:
07000 can be used to solve for the zero of a single variable equation. However, 07001 will find the zero if and only if the function crosses the x-axis.
这是一个简单的例子:考虑函数f = x ^ 2.该函数对于x的所有实数值都是非负的.这在x = 0时有一个根.我们将匿名函数定义为f =@(x)x.^2;并尝试使用这两种方法找到根.
使用fsolve
options=optimset('MaxIter',1e3,'TolFun',1e-10);
fsolve(f,0.1,options)
Equation solved.
fsolve completed because the vector of function values is near zero
as measured by the selected value of the function tolerance, and
the problem appears regular as measured by the gradient.
ans =
1.9532e-04
不是零,而是接近.
使用fzero
fzero(f,0.1)
Exiting fzero: aborting search for an interval containing a sign change
because NaN or Inf function value encountered during search.
(Function value at -1.37296e+154 is Inf.)
Check function or try again with a different starting value.
ans =
NaN
它找不到零.
考虑函数f =@(x)x.^3的另一个例子;穿过x轴并且在x = 0时具有根.
fsolve(f,0.1)
ans =
0.0444
fzero(f,0.1)
ans =
-1.2612e-16
在这种情况下,fsolve也不会返回0.即使使用我在上面定义的选项,也只能通过fsolve获得0.0017.但是,fzero的答案在机器精度范围内是正确的!答案的差异不是因为算法效率低下.这是因为他们的目标不同.
fzero有一个明确的目标:找到零!简单.那里没有含糊之处.如果它穿过x轴,则为零,它将找到它(仅限实数).如果它不交叉,它会发出呜呜声.
但是,fsolve的范围更广.它旨在解决非线性方程组.通常,您无法找到这些方程的精确解,并且必须设置容差级别,在此范围内您愿意接受解决方案作为答案.因此,需要手动设置许多选项和公差来按摩确切的根.当然,你有更好的控制,但为了找到单个var方程的零,我认为这是一个痛苦.在这种情况下我可能会使用fzero(假设它穿过x轴).
除了这个主要差异之外,在实现和使用的算法方面存在差异.为此,我将向您介绍有关这些功能的在线文档(请参阅上面的链接).
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)