Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Biblioteca Matemática avanzada para java

Biblioteca Matemática avanzada para java

Autor jc mouse miércoles, noviembre 7, 2018

Java cuenta con la clase java.lang.Math  la cual contiene métodos para realizar operaciones numéricas básicas como las funciones exponencial elemental, logaritmo, raíz cuadrada y trigonométrica, pero estos métodos no son suficientes si queremos desarrollar aplicaciones matemáticas más complejas, es aquí donde entra la biblioteca Apache Commons Math la cual es la biblioteca matemática más completa de código abierto para el lenguaje java.

commons math

Apache Commons Math se encuentra en la versión 3.6.1, puedes descargar los binarios (21MB) y fuentes (5MB) desde su web en Apache Commons , también cuenta con una documentación extensa (en ingles)

Entre sus muchas clases podemos mencionar:

  • Geometria. El paquete de geometría proporciona clases útiles para muchas simulaciones físicas en espacios euclidianos, como vectores y rotaciones en 3D, así como en la esfera. También proporciona una implementación general de árboles de partición de espacio binario (árboles BSP).
  • Álgebra Lineal. El soporte de álgebra lineal proporciona operaciones en matrices reales (se admiten matrices densas y dispersas) y vectores. Presenta operaciones básicas (multiplicación, suma, resta,transposición, etc ) y algoritmos de descomposición que se pueden usar para resolver sistemas lineales en sentido exacto y en sentido de mínimos cuadrados.
  • Fracciones. El paquetes de fracciones proporcionan un tipo de número de fracción, así como un formato de número de fracción (0.5 = 1/2)
  • Números complejos. El paquetes proporcionan un tipo de número complejo, así como versiones complejas de funciones trascendentales comunes y un formato de número complejo.
  • Generación de datos. Proporciona utilidades para generar aleatoriamente  números, vectores y cadenas. Generación de datos para distribuciones de frecuencia agrupadas o histogramas. Estas utilidades se basan en una «fuente de aleatoriedad» subyacente, que en la mayoría de los casos es un generador de números pseudoaleatorios (PRNG) que produce secuencias de números que se distribuyen uniformemente dentro de su rango. Commons Math depende de Commons Rng para las implementaciones de PRNG.
  • Maquinas de aprendizaje. El soporte de aprendizaje automático en commons-math actualmente proporciona operaciones para agrupar conjuntos de datos basados en una medida de distancia. Cuenta con los algoritmos  de agrupamiento y medidas de distancia KMeans++, Fuzzy-KMeans, DBSCAN, Multi-KMeans++.

Operaciones básicas con matrices

Si tenemos las siguientes matrices

javamatrix

El código para desarrollar el producto, suma y resta es:

        double[][] matrixData = {{1d, 2d, 3d},
        {4d, 5d, 6d},
        {7d, 8d, 9d}};
        RealMatrix m = MatrixUtils.createRealMatrix(matrixData);

        double[][] matrixData2 = {{9d, 8d, 7d},
        {6d, 5d, 4d},
        {3d, 2d, 1d}
        };
        RealMatrix n = new Array2DRowRealMatrix(matrixData2);

        //Multiplicacion de matrices
        RealMatrix producto = m.multiply(n);
        imprimirMatrix("Multiplicacion de matrices", producto);

        //Suma de matrices
        RealMatrix suma = m.add(n);
        imprimirMatrix("Suma de matrices", suma);

        //resta de matrices
        RealMatrix resta = m.subtract(n);
        imprimirMatrix("Resta de matrices", resta);

Y la transpuesta de la primera matriz

        //transposición de matrices
        RealMatrix tr = m.transpose();
        imprimirMatrix("transposición de matrices", tr);

Resolución de ecuaciones lineales

Si tenemos el siguiente sistema de ecuaciones

ecuaciones resolución

Podemos solucionarlo de la siguiente forma:

        RealMatrix coefficients
                = new Array2DRowRealMatrix(new double[][]{
                    {2, 3, -2}, 
                    {-1, 7, 6}, 
                    {4, -3, -5}},
                false);
        DecompositionSolver solver = new LUDecomposition(coefficients).getSolver();

        RealVector constants = new ArrayRealVector(new double[]{1, -2, 1}, false);
        RealVector solution = solver.solve(constants);
        System.out.println("\nEcuacion Lineal");
        imprimirVector(solution);

Geometría

Dados los siguientes vectores (2,1) (3,2) y (1,3.5) (2.5,3):

vectores

El código para encontrar el punto donde se intersectan es:

        System.out.println("\nInterseccion entre dos vectores");
        Line l1 = new Line(new Vector2D(2, 1), new Vector2D(3, 2), 0);
        Line l2 = new Line(new Vector2D(1, 3.5), new Vector2D(2.5, 3), 0);
        Vector2D intersection = l1.intersection(l2);
        System.out.println("(" +intersection.getX() + " , " + intersection.getY()+")");

El código completo es el siguiente:

import org.apache.commons.math3.fraction.Fraction;
import org.apache.commons.math3.geometry.euclidean.twod.Line;
import org.apache.commons.math3.geometry.euclidean.twod.Vector2D;
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.ArrayRealVector;
import org.apache.commons.math3.linear.DecompositionSolver;
import org.apache.commons.math3.linear.LUDecomposition;
import org.apache.commons.math3.linear.MatrixUtils;
import org.apache.commons.math3.linear.RealMatrix;
import org.apache.commons.math3.linear.RealVector;
/**
 * @view https://www.jc-mouse.net
 * @author mouse
 */
public class Main {
    
    public static void main(String[] args) {

        /**
         * OPERACIONES CON MATRICES
         */
        double[][] matrixData = {{1d, 2d, 3d},
        {4d, 5d, 6d},
        {7d, 8d, 9d}};
        RealMatrix m = MatrixUtils.createRealMatrix(matrixData);

        double[][] matrixData2 = {{9d, 8d, 7d},
        {6d, 5d, 4d},
        {3d, 2d, 1d}
        };
        RealMatrix n = new Array2DRowRealMatrix(matrixData2);

        //Multiplicacion de matrices
        RealMatrix producto = m.multiply(n);
        imprimirMatrix("Multiplicacion de matrices", producto);

        //Suma de matrices
        RealMatrix suma = m.add(n);
        imprimirMatrix("Suma de matrices", suma);

        //resta de matrices
        RealMatrix resta = m.subtract(n);
        imprimirMatrix("Resta de matrices", resta);

        //transposición de matrices
        RealMatrix tr = m.transpose();
        imprimirMatrix("transposición de matrices", tr);

        /**
         * Resolucion de ecuaciones lineales
         */
        RealMatrix coefficients
                = new Array2DRowRealMatrix(new double[][]{
                    {2, 3, -2}, 
                    {-1, 7, 6}, 
                    {4, -3, -5}},
                false);
        DecompositionSolver solver = new LUDecomposition(coefficients).getSolver();

        RealVector constants = new ArrayRealVector(new double[]{1, -2, 1}, false);
        RealVector solution = solver.solve(constants);
        System.out.println("\nEcuacion Lineal");
        imprimirVector(solution);

        /**
         * Geometria
         */
        System.out.println("\nInterseccion entre dos vectores");
        Line l1 = new Line(new Vector2D(2, 1), new Vector2D(3, 2), 0);
        Line l2 = new Line(new Vector2D(1, 3.5), new Vector2D(2.5, 3), 0);
        Vector2D intersection = l1.intersection(l2);
        System.out.println("(" +intersection.getX() + " , " + intersection.getY()+")");
     
    }

    public static void imprimirVector(RealVector v) {
        for (int r = 0; r < v.getDimension(); r++) {            
            Fraction g = new Fraction(v.getEntry(r));
            System.out.println("| " + g.toString() + " |");
        }
    }

    public static void imprimirMatrix(String titulo, RealMatrix m) {
        System.out.println("\n" + titulo);
        for (int f = 0; f < m.getRowDimension(); f++) {
            for (int c = 0; c < m.getColumnDimension(); c++) {
                if (c == 0) {
                    System.out.print(" | ");
                }
                System.out.print(m.getEntry(f, c));
                if (c < m.getColumnDimension() - 1) {
                    System.out.print(" , ");
                } else {
                    System.out.print(" | ");
                }
            }
            System.out.println();
        }
    }

}

Ejecutando la clase tenemos:

soluciones matematicas

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Netbeans «Problemas de Referencia»

Netbeans «Problemas de Referencia»

Cuando nos bajamos un proyecto de internet o cuando nos pasan un código de otra pc (que técnicamente viene siendo lo mis...

Añade un PlaceHolder a un JTextField

Añade un PlaceHolder a un JTextField

PlaceHolder: PlaceHolder es un atributo propio de HTML5 y es el texto que aparece dentro de un campo de texto (un JTextF...

Crea gráfico de barras Bar Chart

Crea gráfico de barras Bar Chart

Un gráfico de barras es una forma de resumir un conjunto de datos por categorías. Muestra los datos usando varias barras...

Conexión MySQL y C#

Conexión MySQL y C#

En este post vamos a crear una aplicación sencilla para conectar C# con MySQL. Manos a la obra 🙂 Necesitamos – Con...

Crear PopupMenu (Ventana Emergente)

Crear PopupMenu (Ventana Emergente)

En este tutorial crearemos una aplicación android que nos permitirá abrir un PopupMenu de donde podremos seleccionar una...

Introducción a Spark Framework

Introducción a Spark Framework

Spark Framework es un conjunto de librerías para los lenguajes Java y Kotlin que nos sirve para el desarrollo rápido y s...

Comparte lo que sabes

Categorias

Últimas entradas

Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...

Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...

En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...

Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...

Herramientas

Generador de Enlaces a Whatsapp