2013-10-17 16 views
7

Nel codice seguente:Come calcolare un numero negativo alla potenza di qualche frazione in R?

(-8/27)^(2/3) 

ho ottenuto il risultato NaN, nonostante il fatto che il risultato corretto dovrebbe essere 4/9 o .444444....

Quindi, perché restituisce NaN? E come posso restituire il valore corretto?

+1

In teoria, non è possibile elevare un numero negativo a una potenza non intera. Pensa a cosa significa '(-1)^1.5', per esempio. Qualsiasi potenza non intera richiede una radice complessa. –

+0

Quindi, per essere matematicamente coerente, IMO, dovresti mantenere il negativo al di fuori delle parentesi (o suddividere le operazioni come mostrato di seguito) –

+0

Quindi vuoi dire che dovrei scrivere '- (8/27)^(2/3)'? Quindi la risposta diventa '-4/9', non' 4/9'. – Blaszard

risposta

7

Come documentato in help("^"):

Utenti a volte sono sorpresi per il valore restituito, ad esempio perché ‘(-8)^(1/3)’ è ‘NaN’. Per i doppi ingressi, R utilizza l'aritmetica IEC 60559 su tutte le piattaforme, unitamente alla funzione "pow" del sistema C per l'operatore "^". Le norme pertinenti definiscono il risultato in molti casi d'angolo. In particolare, il risultato nell'esempio sopra è richiesto dallo standard C99. Su molti sistemi Unix il comando "man pow" fornisce i dettagli dei valori in un numero elevato di casi d'angolo.

Quindi è necessario effettuare le operazioni separatamente:

R> ((-8/27)^2)^(1/3) 
[1] 0.4444444 
+1

Quindi l'OP vorrebbe prima quadrarlo e _ poi prendere la radice cubica, se vogliono 4/9. – joran

+1

E cosa dovrebbe produrre?Non esiste una vera radice cubica di -8/27 –

+1

@Metrics: sì, perché stai ancora provando a generare un numero negativo con una potenza non intera. 'man pow' dice:" Se x è un valore finito inferiore a 0, y è un non finito finito, si verifica un errore di dominio e viene restituito un NaN. " (dove x è la base e y è l'esponente). –

7

Ecco l'operazione nel dominio complesso, che R fa supporto:

(-8/27+0i)^(2/3) 
[1] -0.2222222+0.3849002i 

prova:

> ((-8/27+0i)^(2/3))^(3/2) 
[1] -0.2962963+0i 
> -8/27 # check 
[1] -0.2962963 

Inoltre il complesso coniugato è anche una radice:

(-0.2222222-0.3849002i)^(3/2) 
[1] -0.2962963-0i 

alla domanda che cosa è la terza radice di -8/27:

polyroot(c(8/27,0,0,1)) 
[1] 0.3333333+0.5773503i -0.6666667-0.0000000i 0.3333333-0.5773503i 

Il valore centrale è la vera radice. Dal momento che si sta dicendo -8/27 = x^3 che si sta veramente chiedendo per la soluzione dell'equazione cubica:

0 = 8/27 + 0*x + 0*x^2 + x^2 

La funzione polyroot ha bisogno di quei 4 valori dei coefficienti e tornerà alle radici complesse e reali.

+1

ok, ma chiaramente OP non vuole * quella * radice – eddi

+4

Se vai a fare scherzi con la magia, ehm, matematica, che non capisci, a volte i goblin saltano fuori da altre dimensioni di cui non eri a conoscenza. –

Problemi correlati