2016-01-31 2 views
1

Я использую Matlab 2015a.Как правильно оптимизировать функцию с параметрами в Matlab?

Вот функция, я хочу, чтобы оптимизировать:

function result = fig_of_merit(x, a, b, c, d) 
    result = 1; 
end 

Это, как я хочу, чтобы оптимизировать функцию:

x1 = [10*10^-6, 120]; 
x2 = [300*10^-6, 175]; 
fminbnd(@(x) fig_of_merit(x, 1, 2, 3, 4),x1,x2); 

я получаю следующее сообщение об ошибке:

Error using * Inner matrix dimensions must agree.

Error in fminbnd (line 291)

x = xf + si * max(abs(d), tol1);

Error in test (line 5)

fminbnd(@(x) fig_of_merit(x, 1, 2, 3, 4),x1,x2);

Что случилось с моим кодом? Я сделал то же самое для оптимизации без ограничений, используя функцию fminsearch, и все было в порядке.

Это что-то делать с анонимной функции я использовал - когда я уменьшил векторы x1 и x2 для скаляров, он работал:

fminbnd(@(x) fig_of_merit(x, 1, 2, 3, 4),-4, 5); 

Он не удовлетворяет меня, потому что я хочу, чтобы оптимизировать 2 параметры сразу.

+0

Вы будете иметь трудное время, оптимизируя постоянную функцию :) Во всяком случае, эта проблема может быть решена с помощью результата = те (размер (х)) ';' я Не уверен. –

+0

Затем я получил следующую ошибку: * Пользовательская целевая функция должна возвращать скалярное значение. *. – user2738748

+2

Справка для 'fminbnd' say" FUN принимает скалярный вход X и возвращает значение скалярной функции F, оцениваемое на X. " Таким образом, выражение 'fminbnd' не позволяет одновременно оптимизировать несколько параметров, как и другие функции оптимизации. – drhagen

ответ

1

Функция fminbnd работает только с скалярными параметрами. Он не может одновременно оптимизировать два параметра. Однако функция fmincon может это сделать:

x1 = [10*10^-6, 120]; 
x2 = [300*10^-6, 175]; 
fmincon(@(x) fig_of_merit(x, 1, 2, 3, 4),ones(size(x1)),[],[],[],[],x1,x2);