от
Предположим, что X, Y - матрицы координат внутри заданных интервалов.
xc = 0, yc = 0
xl = linspace(xc 

и веселье является ручкой для некоторого функционального теста (v)

fun = @(v)test(v);
Как объединить обе матрицы X, Y так, чтобы они представляли компоненты x, y вектора v
res = arrayfun(fun, [X,Y]); //First processed X and then Y
К сожалению, это решение не работает .... Есть другой способ, когда функция модифицируется так, что передаются два параметра x, y
fun = @(x, y)test(x, y);
res = arrayfun(fun, X, Y); //This works well
Тем не менее, я хотел бы сохранить чередование функции, если какое-либо решение существует. Спасибо за вашу помощь.              

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

2 Ответы

0 голосов
от
Переопределить
fun
как
fun = @(x, y)test([x,y]);
  Нет необходимости изменять функцию
test()
xc = 0;
yc = 0;
xl = linspace(xc 
    
0 голосов
от
От Matlab Doc:
B = arrayfun(func,A)
применяет функцию
func
к элементам
A
, по одному элементу за раз
B = arrayfun(func,A1,...,An)
применяет
func
к элементам массивов
A1,...,An
, поэтому
B(i) = func(A1(i),...,An(i))
Таким образом, вы используете
arrayfun
неправильно. Вместо этого используйте цикл for или два вложенных цикла.
for i=1:size(X,1)
    for j=1:size(X,2)
    res(i,j)=fun([X(i,j),Y(i,j)])
    end
end
Что ты пытаешься сделать? Кроме того, в Matlab вы должны использовать
%
вместо
//
для комментирования Вот некоторые связанные вопросы: arrayfun, когда каждая строка массива является входной Передача вектора в виде нескольких входов в функцию     
...