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)
Другие вопросы по тегам