Un número real elevado a un complejo

En este tercer y último artículo contesto la pregunta con la que finalizaba el segundo: ¿cómo calcular la exponenciación de un número real a uno complejo?

Si tenemos en cuenta que para cualquier número real, a, se cumple que a = eln(a), por la misma definición de logaritmo, tenemos:

Número real elevado a complejoHasta ahora, en todos los casos que hemos visto, la base era e, y en este artículo hemos generalizado a cualquier base real. Generalizando aun más, para a y b reales1 o complejos, la operación exponenciación, ab , puede calcularse mediante la operación:

Exponenciación generalizada

Si a ∈ ℝ, a > 0


Como anécdota, y desviándome de la temática de estos tres artículos, está el hecho de que a partir de la igualdad a = eln(a) se deduce la derivada de las funciones exponenciales de base a que en el Bachillerato tuvimos que memorizar, pero veamos de dónde viene: Derivada de la función exponencial 1Por la regla de la cadena, tenemos que la función exterior f(x) es ex, mientras que la interior g(x) es ln(a)x, cuya derivada g'(x) = ln(a) pues podemos y debemos ver ln(a) como un número real cualquiera. Por lo tanto, la derivada es:

Derivada de la función exponencial 2La parte derecha de la ecuación es ax pues habíamos establecido que a = eln(a), por lo que finalmente tenemos la receta que nos dieron para memorizar:
Derivada de la función exponencial 3La receta para calcular la integral también la podemos deducir con la la misma igualdad.

Integral de la función exponencial en base a

e elevado a un número complejo

En el artículo anterior vimos qué significa y cómo se soluciona la exponenciación de e a un número complejo imaginario puro.

Dejé pendiente cómo se realizaría el cálculo en el caso de que el número complejo del exponente tuviera también parte real, es decir, si no es un imaginario puro. En el presente artículo doy la respuesta, y ésta es muy sencilla pues resulta que e elevado a un número complejo tiene las mismas propiedades que la exponenciación de cualquier otro tipo de números. Dado el número complejo b + ci tenemos que:

e elevado a b mas ci

En el artículo anterior ya vimos el cálculo de eci. Por lo tanto resulta:

e elevado a b mas ci sin cos

Veamos el caso práctico z = 2 + πi, ez sería:

e elevado a dos mas pi i

Realmente, con un número imaginario puro estamos haciendo lo mismo. En el ejemplo del artículo anterior, la parte real es 0, y por lo tanto sería:

e elevado a pi i

Como curiosidad, acabamos de trabajar con los números más importantes en matemáticas:

  • El cero. Elemento neutro de la suma.
  • El uno. Elemento neutro de la multiplicación.
  • El número imaginario i.
  • π (pi), la relación entre la longitud de una circunferencia y su diámetro.
  • e, el límite de una sucesión:
    Definicion de e

En el anterior artículo vimos la función exponencial en series de Taylor y al ser e = e1, podemos también definir e como el sumatorio de una serie:

e como suma de una serie

E ora, ancora piu’ difficile! (Aunque no mucho más) ¿Cómo hacer el cálculo si la base es cualquier número real en vez de e? Eso lo veremos más adelante.

e elevado a un número imaginario puro

¿Qué significa elevar e a un número complejo? ¡Hasta los autores de Los Simpson lo saben!

Calculan y resuelven eπ*i:

e elevado a pi por i

No por aparecer en Los Simpson es evidente. Siendo b un número natural, sabemos que ab consiste en multiplicar a b veces. También sabemos que cuando b es un entero negativo la definición es otra, es el inverso de ab:

a elevado a menos b

Y que cuando el exponente es un racional, n/b, se trata de la b-enésima raíz de an:

an/b = b√an

Pero ninguna de estas tres definiciones tienen sentido en la exponenciación de e a un número complejo. Para que lo tenga hemos de tener en cuenta las series de Taylor, según las cuales sabemos que:

Taylor e elevado a x

El signo de admiración expresa el factorial. Cuanto más alargamos la serie mayor precisión decimal obtenemos.

En este caso, cuando nos dicen que x es cualquier número, nos lo dicen en un sentido amplio, puede ser también el complejo xi, y por lo tanto:

Taylor e elevado a x por iEsta agrupación final de los pares a la izquierda y los impares a la derecha no es para pasar el rato, pues como por Taylor otra vez sabemos que:

Taylor seno

Y también:

Taylor coseno

Si reemplazamos las infinitas sumas que resultan en el seno y el coseno nos queda la famosa fórmula de Euler:

Formula de EulerPor lo tanto, podemos ver la exponenciación de e a un número complejo z, imaginario puro, ez,como las infinitas sumas que se pueden agrupar entre las que forman el seno y las del coseno. Hay que tener en cuenta que x expresa un ángulo en radianes. Aunque la la circunferencia completa está comprendida entre 0 y 2Π radianes, se puede calcular perfectamente el seno y el coseno de cualquier ángulo x > 2Π pues representa x mod 2Π giros.

Volviendo a la fórmula de Los Simpson, como cos(Π) = -1 y sen(Π) = 0 tenemos:

Calculo de e elevado a pi por iEn un artículo anterior vimos las potencias de la unidad imaginaria y en este hemos visto la exponenciación de e a un número imaginario puro, aquel complejo que sólo tiene parte imaginaria. ¿Qué pasaría si también tuviera parte real, por ejemplo 1 + Πi? Eso lo dejaré para un próximo artículo.

Zen, matemáticas y la paradoja de Sorites

Montón de arena o duna o n granos de arena

¿Montón de arena? ¿Duna? ¿N granos de arena?

Hace años leí algunos capítulos de un fragmento de un libro Zen escrito en algún momento entre los siglos XVI y XIX, ya no recuerdo, de la escuela Soto o Rinzai, tampoco lo recuerdo, de un autor que, como probablemente habrás adelantado, tampoco recuerdo, pero sí, era japonés. En definitiva, muy Zen todo. Lo que sí recuerdo bien es un símil realizado con la evolución de un fuego recién empezado con unos leños hasta su consumición completa. ¿En qué momento podemos decir que dejaron de haber leños para haber sólo ceniza? Creo que con este ejemplo el autor quería hacer notar las limitaciones que nuestros conceptos mentales tienen para ayudarnos a entender la realidad.

Bastantes años después he caído, navegando por Internet, en la paradoja de Sorites. Esta paradoja entiendo que quiere hacernos caer en la cuenta de algo muy parecido, poniendo como ejemplo no la combustión de un pequeño fuego sino un montón de arena. Sorites es como se pronuncia en griego σωρείτης palabra que significa montón o cúmulo. La paradoja parte del hecho de que estaremos todos de acuerdo en que:

  1. Dos o tres granos de arena no son un montón.
  2. 100.000 o 1.000.000 sí lo son.
  3. Si dos o tres granos de arena – llamemos n a esos dos o tres – no son un montón, tampoco lo serán n+1
  4. Un montón de n granos no dejará de serlo por quitarle uno (n-1)

Mediante inducción matemática se comprueba que la primera y tercera característica niegan la segunda, es decir, que 100.000 granos (ni un millón) forman un montón.

Llamemos a ser un montón tener la propiedad P. La primera característica nos dice que para n = 1 no existe la propiedad P, y que tampoco existe para n = 2 ni para n = 3. La tercera nos dice que dado que Pn no es un montón tampoco lo será Pn+1 = n+1 Tenemos:

  1. ¬P(1)
  2. ¬P(2)
  3. ¬P(n) ⇒ ¬P(n+1)

Supongamos que hay un número mínimo de granos de arena a partir del cual sí se verifica P, llamaremos m a ese número. Tenemos entonces que m-1 no es un montón y a partir de m granos sí lo es. También sabemos por la característica 1 que m > 1 y por la 3 sabemos que m -1 debe cumplir:

P(m-1) ⇒ P(m -1 + 1)

Es decir, que P(m-1) = P(m) y esto es una contradicción pues hemos impuesto que m es el elemento mínimo a partir del cual tenemos la propiedad P (es un montón) y por debajo de m granos no tenemos esa propiedad.

Por el mismo método de la inducción matemática se demuestra a partir de las características segunda y cuarta de un montón que la primera es falsa, es decir, que tan solo dos o tres granos de arena sí son un montón. Incluso que ningún grano también lo es.

Por lo tanto, no sólo conceptos como la belleza o la armonía son difíciles de definir, sino que identificar conceptos que representan objetos físicos como la madera o la ceniza, incluso los medibles como la gordura o la delgadez (peso), o un montón (número de elementos que lo forman) nos pueden resultar evidentes cuando realmente no lo son.

Las potencias de la unidad imaginaria como clase de equivalencia

El número imaginario i es aquel que permite resolver, entre otras cosas, la ecuación:

i2 = -1

Por lo tanto i = √-1

Podemos ver que sus potencias enteras son:

i0 = 1

i1 = i (= √-1)

i2 = -1

i3 = i * i2 = i * (-1) = -i

i4 = i2 * i2 = -1 * (-1) = 1

i5 = i2 * i3 = -1 * (-i) = i

in = …

Si seguimos la serie vemos que emerge un patrón: 1, i, -1, -i, …

Así como vimos que las congruencias se podían tratar como clases de equivalencia, vemos aquí que las potencias de i se pueden tratar como la clase de equivalencia Z4

Sabemos que Z4 = {[0], [1], [2], [3]} es decir, el total de restos posibles de 4 y sabemos una n potencia de i que pertenece a cada clase:

0 = i0

1 = i1

2 = i2

3 = i3

Con todo esta información no habrá potencia que se nos resista. Si queremos calcular i54 sólo tendremos que calcular el resto de la división de 54 entre 4, que es 2 y por lo tanto pertenece a la misma clase que i2 , por lo que podemos afirmar que i54 = i2 = -1 También podemos afirmar que i54 es congruente con i2 La fórmula general es:

in = i4 mod (n)

Esto también puede enfocarse desde una perspectiva más gráfica. Multiplicar por i es rotar en el plano 90º hacía atrás y multiplicar por -i es avanzar 90º Por más que rotemos siempre acabaremos en uno de los 4 puntos:

El número imaginario en el plano cartesiano complejo

El número imaginario i en el plano cartesiano complejo

Programa para resolver ecuaciones diofánticas

En el artículo anterior expliqué cómo se resuelven las ecuaciones diofánticas y su relación con las ecuaciones de congruencia. En la presente entrada vamos a ver un programa en Python que las resuelve.

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Resuelve ecuaciones diofánticas tipo ax + by = c

import sys
from sys import argv

def extendedEuclideanAlgorithm(old_r, r):
    negative = False
    s, old_t = 0, 0
    old_s, t = 1, 1

    if (r < 0):
        r = abs(r)
        negative = True
        
    while r > 0:
        q = old_r / r
        #MCD:
        r, old_r = old_r - q * r, r
        #Coeficiente s:
        s, old_s = old_s - q * s, s
        #Coeficiente t:
        t, old_t = old_t - q * t, t
        
    if negative:
        old_t = old_t * -1
        
    return old_r, old_s, old_t

a = long(argv[1])
b = long(argv[2])
c = long(argv[3])

mcd, s, t = extendedEuclideanAlgorithm(a, b)
if c % mcd == 0:
    a1, b1, c1 = -a / mcd, b / mcd, c / mcd
    x1, y1 = s * c1, t * c1
    print "x = {0}{1:+d}k" . format(x1, b1)
    print "y = {0}{1:+d}k" . format(y1, a1)
else:
    print "No tiene solución"

Para calcuar 23x -4y = 11 hacemos:

vic@LESBIAN:~/mates$ ./diofanticas.py 23 -4 11
x = -11-4k
y = -66-23k

Aplicando el concepto de clase de equivalencia, tal y como se explica en el anterior artículo, podemos computar la forma paramétrica más simplificada como muestra el siguiente programa:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Resuelve ecuaciones diofánticas tipo ax + by = c
# El primero par x e y es la forma parmétrica más simplificada
 
import sys
from sys import argv

def extendedEuclideanAlgorithm(old_r, r):
    negative = False
    s, old_t = 0, 0
    old_s, t = 1, 1

if (r < 0):
    r = abs(r)
    negative = True

while r > 0:
    q = old_r / r
    #MCD:
    r, old_r = old_r - q * r, r
    #Coeficiente s:
    s, old_s = old_s - q * s, s
    #Coeficiente t:
    t, old_t = old_t - q * t, t

if negative:
    old_t = old_t * -1

return old_r, old_s, old_t

a = long(argv[1])
b = long(argv[2])
c = long(argv[3])

mcd, s, t = extendedEuclideanAlgorithm(a, b)
if c % mcd == 0:
    a1, b1, c1 = a / mcd, b / mcd, c / mcd
    x1, y1 = s * c1, t * c1
    # Uso abs() pues Python no hace la división Euclídea con cociente negativo
    equivClass = x1 % abs(b1)
    print "x = {0}{1:+d}k" . format(equivClass, b1)
    print "y = {0}{1:+d}k" . format((c1 - (a1 * equivClass)) / b1, -a1)
    print "x = {0}{1:+d}k" . format(x1, b1)
    print "y = {0}{1:+d}k" . format(y1, -a1)
else:
    print "No tiene solución"

Este es el resultado de diferentes ejecuciones:

vic@LESBIAN:~/mates$ ./diofanticas.py 4 7 29
x = 2+7k
y = 3-4k
x = 58+7k
y = -29-4k
vic@LESBIAN:~/mates$ ./diofanticas.py 23 -4 11
x = 1-4k
y = 3-23k
x = -11-4k
y = -66-23k

El uso de la función abs(), que nos devuelve el valor absoluto, es debido a que Python no hace la división Euclídea cuando el cociente es negativo. Los dos pasos:

  • q = old_r / r
  • old_r = old_r – q * r

Se podrían unificar con la función divmod(), pero me parece menos claro para quien no conoce el lenguaje, siendo los dos pasos más parecidos al pseudocódigo.