Logo Studenta

Java-Apache-Commons-Math

¡Este material tiene más páginas!

Vista previa del material en texto

Java
Librerías Externas
Librería: Commons math 
Uso: Números complejos
I3TzShadow
1
I3TzShadow
2
La librería “Commons math” de apache incluye diversas funciones matemáticas ocupadas habitualmente y que no vienen definidas en la paquetería de java.
Se descarga desde esta liga:
http://commons.apache.org/proper/commons-math/index.html
Versión utilizada en el desarrollo de este documento: Commons Math 3.6.1
Para este documento se explicara solamente las funciones mas usadas que involucran números complejos, y vienen incluidas dentro de esta librería.
I3TzShadow
3
Para este tutorial se utilizo la versión 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 librería “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
Después de colocarlo en esa ruta, abrir el programa y al crear un nuevo proyecto asegurarnos en darle clic en:
I3TzShadow
4
La otra forma es crear el proyecto habitualmente usando cualquier opción:
Después dar clic derecho sobre: 
Y seleccionamos la siguiente opción:
I3TzShadow
5
Se abre una nueva ventana y hay que asegurarnos que se este en el apartado de: Java Build Path.
Después seleccionar la pestaña: Libraries.
Y por ultimo dar clic en: Add External JARs…
Buscamos el archivo *.jar que deseemos agregar, en este caso la librería 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 librerías, donde se mostraran las librerías que agreguemos de forma externa:
I3TzShadow
6
I3TzShadow
7
Creamos la clase donde usaremos los números complejos, importamos la librería “commons math” para poder hacer uso de los números 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 después la parte imaginaria, ambas entradas son de tipo Doble.
I3TzShadow
8
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 números complejos y quede: a+bi.
I3TzShadow
9
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
10
Y obtenemos esta salida:
Donde la primera línea es sin el formato, y la segunda línea ya tiene el formato aplicado de forma binomial.
Creamos otro numero complejo c2 = 5.4- 6.3i, para poder realizar las operaciones básicas de suma, resta, multiplicación y división.
I3TzShadow
11
Para la suma se usa la función “add” de la siguiente forma:
complejo_1.add(complejo_2) = complejo_1+complejo_2
Para la resta se usa la función “subtract” de la siguiente forma:
complejo_1. subtract(complejo_2) = complejo_1-complejo_2
Para la multiplicación se usa la función “multiply” de la siguiente forma:
complejo_1. multiply(complejo_2) = complejo_1*complejo_2
Para la división se usa la función “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
12
Se agregan las 
operaciones al 
código e 
imprimimos 
los resultados en 
pantalla por
medio del 
“formateador” (sal):
I3TzShadow
13
Obteniendo los siguientes resultados en pantalla
Otra función importante usada en los números complejos es el pasar de forma cuadrática (a + bi) a forma polar (r ) donde se obtiene una magnitud(r) y un ángulo (θ).
También se incluye la forma para pasar de un numero en forma polar, a un numero en forma cuadrática.
I3TzShadow
14
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 implementación del siguiente código:
Estas funciones regresan una variable tipo Doble, por lo que será necesario crear una variable del mismo tipo para guardar el resultado, en este código se usan las variables: r para guardar la magnitud y theta para guardar el ángulo.
En nuestro código además agregaremos una impresión de pantalla de los resultados
I3TzShadow
15
I3TzShadow
16
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 función polar2Complex(magnitud, ángulo). Y debido a que esta función 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 código queda de la siguiente forma:
Y
Cualquiera de las 2 formas es valida y para comprobarlo se implemento el siguiente código:
I3TzShadow
17
I3TzShadow
18
Y se obtuvieron los siguientes resultados:
Aquí se observa el error en la conversión es muy pequeño, 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
19
Invertir un numero complejo infinito.
Java permite crear variables numéricas 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 código continuación:
I3TzShadow
20
Y se obtienen los siguientes resultados:
Donde se observa que Java, reconoce que la división de 1 entre un numero muy grande(infinito) es igual a cero.
Esta librería también permite el manejo de números infinitos así como su inversión.
I3TzShadow
21
Para crear un numero complejo, con esta librería, 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 través de su constructor.
La segunda es crear un objeto a partir de la función (INF) que ya viene incluida en la librería.
Usando los siguientes códigos:
La función “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
22
Para la inversión 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 librería tiene 3 formas de hacer esta inversión:
Con la división
Con la función reciproco
Con el exponente (caso especial)
A continuación se explica como hacer uso de cada uno de ellos.
I3TzShadow
23
Para hacer la inversión de un numero mediante la división (1/x) es necesario crear un numero complejo con el valor 1 en la parte real, esto es debido a que la función “divide” solo acepta números complejos en el numerador, en cambio en el denominador acepta números complejos o reales.
La creación de este numerador puede ser de 2 formas:
Usando la función ONE incluida en el paquete Complex
Creando un numero complejo desde el constructor
En código seria:
I3TzShadow
24
Ahora simplemente hacemos la división de nuestro numerador(1+0i) y el denominador que es el numero complejo infinito.
A continuación se muestra todas las combinaciones entre las formas de crearel 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
25
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 quisiéramos saber su reciproco.
Este método 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 función “reciprocal()” con el siguiente código y obtenemos el resultado en pantalla:
 
I3TzShadow
26
La función “pow()”, dentro de esta librería, nos permite elevar un numero complejo a una potencia real o una potencia compleja. 
El código 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 método, el cual se muestra a continuación: 
 
I3TzShadow
27
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 código para invertir un numero complejo infinito:
Y se obtiene
I3TzShadow
28
Donde el elemento NaN(Not a Number) nos da a entender que el resultado obtenido en esa operación “no es un numero” por lo cual, laso operaciones subsecuentes donde se utilice este “elemento” siempre darán como resultado un NaN.
Otro caso especial, para esta librería, 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 función ZERO dentro de la librería.
I3TzShadow
29
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 división entre cero nos de un valor operable es aplicando el reciproco.
Estos 2 casos en la inversión de números 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.

Otros materiales

Materiales relacionados

20 pag.
Programação em MATLAB

Colégio Objetivo

User badge image

Carlos Sanchez Ortiz

189 pag.
Prácticas_de_Cálculo_Numérico_con

UNIASSELVI

User badge image

Junio Dourado

28 pag.
Excel Medio

User badge image

alejandra Montes

45 pag.
Programacion Estructurada

SIN SIGLA

User badge image

Vanina Gisele Beguiristain