matlab简单问题 关于fzero

fzero(@(x)x^2-1,0.01)ans=-1难道不是1,么?... fzero(@(x)x^2-1,0.01)

ans =

-1

难道不是1,么?
展开
 我来答
tianxiawulang
2014-10-23 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2361万
展开全部

这是一个很好的问题,虽然看似简单,但涉及到很多值得思考的问题。

 

首先,应该明确一点——fzero求函数零点是和初值的选取有密切关系的,例如,x^2-1有两个零点,取不同的初值,可能会求得不同的零点,如下图所示。

从图中能发现一些奇怪的现象,例如:

>> fzero(f,0.01)
ans =
    -1
>> fzero(f,0.16)
ans =
     1
>> fzero(f,0.161)
ans =
    -1
>> fzero(f,-0.01)
ans =
     1
>> fzero(f,-0.16)
ans =
    -1
>> fzero(f,-0.161)
ans =
     1

按常理,应该求得距离初值比较近的零点才对,但上面的例子显示,事实并非如此,甚至,求得相同零点所对应的初值范围还不连续,的确很让人崩溃。。。

 

说明一下fzero求零点的基本步骤:它会首先确定一个区间,使得区间两端的函数值异号,这样,只要函数连续,就能够求出一个零点。

 

确定区间的过程与初值x0有关,如果x0非零,就以x0/50为初始步长,向正负两个方向分别扩展区间,如果满足函数值异号,则确定区间的步骤完成,否则按照sqrt(2)的倍数增大步长,继续扩展区间。需要注意的是,扩展区间时,按照先负方向减步长、后正方向加步长的顺序,而且一旦左端点满足要求就会终止,这样,就可能出现从某个的初值x0出发,分别向正负方向n次扩展区间,直到n+1次时,刚好方向的符号改变,从而这个区间就确定为包围了负方向(例如-1)这个零点。

 

以上应该大致可以解释,为什么不是象直觉理解的那样“求出的零点应该靠近初值”。

醉蝶翩翩
2014-10-22
知道答主
回答量:4
采纳率:0%
帮助的人:4.9万
展开全部
我也很好奇 就试了一下 fzero(@(x)x^2-1,0.05)时,ans=1,。fzero是一个数值搜索过程,依赖于函数特性,值的指定,以及matlab所能识别的最小步长。
如果想计算更准确,可以用符号函数求解0点。符号函数不用关心具体的函数值,完全当做符号处理,所以,不存在上述不稳定因素。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
f3rell
2014-10-14 · TA获得超过162个赞
知道小有建树答主
回答量:350
采纳率:50%
帮助的人:150万
展开全部
都说简单问题了,还问?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式