2015-07-27 2 views
4

Почему выражение для h(theta) ниже иногда возвращает 0 и иногда возвращает NaN? h(theta) содержит деление на ноль для theta = 0 и всегда должно возвращаться NaN. Если я просто попрошу h(0), все будет хорошо.Почему Matlab неправильно возвращает 0 при оценке массива, но правильно возвращает NaN при оценке скаляра?

Однако, когда он оценивает ноль, содержащийся в многоэлементном массиве, он возвращает h = 0, когда он должен вернуть NaN. Но если специально оценить только элемент, который равен нулю, он возвращает NaN, как и следовало ожидать.

>> theta = [0 1] 
theta = 
    0  1 

Первый элемент должен быть NaN:

>> h = tan(theta)/(1+(tan(theta)/tan(2.*theta))) 
h = 
    0 5.4220 

При оценке нулевого элемента конкретно он работает правильно:

>> h = tan(theta(1))/(1+(tan(theta(1))/tan(2.*theta(1)))) 
h = 
    NaN 

>> h = tan(theta(2))/(1+(tan(theta(2))/tan(2.*theta(2)))) 
h = 
    5.4220 
+0

Вы можете поместить '>>' в строки ввода для форматирования и лучшей читаемости. – percusse

ответ

5

Вы должны сделать разделение поэлементного с ./ вместо от /, чтобы получить желаемый результат. Это называется правым массивом.

>> h = tan(theta)./(1+(tan(theta)./tan(2.*theta))) 
h = 
     NaN 5.4220 
+1

Файл под «еще одна вещь, которую MATLAB делает вопреки тому, как это делает любой другой язык, и вопреки нормальным ожиданиям» –

+1

Это была глупая ошибка, спасибо! – Swydydct

Смежные вопросы