2014-09-06 2 views
-4

Мой вопрос очень ясен. У меня есть объектная функция в MATLAB. Например, у меня есть f = @ (x) (x (1) + x (2) * K) + что-то еще. Поскольку объектная функция длинная и сложная, я хотел бы заранее определить некоторые переменные и заменить их в целевой функции. Например, я хотел бы установить M = x (1) + x (2), чтобы написать M * K в целевой функции. Я пробовал M = @ (x) x (1) + x (2) и подставлял в целевую функцию, но не работал. Любые идеи, пожалуйста? С уважениемОпределите переменную, прежде чем поместить ее в объектную функцию

ответ

1

Если ваша целевая функция является сложной, определить его в виде отдельного М-файла, например:

function [out1 out2 out3] = complex_cost_fn(in1, in2, in3, in4, in5) 

%%COMPLEX FUNCTION WITH MULTIPLE SUBFUNCTIONS 

end 

function cost1 = fn1(in1, in3, ..) 
    ..... 
end 

function gradients = fn2(in2, in4, ..) 
    .... 
end 

Затем определите ручку:

my_cost = @(in1, in2, in3) complex_cost_fn(in1, in2, in3, in4, in5); 

где «in1, in2, IN3 "- ваши входные аргументы, которые вы будете поставлять входы" my_cost "и" in4, in5 ", которые инициализируются один раз при создании дескриптора.

Затем вы можете передать «my_cost» в другую функцию, если это необходимо, и называют его:

[out1 out2 out3] = my_cost(in1, in2, in3); 
+0

Уважаемый mikesapi, спасибо за ответ, но я не уверен, если я понимаю правильно. Итак, следуя приведенному выше примеру, я имею: function [x] = objfun (K) @ (x) f = [x (1) + x (2)] * K (x) end. Теперь я хочу переписать целевую функцию следующим образом: @ (x) f = M * K (x), где M = x (1) + x (2). Что мне нужно сделать? –

+0

Мое предложение - переформулировать, как вы хотите это сделать. Создайте функцию в отдельном M-файле, который вычисляет цель, учитывая некоторые входные переменные - затем определите дескриптор для нее. – mikesapi

Смежные вопросы