И другие программы этой серии
Выдано сообщение о превышении лимита числа итераций, а значения xmin явно далеки от верных.
Можно попытаться применить функцию fminsearch для поиска минимума функций и с большим числом переменных. Определим в виде m-файла функцию трех переменных three_var:
function b = three_var(v)
x = v(1); y = v(2); z = v(3);
b = x.^2 + 2.5*sin(y) – z^2*x^2*y^2;
А теперь найдем минимум этой функции при разных начальных значениях переменных:
>> v = [-0.6 -1.2 0.135];
a = fminsearch(@three_var,v)
a = 0.0000 -1.5708 0.1803
>> three_var(a)
ans = -2.5000
>> v = [-1 -1.2 0];
>> a = fminsearch(@three_var,v)
a = 0.0000 -1.5708 0.0015
>> three_var(a)
ans = -2.5000
>> v = [-1 -1.2 0.2];
>> a = fminsearch(@three_var,v)
a = 0.0000 -1.5708 0.25
>> three_var(a)
ans = -2.5000
Обратите внимание на то, что минимум по первым двум переменным находится один и тот же при разных начальных значениях переменных. Однако минимум по третьей переменной существенно зависит от начальных значений переменных. Тем не менее само значение функции во всех случаях одно и то же.
А теперь приведем случай, когда решение не достигается:
>> v = [-1 -1.2 1]; >> a = fminsearch(@three_var,v) Exiting: Maximum number of function evaluations has been exceeded – increase MaxFunEvals option. Current function value: -Inf a = 1.0e+051 *
-0.5630 -7.3469 3.8861
В библиотеке примеров Demos вы найдете дополнительные наглядные примеры применения данных функций. Новые мощные средства вычисления экстремумом функций ряда переменных имеются в пакетах расширения Optimization Toolbox и Genetic Algorithm and Direct Search Toolbox, содержащих новые мощные алгоритмы решения оптимизационных задач, в том числе гинетические и прямого поиска. Они могут использоваться, в частности, для поиска глобального экстремума сложных функций, решения задач кластеризации и др.
8.5.
Начало в части 1