fminbnd дает значение, которое не является минимальным на графике - PullRequest
1 голос
/ 28 мая 2019

Я пытаюсь найти минимальное значение F и соответствующие ему значения оси X с помощью fminbnd. Однако, когда я отметил это минимальное значение на графике, оно вовсе не является минимальным. Код, который я использовал ниже:

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')

Результат кода здесь: сюжет и минимальная точка Может кто-нибудь помочь с ответом, откуда исходит несоответствие? Спасибо.

1 Ответ

0 голосов
/ 28 мая 2019

Хорошая вещь в функциях оптимизации 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...