fminsearch для оптимизации n-го вывода в Matlab

Есть ли элегантный способ вызвать fminsearch для оптимизации n-го вывода функции? или нужно определить новую функцию, которая возвращает n-й результат исходной функции и применить fminsearch к этой новой функции?

ОТРЕДАКТИРОВАНО ДЛЯ ПОЯСНЕНИЯ:

то есть дано:

функция [out1, out2] = myfunc(x)

% подходящий код

конец

как проще всего найти значение x, которое минимизирует out2?


person John    schedule 24.12.2014    source источник
comment
Это: stackoverflow.com/a/1344794/3139711 может быть вариантом, но если это более элегантно, чем ваше намерение определение новой функции открыто для обсуждения...   -  person knedlsepp    schedule 27.12.2014
comment
Я видел этот пост раньше, но, как вы сказали, он довольно похож на определение новой функции (только более широко применимый). Я надеялся на более однострочное решение, но, возможно, это просто невозможно.   -  person John    schedule 29.12.2014


Ответы (1)


Если ваша функция называется foo:

function foo(i,...,x)

end

Вы можете определить именованную функцию:

function foo_x(x)
   foo(...,x);
end

Или используйте анонимные функции:

@(x) foo(...,x)

и передать его fminsearch.


Есть еще один способ, который часто (ab) используется, используя локальные функции для назначения входов. Я не рекомендую это, так как это нарушает многие хорошие практики разработки программного обеспечения.

person Andrey Rubshtein    schedule 24.12.2014
comment
Спасибо за ответ! Кажется, вы пытаетесь оптимизировать функцию с одним выходом для определенного входа, тогда как я пытаюсь оптимизировать функцию с несколькими выходами, но только для одного выхода. у меня есть функция [out1,out2] = myfunc(x), и я хочу найти значение x, которое минимизирует out2. Спасибо еще раз! - person John; 24.12.2014