Есть ли способ найти максимум функции 2 переменных в Matlab, используя функцию max ()? - PullRequest
0 голосов
/ 29 марта 2020

Есть ли способ найти максимум функции 2 переменных в Matlab, используя функцию max()? Например, для z = x^2 +cos(y^2) x и y ограничены [1,10].

Ответы [ 2 ]

5 голосов
/ 30 марта 2020

Это задача оптимизации за границей. Таким образом, вы можете использовать fminsearchbnd функцию:

f = @(x)(x(1)^2 + cos(x(2)^2));
g = @(x)-f(x);
x = fminsearchbnd(g,[1,1],[10,10],[]);
4 голосов
/ 30 марта 2020

Очевидно, что это проблема оптимизации, и правильным инструментом является использование fmincon или fminbnd, а не max. Далее я перечислю подходы fmincon, fminbnd и max

  • fmincon подход
A = [];
b = [];
x0 = [5;5];
Aeq = [];
beq = [];
lb = [1;1];
ub = [10;10];
non = [];
[u,fval] = fmincon(@(u) -(u(1).^2 + cos(u(2).^2)),[1;1],A,b,Aeq,beq,lb,ub,non);
Zmax = -fval;

, что дает

>> Zmax
Zmax =  100.54 % seems not exactly the maximum 
  • fminbnd подход: поскольку ваша целевая функция может быть разбита на две задачи подоптимизации (x и y независимы), вы можете использовать fminbnd на двух компонентах термины, отдельно, то есть
x = fminbnd(@(x) -x.^2,1,10);
y = fminbnd(@(y) -cos(y.^2),1,10);
Zmax = x^2 + cos(y^2);

, что дает

>> Zmax
Zmax =  101.00
  • Если вы настаиваете на использовании max, возможно, вы можете попробовать подход грубой силы как показано ниже
x = linspace(1,10,5e3);
y = x;
[X,Y] = meshgrid(x,y);
z = @(x,y) x.^2 + cos(y.^2);
Zmax = max(max(z(X,Y)));

, что дает

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