如何求解2变量线性联立方程? Java的

时间:2017-02-16 16:29:21

标签: java math

说你有

3x + 2y = 11 
2x - 3y = 16  

你将如何在Java中使用x and y

做了一些代数后,我发现了x = de-bf / ad-bcy = af-ce / ad-bc

这些显示字母是什么 a + b = ec + d = f

每当我编写代码时,它总是给我错误的答案,我不确定这是否是由于使用int而不是双打或什么。是否也可以解析等式中的字母,例如

input: 5x - 3y = 5
parased as: a = 5, b = -3 and e = 5

这是没有解析的代码

public static void solveSimultaneousEquations(double a, double b, double c, double d, double e, double f) {
    double det = 1/ ((a) * (d) - (b) * (c));
    double x = ((d) * (e) - (b) * (f)) / det;
    double y = ((a) * (f) - (c) * (e)) / det;
    System.out.print("x=" + x + " y=" + y);
}

2 个答案:

答案 0 :(得分:3)

问题在于你将决定因素划分了两次!

你的公式是

x = de-bf / ad-bc
y = af-ce / ad-bc

det = ad-bc

这样:

x = de-bf / det 
y = af-ce / det 

但你计算:

double det = 1/ ((a) * (d) - (b) * (c));

因此,您的计划det中的det不是公式,而是1/det

所以你要么纠正:

double det =((a)*(d) - (b)*(c));

double x =((d)*(e) - (b)*(f))* det;    double y =((a)*(f) - (c)*(e))* det;

我更喜欢第一个:

public static void solveSimultaneousEquations(double a, double b, double c, double d, double e, double f) {
    double det = ((a) * (d) - (b) * (c));  //instead of 1/
    double x = ((d) * (e) - (b) * (f)) / det;
    double y = ((a) * (f) - (c) * (e)) / det;
    System.out.print("x=" + x + " y=" + y);
}

答案 1 :(得分:0)

使用矩阵是求解方程组的最简单方法

所以,从你的例子:

3x + 7y = 41
5x - 3y = 25

您实际上可以创建矩阵

[[3 7]
 [5 -3]]

[41 25]

现在,如果你将两边乘以左边矩阵的倒数,你将有

[[1 0]
[0 1]]

左侧是

,右侧是x和y的解决方案

以前有一个矩阵包,NASA已经开发并提供了可用于创建矩阵和反转的矩阵包。寻找那个或类似的东西