Comment résoudre des équations avec Java?
Question
J'ai trois équations comme les suivantes:
- x + y + z = 100;
- x + y - z = 50;
- x - y - z = 10;
Comment trouver les valeurs de x, y et z avec 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?
}
Avez-vous des solutions possibles ou d’autres cadres communs?
La solution
Vous pouvez utiliser déterminant pour calculer les valeurs de x y et z. La logique peut être trouvée ici http://www.intmath.com/Matrices-determinants/1_Determinants .php
Ensuite, vous devez l'implémenter en Java à l'aide de tableaux en 3 dimensions.
Autres conseils
Puisque vous écrivez en Java, vous pouvez utiliser le package JAMA pour résoudre ceci. Je recommanderais une bonne méthode de décomposition en LU.
C'est un simple problème d'algèbre linéaire. Vous devriez être capable de le résoudre à la main ou d'utiliser quelque chose comme Excel assez facilement. Une fois que vous avez cela, vous pouvez utiliser la solution pour tester votre programme.
Bien entendu, rien ne garantit qu’il existe une solution. Si votre matrice est singulière, cela signifie qu'il n'y a pas d'intersection de ces trois lignes dans l'espace 3D.
vous pouvez utiliser le package de matrice java JAMA . Voir la page complète de cet exemple ci-dessous ici
/*
*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();
}
}
Vous pouvez également utiliser Commons Math . Ils en ont une section dans leur guide d'utilisation (voir 3.4)
Créez un analyseur syntaxique à l'aide de ANTLR . Ensuite, évaluez le AST en utilisant élimination de Gaussian .
Utilisez Gaussian_elimination , c'est incroyablement facile, mais il y a certaines valeurs , vous aurez peut-être du mal à calculer.