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.
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:
Operaciones básicas con matrices
Si tenemos las siguientes matrices
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
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):
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:
enjoy!!!
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! :)
La NASA (Administración Nacional de la Aeronáutica y del Espacio) pone en linea Image and Video Library un nuevo Catalog...
En este tutorial crearemos un sencillo juego de memoria en lenguaje java. Necesitamos IDE Netbeans 7.x Editor de imágene...
Un ProgressDialog muestra una ventana con un texto y una barra de progreso que indica el tiempo que tarda una tarea en r...
En este tutorial personalizaremos un JTextField java para darle la apariencia de un TextBox de Windows Metro. El TextBox...
Cuando realizamos proyectos java desde Netbeans, usamos System.out.println para imprimir datos en consola (para depurar,...
En estos días en los que medio mundo esta confinado en sus casas, la comunicación en tiempo real y preferentemente con v...
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...
Google Bard la inteligencia artificial de Google se actualiza con una mejora que entra a competir con el resto de IAs y...