Skip to content

[R-es] potencia fracional de un número negativo

6 messages · Alex J. Zambrano, José Trujillo Carmona, Carlos Ortega +1 more

#
Mirando los comentarios, realmente lo que deseo es encontrar la raíz real
de (-0.5)^(1/5) la cual debería ser -0.87055056329. José me hace caer en
cuenta que además de no encontrar la raiz real, tampoco da todas las raiz
complejas. Habría alguna manera de que tuviera en cuenta?

  
    
#
Olivier te dio las soluciones. Dos soluciones.

Una utilizar la función para solucionar polinomios de orden n:

a_1 x^n + a_2 x^(n-1) + ... + a_(n-1) x^2 + a_n x + a_(n+1) = 0

Se resuelve mediante:

polyroot(a_(n+1), a_n, a(n-1), ..., a_2, a_1)

La raiz enésima de un número b es un caso particular:

b^1/n = x --------> x^n - b = 0 ----------> x^n + 0 x^(n-1) + ... + 0 
x^2 + 0 x + b = 0

Que se resuelve mediante:

polyroot(b, 0, ..., 0, 0, 1)

Y la otra te fabricó una función para que aún sea más fácil:

sq<-function(a,q){
	x=as.complex(a)
	theta=(2*pi*(1:q)+Arg(x))/q
	complex(mod=Mod(x)^(1/q),arg=theta)
	}
/[1] -2+0.000000i  1-1.732051i  1+1.732051i
/[1] -0.2690149+0.8279428i -0.8705506+0.0000000i -0.2690149-0.8279428i
[4]  0.7042902-0.5116968i  0.7042902+0.5116968i



Saludos

El 16/10/15 a las 01:44, Alex J. Zambrano escribió:

  
  
#
Hola Álex,

Sí, la raíz real la puedes obtener calculando el módulo de la solución
compleja "Mod()".
Mira el ejemplo:
[1] 0.7042902+0.5116968i
[1] 0.7042902
[1] 0.5116968
[1] 0.8705506

En el ejemplo el primer cálculo se devuelve la solución principal.
Si quieres el resto de soluciones ya te han indicado como hacerlo y a
partir de ellas puedes volver a conseguir la solución real con Mod():
[1]  0.2690149+0.8279428i -0.7042902+0.5116968i -0.7042902-0.5116968i
0.8705506+0.0000000i
[5]  0.2690149-0.8279428i
[1] 0.8705506 0.8705506 0.8705506 0.8705506 0.8705506


Saludos,
Carlos Ortega
www.qualityexcellence.es






El 16 de octubre de 2015, 1:44, Alex J. Zambrano <alexjzc en gmail.com>
escribió:

  
    
#
El problema del módulo es que pierde el signo.

En tu caso sale igual porque has invertido el signo del coeficiente en 
el polinomio (en realidad se me pasó a a mí advertir que el término 
independiente debe ir con signo negativo):

.> polyroot(z=c(0.5,0,0,0,0,1))
[1]  0.7042902+0.5116968i -0.2690149+0.8279428i -0.2690149-0.8279428i
[4]  0.7042902-0.5116968i -0.8705506+0.0000000i
.>

.> z_all <- polyroot(z=c(-0.5,0,0,0,0,-1))
.> z_all
[1]  0.7042902+0.5116968i -0.2690149+0.8279428i -0.2690149-0.8279428i
[4]  0.7042902-0.5116968i -0.8705506+0.0000000i

La última de la soluciones es la solución real, que obviamente es negativa.

 > Mod(z_all)
[1] 0.8705506 0.8705506 0.8705506 0.8705506 0.8705506

El módulo pasa a positivas las soluciones aunque como en este caso sean 
negativas.

Como decía el polinomio debe ser:

-0.5^(1/5) = x -------> -0.5 = x^5 -------> -0.5 - x^5 = 0


Saludos.

El 16/10/15 a las 12:41, Carlos Ortega escribió:
#
Yo creo que si no te interesan todas las soluciones y solo quieres la real
podrías tomar logaritmos y olvidarte un poco del tema.

(-0.5)^(1/5) = ( -exp( log(0.5) )^1/5 = (-1)^5 * exp( log(0.5) * 1/5 )

Con esto, si las quieres todas las soluciones pues hacer como ya te han
comentado con `polyroot`:
[1]  0.7042902+0.5116968i -0.2690149+0.8279428i -0.2690149-0.8279428i
[4]  0.7042902-0.5116968i -0.8705506+0.0000000i

Pero si no quieres todas las soluciones puedes coger solo la raíz real de
-1: (-1)^(1/5) = -1
y con tomar solo la exponencial del logaritmo te sobra.
[1] -0.8705506


Saludos, Álvaro.


El 16 de octubre de 2015, 13:56, José Trujillo Carmona <trujillo en unex.es>
escribió:

  
  
#
O bueno, yo es que he rizado el rizo. No haría falta ni tomar logaritmos.
Solo consideras -1 como la raíz de (-1)^(1/5) y ya está.
[1] -0.8705506

El 16 de octubre de 2015, 16:13, Álvaro Hernández Vicente <ahvmat en gmail.com>
escribió: