我正在尝试使用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 有人可以帮助回答差异的来源吗?谢谢。
答案 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