fminbnd给出的值不是在绘图上看到的最小值

时间:2019-05-28 17:41:15

标签: matlab

我正在尝试使用fminbnd找到最小F及其对应的x轴值。但是,当我在绘图上标记此最小值时,它根本不是最小值。我使用的代码如下:

T = 726.85; 

kB = 8.61e-5;

Fe_energy = 0;

O_energy_Joule = -175.100 + 50.16*T;
O_energy = O_energy_Joule*6.242e18; 

syms c;
f = c*O_energy + (1-c)*Fe_energy + kB*T*(c.*log(c) + (1-c).*log(1-c));
F = matlabFunction(f);
x = fminbnd(F, 0, 1)

c = (0:1e-7:1e-4);
R = c*O_energy + (1-c)*Fe_energy + kB*T*(c.*log(c) + (1-c).*log(1-c));
plot(c, R)
hold on
plot(x,F(x),'x')

代码的结果在这里: plot and minimum point 有人可以帮助回答差异的来源吗?谢谢。

1 个答案:

答案 0 :(得分:0)

关于matlab优化功能的一件好事是,您可以设置一些有用的选项,并查看优化器的功能。

我没有符号工具箱,因此我将您的函数放在单独的文件中:

options = optimset('Display','iter');
x = fminbnd(@myfun, 0, 1, options);

这是优化程序的输出:

   16    0.000453104   1.0262e+20        golden
   17    0.000280034  6.34228e+19        golden
   18     0.00017307  3.91974e+19        golden
   19    0.000106963  2.42254e+19        golden
   20     6.6107e-05  1.49721e+19        golden

Optimization terminated:
 the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 

看看终止标准。

现在将您自己的终止条件放入选项中并执行代码:

options = optimset('Display','iter', 'TolX', 1e-7);
x = fminbnd(@myfun, 0, 1, options);

输出:

   31    3.32187e-07  7.52347e+16        golden
   32    2.05303e-07  4.64976e+16        golden
   33    1.26884e-07  2.87371e+16        golden
   34    7.84188e-08  1.77605e+16        golden
   35    4.50855e-08  1.02111e+16        golden

Optimization terminated:
 the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-07 

Using fminbnd. Setting your own termination criteria