matlab的fminbnd函数求出的最小值与实际最小值有误差怎么消除?

例如:
f=@(x)(3*x+2)

f =

@(x)(3*x+2)

>> [a,b]=fminbnd(f,2,3)

a =

2.0001

b =

8.0002
结果中a不应该等于2才对么?我试了一下其他函数,发现他的最小值总是出现在趋近于真实最小值的地方,也就是说其求出来的最小值有误差,怎么消除?不知道各位大神看懂意思没?先谢谢了!

本来fminbnd是基于数值计算的肯定存在舍入误差
我们可以增加参数'TolX',设置允许误差的范围
只要给err一个很少的值,返回的误差就会小于这个值
x = fminbnd(fun,x1,x2,'TolX',err)

然而本身fminbnd就是在x1<x<x2的区间内寻找最小值
而你给的例子是个线性函数,最小值是x=2时的取值
而函数返回的值只能在(2,3)的开区间中,是肯定取不到2这点的
所以只会返回一个很接近2的值,不能精确等于2

其实,对于这种情况我们可以用fminbnd找到开区间内的最小值
同时也计算在区间端点处的函数值
那么在闭区间中的最小值肯定是三个值中最小的值,这样可以取得闭区间端点处的最小值

而对于区间内部的最小值,fminbnd得到的结果或多或少是要存在误差的
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答