Powiedz, że masz

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

Jak byś pracowałeś x and y w Javie?

Po wykonaniu kilku algebry pomyślałem, że x = de-bf / ad-bc i y = af-ce / ad-bc

Pokazują te litery a + b = e i c + d = f

Ilekroć piszę kod, zawsze daje mi niewłaściwą odpowiedź, nie jestem pewien, czy to spowodowane użyciem int zamiast podwaja się lub co. Czy byłoby również możliwe przeanalizowanie liter z równania e.g

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

Oto kod bez analizowania

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);
}
1
ThorinDev 16 luty 2017, 19:29

2 odpowiedzi

Najlepsza odpowiedź

Problem polega na tym, że dwukrotnie podzielasz swojego wyznacznika!

Twoja formuła jest

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

det = ad-bc

Więc:

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

Ale obliczysz:

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

Tak więc w swoim programie det nie jest det z formuły, ale {x2}}!

Więc albo poprawisz:

Podwójny det = (a) * (D) - (b) * (c));

lub

Podwójny x = (d) * (e) - (b) * (f)) * Det; podwójny y = (a) * (f) - (c) * (e)) * det;

Wolę pierwszy:

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);
}
3
President James K. Polk 16 luty 2017, 19:49

Korzystanie z matryc jest najłatwiejszym sposobem rozwiązania systemów równań

Więc z twojego przykładu:

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

Możesz rzeczywiście tworzyć matryce

[[3 7]
[5 -3]]

I

[41 25]

Teraz, jeśli mnożysz obie strony przez odwrotność lewej strony matrycy, będziesz miał

[[1 0]
[0 1]]

Po lewej stronie i roztwór dla obu X i Y po prawej stronie

Tam był pakiet macierzy, który NASA opracował i udostępnił, w którym można utworzyć matryce i czyjesz inwersaki. Szukaj tego lub czegoś podobnego

0
ControlAltDel 16 luty 2017, 16:35