Я работаю над примером, используя fmincon().

Я определяю свою целевую функцию в objFun.m

function f=objFun(x)
    f = 100*(x(2) - (x(1))^2)^2 + (1 - x(1))^2;
end

И я определяю начальную точку x0

x0=[1; -1]

И если я запускаю целевую функцию с этой точкой в ​​качестве теста, я получаю

>> objFun(x0)

ans =

   400

Но когда я пытаюсь использовать его в fmincon(), я получаю

>> [x, fval] = fmincon(objFun, x0, [1;2],1,[],[],[0; -inf],[inf, 0]);
Not enough input arguments.

Error in objFun (line 2)
    f = 100*(x(2) - (x(1))^2)^2 + (1 - x(1))^2;

Я подозреваю, что упускаю здесь что-то очень простое, но что?

0
jerH 22 Ноя 2022 в 21:59

1 ответ

Вам нужно передать дескриптор функции @objFun, а не саму функцию, и ваши матрицы A и x0 должны быть транспонированы, то есть: строка с 2 столбцами, каждая строка в A — еще одно линейное ограничение.

x0=[1, -1];
A = [1,2];
b = 1;
[x, fval] = fmincon(@objFun, x0, A,b,[],[],[0; -inf],[inf; 0]);

function f=objFun(x)
    f = 100*(x(2) - (x(1))^2)^2 + (1 - x(1))^2;
end
0
Ahmed AEK 22 Ноя 2022 в 22:11