Я не уверен, почему вы хотите сделать это, а не разделить его на две операции. Таким образом, вы экономите на вычислении суммы квадратов дважды.
x = rand(3,3);
y = rand(3,3);
z = rand(3,3);
k = 1./(x.^2+y.^2+z.^2);
k(k>1)=0;
В любом случае, другой способ сделать это — использовать принципы функционального программирования:
x = rand(3,3);
y = rand(3,3);
z = rand(3,3);
myfun = @(x,y,z) 1/(x^2+y^2+z^2) * (x^2+y^2+z^2>1);
k = arrayfun(myfun, x, y, z);
В качестве альтернативы вы можете смешать все в одну строку как:
k = arrayfun(@(x,y,z) 1/(x^2+y^2+z^2) * (x^2+y^2+z^2>1), x, y, z);
Что делает этот код, так это сопоставляет функцию myfun
с каждым из элементов данных. Функция myfun
довольно проста. Он вычисляет необходимое количество, но умножает его на условие привязки. Однако вы можете остерегаться< /а>.
РЕДАКТИРОВАТЬ: Чтобы ответить на комментарий. Если вы вообще не хотите вычислять количество, мы можем использовать условные анонимные функции. Для получения более подробной информации вы можете обратиться к это руководство.
iif = @(varargin) varargin{2 * find([varargin{1:2:end}], 1, 'first')}();
myfun = @(x,y,z) iif( x^2+y^2+z^2 <= 1, @() 0, x^2+y^2+z^2>1 ,@() 1/(x^2+y^2+z^2));
k = arrayfun(myfun, x, y, z);
person
Nitish
schedule
16.03.2014
z
стать 0? - person Divakar   schedule 16.03.2014all
9 значений быть больше 1 илиany
из 9 значений должны быть больше 1? - person Divakar   schedule 16.03.2014