обобщение скалярных входных данных на входные данные массива для пользовательских функций

#arrays #matlab

#массивы #matlab

Вопрос:

round Функция может принимать скаляр и работать с ним. Однако он также может принимать массив и работать с ним ожидаемым образом.

 >> round(2.3)

ans =

     2

>> round([2.3,3.4])

ans =

     2     3
 

У меня аналогично есть функция, и я хочу, чтобы она работала «ожидаемым» образом для входных данных массива. Это хорошо работает для скалярных входных данных. Я мог бы запустить for цикл и оценить свою функцию для каждого элемента массива, но какие другие более разумные способы у меня есть?

Для дальнейшей конкретности у меня есть:

 function [a,b]=func(c,d,e,f)
 

И у меня есть d,e,f , но я хочу оценить функцию до нескольких значений c :-

 g=[];
for i=1:10
    [a,b]=func(c(i),d,e,f);
    g=[g;[a,b]];
end
 

Я не совсем уверен, как применять arrayfun , хотя я считаю, что это то, что я должен использовать.

Ответ №1:

То, что вы ищете, — это функция arrayfun. Вот документация: http://www.mathworks.com/help/matlab/ref/arrayfun.html

Скажем, у меня есть такая функция:

 function res = myTest(a,b)
size(a) % for checking that we work on each element
res = a 1;
res = res  b;
 

У меня есть матрица A

 A = magic(3);
 

Я хочу применить MyTest с равным каждому элементу в

 A1 = arrayfun(@(x) myTest(x,2),A)
 

(x заменяется элементами массива, объявленными после запятой)

Комментарии:

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