2017-02-16 68 views
0

说你有如何求解一个2变量线性联立方程? Java的

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); 
} 
+0

哪里是你的代码?你的具体问题是什么? *寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:[如何创建最小,完整和可验证的示例](http://stackoverflow.com/help/mcve)。* – tnw

+0

请向我们提供您的代码。是的,你应该使用double而不是int。 –

+0

你问如果使用int而不是double可能会导致你的问题。我敢打赌,检查这件事比花时间在这里要花费更少的时间。你会比等待答案更快地知道解决方案。 BTW。您必须在方程中使用括号来求解x和y。 – Artur

回答

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

因此,无论更正:

双DET =((A)×(d) - (B)*(C));

双X =((d)*(E) - (B)*(F))* DET; (y)*(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

使用矩阵的解方程

的系统,因此最简单的方法,从你的例子:

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

实际上就可以创建矩阵

[[3- 7]
[5 -3]]

[41 25]

现在,如果通过乘以两侧你将有

[[1 0]
[0 1]]

左侧

,并表示x的解决方案和y右侧

那里曾经是美国航空航天局已经制定并提供在那里你可以创建矩阵和做逆矩阵包。寻找那个或类似的东西

+0

这是我试图完成的工作,在使用字母代替数字后,我来到了我知道工作的方程式,因为我已经测试了它们。感谢美国宇航局的建议,我会研究那 – ThorinDev

+0

你不需要看美国航空航天局。有Java库可以做到这一点,包括Apache Commons Math。 http://commons.apache.org/proper/commons-math/ – duffymo