Domanda

Ho tre equazioni come le seguenti:

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

Come posso trovare i valori di x, ye 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?    
} 

Hai qualche soluzione possibile o altri framework comuni?

È stato utile?

Soluzione

È possibile utilizzare il determinante per calcolare i valori di x ye z. La logica può essere trovata qui http://www.intmath.com/Matrices-determinants/1_Determinants .php

E quindi è necessario implementarlo in Java usando matrici tridimensionali.

Altri suggerimenti

Dato che stai scrivendo Java, puoi usare il pacchetto JAMA per risolvi questo. Consiglierei un buon metodo di decomposizione LU.

È un semplice problema di algebra lineare. Dovresti essere in grado di risolverlo a mano o usando qualcosa come Excel abbastanza facilmente. Una volta che hai che puoi usare la soluzione per testare il tuo programma.

Naturalmente non esiste alcuna garanzia che esista una soluzione. Se la tua matrice è singolare, significa che non c'è intersezione di quelle tre linee nello spazio 3D.

puoi usare il pacchetto java matrix JAMA . Vedi la pagina intera di questo esempio di seguito qui  

/*
 *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();
    }
}

Puoi anche utilizzare Commons Math . Ne hanno una sezione nel userguide (vedi 3.4)

Crea un parser usando ANTLR . Quindi valuta AST utilizzando eliminazione gaussiana .

Usa Gaussian_elimination è incredibilmente facile, ma ci sono alcuni valori potresti avere delle difficoltà nel calcolo della vita.

Esempio di codice

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top