我有三个等式,如下所示:
如何使用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?
}
您有任何可能的解决方案或其他常见框架吗?
答案 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你可能会有艰难的生活计算。
答案 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);
}
}