MATLAB fminsearch для минимизации функций с 4 параметрами
Мне нужно минимизировать эту функцию:
A = sum(1:N) [(wi/constant)* y];
где
y = P - P0 + 10*n*log( sqrt((xk-xi)^2 + (yk-yi)^2) )
я знаю P
в разных местах (т.е. для разных (xi,yi)
). Я должен найти параметры P0
, n
, xk
, а также yk
которые минимизируют A
,
Я хочу использовать fminsearch
в MATLAB для решения этой проблемы, однако, я не знал точно, как его использовать?
Я попробовал идею по этому вопросу, однако мне нужно использовать Bm
как вектор (x,y)
и они используют Bm
как скаляр?
Могу ли я использовать fminsearch
Для решения этой проблемы?
1 ответ
Обратите внимание, что ваша функция кажется неограниченной (результат: -inf
), так как
P0
является неограниченным и поэтому может вырасти до+∞
, что приводит кA ⇒ -∞
n
является неограниченным и поэтому может сжиматься до-∞
, что приводит кA ⇒ -∞
xk
а такжеyk
может быть выбран таким образом, чтобы сумма всех квадратов была минимальной, поэтому вы берете лог крошечного числа, которое имеет тенденцию к-∞
, что приводит кA ⇒ -∞
Итак, вам, вероятно, придется использовать некоторые ограничения или масштабирование; если у вас есть набор инструментов оптимизации, это fmincon
ты ищешь.
Если у вас нет набора инструментов: есть fminsearchbnd
а также fminsearchcon
, доступны из обмена файлами, или мой собственный optimize
,
Во всяком случае, вот как вы бы реализовать свою проблему с помощью fminsearch
:
%// Some dummy values (for testing)
N = 30;
w = rand(N,1); x = rand(N,1);
P = rand(N,1); y = rand(N,1);
constant = rand;
%// Define Q = [P0 n xk yk]. Then:
A = @(Q) sum( w.*(P - Q(1) + 10*Q(2)*log(sqrt((Q(3)-x).^2 + (Q(4)-y).^2))) )/constant;
%// Most local optimization algorithms need an initial estimate:
Q0 = rand(4,1);
%// Now you can put everything in fminsearch:
[solution, fval] = fminsearch(A, Q0)