2013-03-10 3 views
1

Если у меня есть набор функцийПереходя матрицу функцию управления (MATLAB)

f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])

и у меня есть вторая матрица с

b = [x1,x2]

Как оценить f([b])? Единственный способ, который я знаю, как сказать f(b(1),b(2)), но я не могу понять, как автоматизировать это, потому что количество переменных может быть до n. Мне также интересно, есть ли лучший способ, чем идти индивидуально и подключать их.

+0

Что это такое, что вы хотите оценивать? –

+0

Мне нужно выяснить, что такое f-матрица с x1, x2. Извините, неясно, я отредактирую сообщение – user2154669

ответ

1

convertToAcceptArray.m:

function f = convertToAcceptArray(old_f) 
    function r = new_f(X) 
     X = num2cell(X); 
     r = old_f(X{:}); 
    end 
    f = @new_f 
end 

usage.m:

f = @(x1,x2) ([x1 + x2; x1^2 + x2^2]) 
f2 = convertToAcceptArray(f); 
f2([1 5]) 
+0

Да, я думаю, это хорошо сработало для моей проблемы, спасибо! – user2154669

+0

Добро пожаловать. –

1

Вы можете переписать свои функции, чтобы взять вектор в качестве входа.

f = @(b)[b(1) + b(2); b(1)^2 + b(2)^2] 

Затем с, например, b=[2 3] вызов f(b) дает [2+3; 2^2+3^2]=[5; 13].

+0

Матричные индексы внутри скобок недействительны в MATLAB. Кроме того, как переопределение «f», как эта помощь? –

1

Предполагая, что b представляет собой матрицу N-на-2, вы можете вызвать f для каждой пары значений в b как следует:

cell2mat(arrayfun(f, b(:, 1), b(:, 2), 'UniformOutput', 0)')' 

Результатом будет также N-2-м Atrix.

В качестве альтернативы, если вам разрешено изменять f, вы можете переопределить его принять вектор как вход, так что вы можете получить весь результат простого вызова f(b):

f = @(x)[sum(x, 2), sum(x .^ 2, 2)] 
Смежные вопросы