Очевидно, что это проблема оптимизации, и правильным инструментом является использование fmincon
или fminbnd
, а не max
. Далее я перечислю подходы fmincon
, fminbnd
и max
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