Как использовать fminsearch для решения этой целевой функции с 4 переменными (matlab)?

У меня есть целевая функция, для которой нужно решить 4 переменные, чтобы вывод был минимальным, и у меня возникли проблемы с пониманием синтаксиса, необходимого для использования функции "fminsearch" для решения более чем одной переменной. Вот моя цель:

function f4 = v4_objfunc(w_x,w_y,s_x,s_y)

f4 = 6*(w_x)^2 + 6*(w_y)^2 + 12*(s_x)^2 + 12*(s_y)^2 - 330*w_x - 228*w_y - 990*s_x -            
684*s_y - 6*w_x*s_x - 6*w_y*s_y + 86564;

end

Это файл функции ".m" в точности так, как я его сохранил. Как использовать fminsearch, чтобы получить значения "w_x","w_y","s_x","s_y", которые приведут к минимальному результату? Если это помогает, неизвестные соответствуют значениям x-and-y (для координат), и их нужно проверять только между 0-100 (для всех 4).

Я использовал страницу функций, которую предлагает Matlab, но только понял, как использовать fminsearch для функций с одной переменной.

1 ответ

Решение

Просто используйте вектор для хранения ваших четырех скаляров (я также удалил кучу или лишние скобки):

function f4 = v4_objfunc(x)
w_x = x(1);
w_y = x(2);
s_x = x(3);
s_y = x(4);
f4 = 6*(w_x^2+w_y^2) + 12*(s_x^2+s_y^2) - 6*(w_x*s_x+w_y*s_y) ...
     - 330*w_x - 228*w_y - 990*s_x - 684*s_y + 86564;

Или напрямую с анонимной функцией:

v4_objfunc = @(x)6*(x(1)^2+x(2)^2)+12*(x(3)^2+x(4)^2)-6*(x(1)*x(3)+x(2)*x(4)) ...
                 -330*x(1)-228*x(2)-990*x(3)-684*x(4)+86564;

x0 = ones(4,1);
[x,fval] = fminsearch(v4_objfunc,x0)
w_x = x(1);
w_y = x(2);
s_x = x(3);
s_y = x(4);
Другие вопросы по тегам