Sunteți pe pagina 1din 29

Java

Libreras Externas
Librera: Commons math
Uso: Nmeros complejos

I3TzShadow 1
La librera Commons math de apache incluye diversas funciones
matemticas ocupadas habitualmente y que no vienen definidas
en la paquetera de java.

Se descarga desde esta liga:

http://commons.apache.org/proper/commons-math/index.html

Versin utilizada en el desarrollo de este documento: Commons


Math 3.6.1

Para este documento se explicara solamente las funciones mas


usadas que involucran nmeros complejos, y vienen incluidas
dentro de esta librera.

I3TzShadow 2
Para este tutorial se utilizo la versin de Java 1.8.0.112 (tanto
JRE como JSE) para correr los programas.
Se utilizo el IDE Eclipse para compilar y crear las clases.
Para agregar la librera commons-math3-3.6.1 a nuestro
proyecto se tienen 2 formas
La primera es colocarla en la carpeta:

C:\Program Files\Java\jre1.8.0_112\lib\ext

Despus de colocarlo en esa ruta, abrir el programa y al crear


un nuevo proyecto asegurarnos en darle clic en:

I3TzShadow 3
La otra forma es crear el proyecto habitualmente usando
cualquier opcin:

Despus dar clic derecho sobre:

Y seleccionamos la siguiente opcin:

I3TzShadow 4
Se abre una nueva ventana y hay que asegurarnos que se
este en el apartado de: Java Build Path.
Despus seleccionar la pestaa: Libraries.
Y por ultimo dar clic en: Add External JARs
Buscamos el archivo *.jar que deseemos agregar, en este caso
la librera de commons math
Una vez seleccionada, damos clic en: Apply
Por ultimo en: Ok

Y veremos que en nuestro proyecto se crea una nueva biblioteca


de libreras, donde se mostraran las libreras que agreguemos de
forma externa:

I3TzShadow 5
I3TzShadow 6
Creamos la clase donde usaremos los nmeros complejos,
importamos la librera commons math para poder hacer uso de
los nmeros complejos as como diversas operaciones.

import org.apache.commons.math3.complex.*;

Para crear un nuevo numero complejo hacemos uso del constructor


de la clase Complex:

Complex nombre_variable = new Complex(real,imaginario);

Donde observamos que en el constructor primero se ingresa la


parte real y despus la parte imaginaria, ambas entradas son de
tipo Doble.

I3TzShadow 7
Creamos clase NumerosComplejos, y creamos el numero complejo c1 =
-31.1 + 41.4i y lo mostramos en pantalla:

Y al correrlo obtenemos:

Para darle formato a la salida hacemos uso de la clase ComplexFormat,


que sirve para darle formato a la salida de nmeros complejos y quede:
a+bi.

I3TzShadow 8
Creamos el objeto para darle formato a nuestro texto de salida:

Y se lo aplicamos a la variable compleja para que obtenga su


formato de salida con:

El programa nos queda de la siguiente forma:

I3TzShadow 9
Y obtenemos esta salida:

Donde la primera lnea es sin el formato, y la segunda lnea ya


tiene el formato aplicado de forma binomial.

Creamos otro numero complejo c2 = 5.4- 6.3i, para poder realizar


las operaciones bsicas de suma, resta, multiplicacin y divisin.

I3TzShadow 10
Para la suma se usa la funcin add de la siguiente forma:
complejo_1.add(complejo_2) = complejo_1+complejo_2

Para la resta se usa la funcin subtract de la siguiente forma:


complejo_1. subtract(complejo_2) = complejo_1-complejo_2

Para la multiplicacin se usa la funcin multiply de la siguiente forma:


complejo_1. multiply(complejo_2) = complejo_1*complejo_2

Para la divisin se usa la funcin divide de la siguiente forma:


complejo_1.divide(complejo_2) = complejo_1/complejo_2

Todas estas funciones generan un nuevo numero complejo por lo cual es


necesario crear nuevas variables complejas para almacenar los
resultados.

I3TzShadow 11
Se agregan las
operaciones al
cdigo e
imprimimos
los resultados en
pantalla por
medio del
formateador (sal):

I3TzShadow 12
Obteniendo los siguientes resultados en pantalla

Otra funcin importante usada en los nmeros complejos es el


pasar de forma cuadrtica (a + bi) a forma polar (r ) donde se
obtiene una magnitud(r) y un ngulo ().
Tambin se incluye la forma para pasar de un numero en forma
polar, a un numero en forma cuadrtica.

I3TzShadow 13
Para obtener magnitud y ngulo, haremos uso de 2 funciones:
abs() para obtener la magnitud, y getArgument() para obtener el
ngulo en radianes. Usamos el numero c1 para mostrar su
funcionamiento mediante la implementacin del siguiente cdigo:

Estas funciones regresan una variable tipo Doble, por lo que ser
necesario crear una variable del mismo tipo para guardar el
resultado, en este cdigo se usan las variables: r para guardar la
magnitud y theta para guardar el ngulo.

En nuestro cdigo adems agregaremos una impresin de pantalla


de los resultados

I3TzShadow 14
I3TzShadow 15
Y se obtienen los siguientes resultados.

Ahora para crear un numero complejo a partir de su magnitud y


ngulo(en radianes) hacemos uso de la funcin
polar2Complex(magnitud, ngulo). Y debido a que esta funcin
crea un numero complejo es necesario crear una variable de tipo
compleja para guardar el resultado, usaremos los valores de
magnitud y ngulo(en radianes) obtenidos en c1 para obtener un
numero complejo, el cdigo queda de la siguiente forma:

Y
Cualquiera de las 2 formas es valida y para comprobarlo se
implemento el siguiente cdigo:

I3TzShadow 16
I3TzShadow 17
Y se obtuvieron los siguientes resultados:

Aqu se observa el error en la conversin es muy pequeo, pero si


llega a tener repercusiones a lo largo de diferentes operaciones,
en cambio al mostrarlo en pantalla el resultado pareciera que se
convirti de forma correcta.

I3TzShadow 18
Invertir un numero complejo infinito.

Java permite crear variables numricas de tipo real(positiva o


negativa) con un valor infinito y al hacer el inverso de dicho
valor se obtiene el cero. Como se muestra en el siguiente cdigo
continuacin:

I3TzShadow 19
Y se obtienen los siguientes resultados:

Donde se observa que Java, reconoce que la divisin de 1 entre un


numero muy grande(infinito) es igual a cero.

Esta librera tambin permite el manejo de nmeros infinitos as


como su inversin.

I3TzShadow 20
Para crear un numero complejo, con esta librera, se puede hacer de
2 formas distintas:
La primera es creando 1 variable real de valor infinito(positivo o
negativo), y crear el numero complejo a travs de su constructor.
La segunda es crear un objeto a partir de la funcin (INF) que ya
viene incluida en la librera.

Usando los siguientes cdigos:

La funcin Complex.INF crea el numero complejo infinito de


valor positivo.
No existe problema con el singo del infinito(positivo, negativo) si
creamos un numero complejo mediante la primera forma

I3TzShadow 21
Para la inversin de un numero (x) en general se tienen 2 formas:
La primera que es dividir 1 entre el numero que queremos
invertir. (1/x)
La segunda es elevar a la potencia -1 el numero que
queremos invertir. (x-1)

Aunque conceptualmente es lo mismo, se tienen en esta librera


tiene 3 formas de hacer esta inversin:
Con la divisin
Con la funcin reciproco
Con el exponente (caso especial)

A continuacin se explica como hacer uso de cada uno de ellos.

I3TzShadow 22
Para hacer la inversin de un numero mediante la divisin (1/x) es
necesario crear un numero complejo con el valor 1 en la parte
real, esto es debido a que la funcin divide solo acepta nmeros
complejos en el numerador, en cambio en el denominador acepta
nmeros complejos o reales.

La creacin de este numerador puede ser de 2 formas:

Usando la funcin ONE incluida en el paquete Complex


Creando un numero complejo desde el constructor

En cdigo seria:

I3TzShadow 23
Ahora simplemente hacemos la divisin de nuestro numerador(1+0i)
y el denominador que es el numero complejo infinito.
A continuacin se muestra todas las combinaciones entre las formas
de crear el numerador y el denominador:

Y se imprimen los 4 resultados en pantalla:

Se observa que de las 4 formas se obtiene el mismo valor de cero.

I3TzShadow 24
Recordemos que:
El Reciproco de un numero es otro que, al multiplicarlo por el original sea igual a la
unidad.
Para obtener dicho numero basta con dividir 1 sobre el numero del cual
quisiramos saber su reciproco.

Este mtodo nos genera un nuevo numero complejo, por lo cual ser
necesario crear una nueva variable de tipo compleja en donde guardarla.

Invertimos el numero complejo cinf_1 mediante la funcin reciprocal()


con el siguiente cdigo y obtenemos el resultado en pantalla:

I3TzShadow 25
La funcin pow(), dentro de esta librera, nos permite elevar un
numero complejo a una potencia real o una potencia compleja.
El cdigo se implementa de la siguiente forma:

complejo_1.pow(complejo_2) = (complejo_1)complejo_2
O bien
complejo_1.pow(real) = (complejo_1)real

El resultado ser un numero complejo por lo cual ser necesario


crear una variable de tipo complejo para almacenar el resultado.

Para invertir un numero complejo de valor infinito se tiene un caso


especial con este mtodo, el cual se muestra a continuacin:

I3TzShadow 26
Para invertir el numero complejo c3= 15-0.3i, hacemos uso del
real -1 el cual guardaremos en una variable (inv) de tipo doble y
mostramos el resultado en pantalla:

Y se obtiene:

Ahora usaremos este mismo cdigo para invertir un numero


complejo infinito:

Y se obtiene

I3TzShadow 27
Donde el elemento NaN(Not a Number) nos da a entender que el
resultado obtenido en esa operacin no es un numero por lo
cual, laso operaciones subsecuentes donde se utilice este
elemento siempre darn como resultado un NaN.

Otro caso especial, para esta librera, es el manejo del cero


complejo (0 + 0i).
Este numero al igual que el infinito se puede crear de ambas
formas, definiendo una variable real (Doble) con valor cero, o
usando la funcin ZERO dentro de la librera.

I3TzShadow 28
Aplicamos las mismas operaciones que en el caso de los
complejos.

E imprimimos los resultados en pantalla.

En este caso observamos que la nica forma que la divisin entre


cero nos de un valor operable es aplicando el reciproco.

Estos 2 casos en la inversin de nmeros complejos son los casos


especiales en los que se obtienen valores no deseados o valores
que impiden que se tenga un buen manejo de operaciones.

I3TzShadow 29

S-ar putea să vă placă și