Я определил функцию F инлайн, который принимает в качестве аргумента (1,3) Вектор- мудрая применение инлайн функции
a = [3;0.5;1];
b = 3 ;
f = @(x) x*a+b ;
Предположим, что у меня есть матрицу X
размера (N,3)
. Если я хочу, чтобы применить е к каждой строке X, я могу просто написать:
f(X)
Я проверил, что F (X) является (N, 1) вектор такой, что f(X)(i) = f(X(i,:))
.
Теперь, если я добавить квадратичный член:
f = @(x) x*A*x' + x*a + b ;
команда F (X) выдает ошибку:
Error using +
Matrix dimensions must agree.
Error in @(x) x*A*x' + x*a + b
Я думаю, Matlab рассматривает всю матрицу X в качестве входных к f. Поэтому он не создает вектор с каждой строкой, i, будучи равно f (X (i, :)). Как мне это сделать ?
я узнал, что существует встроенная функция rowfun
, которые могли бы помочь мне, но это, кажется, будет доступна только в версии R2016 (у меня есть версия r2015a)
Вы попробовали 'bsxfun'? – brainkz
Из того, что я понял из документации, bsxfunc будет вычислять квадратичную форму для каждого элемента (не каждой строки) X с A – dada