如何用java解决方程?

时间:2009-09-16 09:18:09

标签: java math equation

我有三个等式,如下所示:

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

如何使用Java找到x,y和z的值?

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?    
} 

您有任何可能的解决方案或其他常见框架吗?

8 个答案:

答案 0 :(得分:11)

由于您正在编写Java,因此可以使用JAMA包来解决此问题。我推荐一种很好的LU分解方法。

这是一个简单的线性代数问题。你应该能够手工解决它或者很容易地使用像Excel这样的东西。完成后,您可以使用该解决方案来测试您的程序。

当然,无法保证有解决方案。如果矩阵是单数,则意味着在3D空间中这三条线没有交叉。

答案 1 :(得分:9)

您可以使用行列式计算x y和z的值。 可以在此处找到逻辑http://www.intmath.com/Matrices-determinants/1_Determinants.php

然后你需要使用3维数组在java中实现它。

答案 2 :(得分:8)

您可以使用java矩阵包JAMA。请参阅以下示例的完整页面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();
    }
}

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

答案 3 :(得分:4)

使用ANTLR创建解析器。然后使用AST评估Gaussian elimination

答案 4 :(得分:4)

您也可以使用Commons Math。他们在userguide(见3.4)

中有一部分内容

答案 5 :(得分:2)

使用Gaussian_elimination这非常容易,但有some values你可能会有艰难的生活计算。

Code example

答案 6 :(得分:1)

有很多方法可以求解线性系统方程。有一种最简单的方法可以执行此操作。在示例中,Java代码使用Matrix方法解决了两个变量,但是您可以修改以执行3个变量计算。

    document.querySelectorAll('span[property=name]');

答案 7 :(得分:0)

请尝试:

import org.apache.commons.math3.linear.*;
import org.junit.Assert;
import org.junit.Test;

/**
 * Author: Andrea Ciccotta
 */
public class LinearSystemTest extends Assert {

    /**
     * Ax = B
     * 2x + 3y - 2z = 1
     * -x + 7y + 6x = -2
     * 4x - 3y - 5z = 1
     * <p>
     * it will use the LUDecomposition:
     * LU decomposition:
     * 1. find A = LU where LUx = B
     * 2. solve Ly = B
     * 4. solve Ux = y
     */
    @Test
    public void linearSystem3x3Test() {
        final RealMatrix coefficients = new Array2DRowRealMatrix(new double[][]{{2, 3, -2}, {-1, 7, 6}, {4, -3, -5}});
        final DecompositionSolver solver = new LUDecomposition(coefficients).getSolver();

        final RealVector constants = new ArrayRealVector(new double[]{1, -2, 1}, false);
        final RealVector solution = solver.solve(constants);
        final double[] arraySolution = solution.toArray();

        assertEquals(arraySolution[0], -0.36986301369863006, 0);
        assertEquals(arraySolution[1], 0.1780821917808219, 0);
        assertEquals(arraySolution[2], -0.6027397260273972, 0);
    }

}