2015-09-29 1 views
0

я выполнил следующий код:странно NaN при повышении числа в нецелых мощности

tau <- 0.25 
h <- 0.6 * n^(-1/5) * (4.5 * dnorm(qnorm(tau))^4 * qnorm(tau)/
(2 * (qnorm(tau)^2 + 1))^2)^(1/5), 

и R продолжает производить NaN. Однако R фактически вычисляет (4.5 * dnorm(qnorm(tau))^4 * qnorm(tau)/(2 * (qnorm(tau)^2 + 1))^2) равным -0.003655336.

Странная вещь, когда я сделал следующее

k <- -0.003655336 
k^(1/3) 

NaN был произведен снова.

+0

Не могли бы вы привести воспроизводимый пример? и значения n и k – arodrisa

ответ

0

Пожалуйста, отредактируйте ваш вопрос. И вы дали себе ответ. Является базовой математикой. Вы не можете дать мощность отрицательного числа мощности десятичного числа. Это неопределенность.

2

Вы вычисляете корень куба отрицательного числа. Хотя, как указано в @ mra68, существует реальное решение, общий случай нецелых показателей отрицательных чисел приводит к комплексному числу. Поскольку по умолчанию R предполагает, что вы имеете дело с действительными числами, он производит NaN.

Попробуйте это:

k <- -0.003655336 
k <- as.complex(k) 
k^(1/3) 
#[1] 0.0770216+0.1334053i 

Результат не является уникальным в том смысле, что есть три комплексные числа x, удовлетворяющие условию x^3=k (включая случай, когда мнимая составляющая равна нулю), но NaN выход в соответствии с общим случаем нецелых чисел в качестве показателей отрицательных действительных чисел. Можно утверждать, что различие между рациональными и нерациональными показателями может быть полезным, но в расчетах с плавающей запятой это вряд ли возможно. Я считаю, что появление NaN в случае нецелых показателей отрицательных чисел является полезным предупреждающим знаком.

+0

Каждое вещественное число, положительное или отрицательное, имеет один корень куба, который является вещественным, так как 3 нечетно. Если нас не интересуют два других (нереальных) кубических корня, здесь нет необходимости использовать здесь комплексные числа. К сожалению, в вашем решении появляется только один из этих нереальных кубических корней. – mra68

+0

Также каждое положительное действительное число имеет три корня куба, и только один из них является реальным. Таким образом, факт, что есть три корня куба, на самом деле не является хорошей причиной, чтобы дать «NaN» в качестве результата для кубического корня реального числа, если это число отрицательно, но не если оно положительно. (Нечестно, не так ли?) Но, похоже, это реализовано именно так. Причина может заключаться в том, что R сначала вычисляет 1/3, а затем рассматривает его как любое другое реальное число 'a'. Тот факт, что он является обратным нечетному натуральному числу, больше не виден. Если число 'x' в' x^a' положительно, это не имеет значения, если это отрицательно, – mra68

+0

@ mra68 Я согласен с тем, что вы говорите; но я думаю, что это действительно исключительная ситуация в том смысле, что знаменатель в экспоненте является целым числом. R не может это знать, если он преобразует (как я полагаю) 1/3 в число с плавающей запятой. Возьмем, например, 'x = (- k)^0.3333333332' с' k' как положительное действительное число, и у вас не будет реального решения для 'x'. В общем, я бы пользовался большой осторожностью, когда нецелые показатели применялись к отрицательным числам, и я думаю, что это хороший предупредительный знак, что R дает «NaN» в таких случаях. – RHertel

1

5-й корень отрицательного числа все еще возможен. Также мой карманный калькулятор делает это. Поскольку (-1)^5 = -1, вы можете сделать это следующим образом:

> tau <- 0.25 

> a <- (4.5 * dnorm(qnorm(tau))^4 * qnorm(tau)/(2 * (qnorm(tau)^2 + 1))^2) 

> sign(a)*abs(a)^ (1/5) 
[1] -0.3255258 
> 
Смежные вопросы