用MATLAB求 x^3-2*x-5=0在[0,3]的解

a=0;fa=-5;b=3;fb=16;whileb-a>eps*bx=(a+b)/2;fx=x^3-2*x-5;iffx>0b=x;elsea=x;endendx程序是... a = 0; fa = -5;

b = 3; fb = 16;

while b-a > eps*b

x = (a+b)/2;

fx = x^3-2*x-5;

if fx>0

b = x;

else

a = x;

end

end

x
程序是上面的那样,我的疑问是while语句中为何有b-a > eps*b?,记得用二分法求解方程的时候是选取两个函数的乘积的正负来判断啊,这里怎么是用b-a > eps*b来判断啊?
展开
 我来答
把盏饮寂寞
2015-04-04 · TA获得超过405个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:83.5万
展开全部

不管是用两数值乘积的正负来判断,还是用b-a来判断,效果是一样的。

因为在你的这段程序中,始终保持了b>a。分析如下:

  1. 最开始时,在区间[0,3]内,a=0取最小值,b=3取最大值,且fa对应的是负数,fb对应的是正数;

  2. 找到中点,x=(a+b)/2,并求出fx,当fx为正时,说明方程的根在[a,x]中间,所以,要令b=x;
    若fx为负,说明方程的根在[x,b]中间,那就要令a=x;

  3. 由第2步可知,始终都是b>a,当b与a越来越接近的时候,既可以认为(a+b)/2就是方程的根。

所以用b-a的差值做收敛判据是可以的。

追问
谢谢你的回答,可是我想多问一句,可以编一个程序用的两个函数的乘积的正负的二分法来解这个方程吗?
追答

对于本问题来说,方程x^3-2*x-5=0在[0,3]区间内只有一个解,可以用两个函数值乘积的正负作为判据,用二分法来解本问题。

a = 0; fa = -5;
b = 3; fb = 16;

while b-a > eps*b
    x = (a+b)/2;
    fx = x^3-2*x-5;
    if fa*fx>0
        a = x;
    else
        b = x;
    end
end

x

结果为2.0946,与源代码结果一致。

东莞大凡
2024-08-07 广告
OpenCV标定板是东莞市大凡光学科技有限公司在相机标定中常用的工具。它通常由黑白格点按一定规则排列在平面上组成,如棋盘格或圆形格等。在相机标定时,将标定板置于不同位置和姿态下拍摄图像,利用OpenCV库中的函数检测标定板上的角点或圆心,进... 点击进入详情页
本回答由东莞大凡提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式