2017-02-16 21 views
0

Скажем, у вас естьКак решить 2 переменное линейное одновременное уравнение? Java

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

Как бы вы работать x and y в Java?

После выполнения некоторой алгебры я понял, что x = de-bf/ad-bc и y = af-ce/ad-bc

Они показывает, что буквы a + b = e и c + 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. Держу пари, вам потребуется меньше времени, чтобы проверить это, не спрашивая здесь. Вы бы знали решение намного быстрее, чем ждать ответа здесь. КСТАТИ. Вы должны использовать круглые скобки в своих уравнениях для решения 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)); 

так в вашей программе detdet не из формулы, но 1/det!

Так как вы исправите:

двойной Det = ((а) * (d) - (б) * (с));

или

двойной х = ((г) * (е) - (б) * (е)) * 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

Использование матриц является самым простым способом для решения системы уравнений

Итак, из вашего примера:

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

Вы действительно можете создать матрицы

[[3 7]
[5 -3]]

и

[41 25]

Теперь, если умножить обе части на на обратной стороне матрицы слева, у вас будет

[[1 0]
[0 1]]

на левой стороне, и решение как для х и у на правой стороне

там раньше был пакет матрица, которая была разработана NASA и доступны, где вы можете создать матрицы и сделать обратимы. Ищите это или что-то подобное

+0

Это то, что я пытался выполнить, после разработки букв вместо цифр я пришел к своим уравнениям, которые я знаю, потому что я их протестировал. Спасибо за предложение NASA, я рассмотрю, что – ThorinDev

+0

Вам не нужно искать NASA. Для этого существуют библиотеки Java, в том числе Apache Commons Math. http://commons.apache.org/proper/commons-math/ – duffymo