2009-09-16 24 views
10

tengo tres ecuaciones como las siguientes:Cómo resolver ecuaciones con java?

  • x + y + z = 100;
  • x + y - z = 50;
  • x - y - z = 10;

¿Cómo puedo encontrar los valores de x, y y z con Java?

String equation1="x+y+z=100;"; 
String equation2="x+y-z=50;"; 
String equation3="x-y-z=10;"; 

int[] SolveEquations(equation1,equation2,equation3) { 
    // to do 
    // how to do?  
} 

¿Tiene alguna posible solución u otro marco común?

+5

¿Es esta tarea? – KLE

+14

Desearía que la gente dejara de asumir la tarea. Una cosa es que alguien publique algo directamente de un problema de libro de texto como "Escribe un algoritmo no recursivo para lograr una clasificación O (log n) para una matriz". –

+0

Otra fuente, con código de muestra en varios idiomas, [aquí] (http://www.cs.umbc.edu/~squire/cs455_l3.html) – DaveJohnston

Respuesta

9

Puede usar determinante para calcular los valores de x y y z. La lógica se puede encontrar aquí http://www.intmath.com/Matrices-determinants/1_Determinants.php

Y luego debe implementarlo en java utilizando matrices tridimensionales.

+0

La URL que ha recomendado es muy buena. Gracias de nuevo. –

+2

Esto es matemáticamente válido, pero no muy bueno en términos de eficiencia. ver transcripción - Lecture 20 de video conferencias de profesor Gilbert Strang enseñar 18,06 "Si tuviera que -. Matlab y nunca, nunca lo haría quiero decir, sería utilizar la eliminación." http://ocw.mit.edu/OcwWeb/Mathematics/18-06Spring-2005/VideoLectures/detail/lecture20.htm –

+6

Calcular un determinante es (creo) O (n!). La eliminación gaussiana es O (n^2). – erikkallen

6

Crea un analizador usando ANTLR. Luego evalúa el AST usando Gaussian elimination.

+1

waoh, el conocimiento es muy profesional. Necesito algo de tiempo para digerir. –

+0

No estoy seguro de obtener la conexión entre el análisis sintáctico y la resolución lineal. –

+0

No, en absoluto, este es un problema de álgebra lineal. ANTLR no se aplica. – duffymo

11

Puesto que usted está escribiendo Java, se puede usar el paquete JAMA para resolver esto. Recomendaría un buen método de descomposición de LU.

Es un problema de álgebra lineal simple. Debería poder resolverlo a mano o usando algo como Excel con bastante facilidad. Una vez que tenga eso, puede usar la solución para probar su programa.

No hay garantía, por supuesto, de que haya una solución. Si su matriz es singular, eso significa que no hay intersección de esas tres líneas en el espacio 3D.

+0

¿Cuál es la razón para preferir la descomposición de LU? –

+1

"La descomposición LU es computacionalmente eficiente solo cuando tenemos que resolver una ecuación matricial varias veces para diferentes b; es más rápido en este caso hacer una descomposición LU de la matriz A una vez y luego resolver las matrices triangulares para las diferentes b, que para usar la eliminación gaussiana cada vez ". - común para el análisis de elementos finitos con múltiples vectores de carga. Estás en lo cierto, podría no importar en este caso. – duffymo

+0

@duffymo, gracias por la explicación. –

6

puede usar el paquete de matriz java JAMA. Consulte la página completa de este ejemplo a continuación here

/* 
*Solving three variable linear equation system 
* 3x + 2y - z = 1 ---> Eqn(1) 
* 2x - 2y + 4z = -2 ---> Eqn(2) 
* -x + y/2- z = 0 ---> Eqn(3) 
*/ 
import Jama.Matrix; 
import java.lang.Math.*; 
public class Main { 
    public Main() { 
     //Creating Arrays Representing Equations 
     double[][] lhsArray = {{3, 2, -1}, {2, -2, 4}, {-1, 0.5, -1}}; 
     double[] rhsArray = {1, -2, 0}; 
     //Creating Matrix Objects with arrays 
     Matrix lhs = new Matrix(lhsArray); 
     Matrix rhs = new Matrix(rhsArray, 3); 
     //Calculate Solved Matrix 
     Matrix ans = lhs.solve(rhs); 
     //Printing Answers 
     System.out.println("x = " + Math.round(ans.get(0, 0))); 
     System.out.println("y = " + Math.round(ans.get(1, 0))); 
     System.out.println("z = " + Math.round(ans.get(2, 0))); 
    } 

    public static void main(String[] args) { 
     new Main(); 
    } 
} 

Cuestiones relacionadas