Любопытное поведение с анонимными функциями в Octave и MATLAB - PullRequest
1 голос
/ 11 марта 2012

Привет, мне любопытно, почему я получаю следующее поведение с MATLAB и Octave

octave:7> pdf = @(x) (0<=x && x<1).* (x) + (1<=x && x <=2).* (2-x);  
octave:8> 
octave:8> t = 0:0.1:1;
octave:9> 
octave:9> y = pdf(t)
y =

   0   0   0   0   0   0   0   0   0   0   0

octave:10> 

Я получаю такое же поведение с MATLAB, т. Е. У - нулевой вектор.

Но если я добавлю следующее для цикла

for i=1:size(t,1) 
  y(i) = pdf(t(i))
end

, я получу правильный результат.

 Columns 1 through 19:

 0.00000   0.10000   0.20000   0.30000   0.40000   0.50000   0.60000   0.70000   0.80000   0.90000   1.00000   0.90000   0.80000   0.70000   0.60000   0.50000   0.40000   0.30000   0.20000

 Columns 20 and 21:

   0.10000   0.00000

1 Ответ

5 голосов
/ 11 марта 2012

&& и || - операторы короткого замыкания, предназначенные для использования со скалярами. Заменить на & или |. Я получаю сообщение об ошибке при выполнении вышеуказанного (векторизованного) кода в Matlab (R2011B).

После замены && на & кажется, что он работает как вы ожидаете.

...