Rozwiązywanie układu dwóch równań liniowych w języku Python

1
Przykład 1

Wykorzystajmy znane już wzory do napisania w języku Python funkcji rozwiązującej układ dwóch równań z dwiema niewiadomymi metodą wyznaczników. Układ równań, który będziemy rozwiązywać, wygląda następująco:

a1x+b1y=c1a2x+b2y=c2

Specyfikacja:

Dane:

  • a1 – współczynnik liczbowy a1 pierwszego równania; liczba rzeczywista

  • b1 – współczynnik liczbowy b1 pierwszego równania; liczba rzeczywista

  • c1 – współczynnik liczbowy c1 pierwszego równania; liczba rzeczywista

  • a2 – współczynnik liczbowy a2 drugiego równania; liczba rzeczywista

  • b2 – współczynnik liczbowy b2 drugiego równania; liczba rzeczywista

  • c2 – współczynnik liczbowy c2 drugiego równania; liczba rzeczywista

Wynik:

Program, na standardowym wyjściu, drukuje informacje na temat uzyskanego rozwiązania układu równań (w postaci komunikatu przedstawiającego kolejno: wartość niewiadomej x i wartość niewiadomej y) lub komunikat Układ jest sprzeczny w przypadku sprzeczności układu bądź Układ ma nieskończenie wiele rozwiązań w przypadku nieskończonej liczby rozwiązań.

Gotowa funkcja:

Linia 1. def rozwiazanie podkreślnik ukladu podkreślnik rownan podkreślnik metoda podkreślnik wyznacznikow otwórz nawias okrągły a1 przecinek b1 przecinek c1 przecinek a2 przecinek b2 przecinek c2 zamknij nawias okrągły dwukropek. Linia 2. w znak równości a1 asterysk b2 minus b1 asterysk a2. Linia 3. wx znak równości c1 asterysk b2 minus b1 asterysk c2. Linia 4. wy znak równości a1 asterysk c2 minus c1 asterysk a2. Linia 6. if w dwukropek. Linia 7. print otwórz nawias okrągły cudzysłów Wynik równania x to otwórz nawias klamrowy zamknij nawias klamrowy cudzysłów kropka format otwórz nawias okrągły wx prawy ukośnik w zamknij nawias okrągły zamknij nawias okrągły. Linia 8. print otwórz nawias okrągły cudzysłów Wynik równania y to otwórz nawias klamrowy zamknij nawias klamrowy cudzysłów kropka format otwórz nawias okrągły wy prawy ukośnik w zamknij nawias okrągły zamknij nawias okrągły. Linia 9. else dwukropek. Linia 10. if wx znak równości znak równości 0 and wy znak równości znak równości 0 dwukropek. Linia 11. print otwórz nawias okrągły cudzysłów Układ ma nieskończenie wiele rozwiązań cudzysłów zamknij nawias okrągły. Linia 12. else dwukropek. Linia 13. print otwórz nawias okrągły apostrof Układ jest sprzeczny apostrof zamknij nawias okrągły.

Oto dwa przykłady wykorzystania funkcji wraz z otrzymanymi rezultatami.

Pierwszy przypadek:

Wywołanie funkcji:

Linia 1. rozwiazanie podkreślnik ukladu podkreślnik rownan podkreślnik metoda podkreślnik wyznacznikow otwórz nawias okrągły 5 przecinek minus 4 przecinek 8 przecinek 4 przecinek 2 przecinek 22 zamknij nawias okrągły.

Zwrócony rezultat:

Linia 1. Wynik równania x to 4 kropka 0. Linia 2. Wynik równania y to 3 kropka 0.

Drugi przypadek:

Wywołanie funkcji:

Linia 1. rozwiazanie podkreślnik ukladu podkreślnik rownan podkreślnik metoda podkreślnik wyznacznikow otwórz nawias okrągły 1 przecinek minus 1 przecinek 2 przecinek 3 przecinek minus 3 przecinek 1 zamknij nawias okrągły.

Zwrócony rezultat:

Linia 1. Układ jest sprzeczny.

W przypadku układu sprzecznego dwie proste na wykresie są równoległe (nie mają punktu wspólnego), a zatem nie da się podać rozwiązania:

R1SJx0d7GD0MQ
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

W przypadku układu z nieskończoną liczbą rozwiązań, zwanym również układem tożsamościowym, rozwiązaniem są dwie linie ciągłe pokrywające się (wszystkie ich punkty są wspólne), zatem rozwiązań jest nieskończenie wiele. Oto przykład takiego układu równań:

x+y2=10
2x+y=20
R1DKP7hhdnmEc
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
1
Przykład 2

W celu zobrazowania wyników obliczeń, posłużymy się biblioteką matplotlibmatplotlibmatplotlib i napiszemy program, który będzie generował wykres dwóch funkcji liniowych, składających się na rozwiązywany układ:

a1x+b1y=c1a2x+b2y=c2

Specyfikacja:

Dane:

  • a1 – współczynnik liczbowy a1 pierwszego równania; liczba rzeczywista

  • b1 – współczynnik liczbowy b1 pierwszego równania; liczba rzeczywista

  • c1 – współczynnik liczbowy c1 pierwszego równania; liczba rzeczywista

  • a2 – współczynnik liczbowy a2 drugiego równania; liczba rzeczywista

  • b2 – współczynnik liczbowy b2 drugiego równania; liczba rzeczywista

  • c2 – współczynnik liczbowy c2 drugiego równania; liczba rzeczywista

Wynik

Program generuje wykres dwóch funkcji liniowych oraz zaznacza na nim uzyskane rozwiązanie układu równań. Jeżeli rozważany układ jest sprzeczny lub nieoznaczony, pomijany jest etap nanoszenia rozwiązania na wykres.

Zapiszemy najpierw równania w postaci funkcji. Posłużymy się przykładowymi równaniami, dla których przetestujemy działanie programu:

5x-4y=8fx=114x-2
4x+2y=22fx=-2x+11

Przygotujmy kod w języku Python, który obliczy punkty niezbędne do narysowania wykresu i wyznaczy punkt przecięcia dwóch prostych.

Linia 1. def uklad podkreślnik rownan podkreślnik graficznie otwórz nawias okrągły a1 przecinek b1 przecinek c1 przecinek a2 przecinek b2 przecinek c2 zamknij nawias okrągły dwukropek. Linia 2. import matplotlib kropka pyplot as plt. Linia 4. def ukl podkreślnik wyzn otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 5. w znak równości a1 asterysk b2 minus b1 asterysk a2. Linia 6. wx znak równości c1 asterysk b2 minus b1 asterysk c2. Linia 7. wy znak równości a1 asterysk c2 minus c1 asterysk a2. Linia 9. if w dwukropek. Linia 10. wynik znak równości True średnik. Linia 11. return otwórz nawias okrągły wx prawy ukośnik w przecinek wy prawy ukośnik w zamknij nawias okrągły. Linia 12. else dwukropek. Linia 13. wynik znak równości False średnik. Linia 14. return None. Linia 16. def f1 otwórz nawias okrągły x zamknij nawias okrągły dwukropek. Linia 17. return otwórz nawias okrągły a1 asterysk x minus c1 zamknij nawias okrągły prawy ukośnik otwórz nawias okrągły minus b1 zamknij nawias okrągły. Linia 19. def f2 otwórz nawias okrągły x zamknij nawias okrągły dwukropek. Linia 20. return otwórz nawias okrągły a2 asterysk x minus c2 zamknij nawias okrągły prawy ukośnik otwórz nawias okrągły minus b2 zamknij nawias okrągły. Linia 22. wynik znak równości ukl podkreślnik wyzn otwórz nawias okrągły zamknij nawias okrągły. Linia 23. if wynik dwukropek. Linia 24. W0 znak równości otwórz nawias kwadratowy wynik otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 25. W1 znak równości otwórz nawias kwadratowy wynik otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 26. plt kropka scatter otwórz nawias okrągły W0 przecinek W1 przecinek color znak równości apostrof red apostrof zamknij nawias okrągły. Linia 27. plt kropka title otwórz nawias okrągły apostrof Wynik rozwiązania układu równań to punkt apostrof plus str otwórz nawias okrągły wynik zamknij nawias okrągły zamknij nawias okrągły. Linia 29. X0 znak równości otwórz nawias kwadratowy x for x in range otwórz nawias okrągły minus 10 przecinek 20 zamknij nawias okrągły zamknij nawias kwadratowy. Linia 30. Y1 znak równości otwórz nawias kwadratowy f1 otwórz nawias okrągły x zamknij nawias okrągły for x in range otwórz nawias okrągły minus 10 przecinek 20 zamknij nawias okrągły zamknij nawias kwadratowy. Linia 31. Y2 znak równości otwórz nawias kwadratowy f2 otwórz nawias okrągły x zamknij nawias okrągły for x in range otwórz nawias okrągły minus 10 przecinek 20 zamknij nawias okrągły zamknij nawias kwadratowy. Linia 33. plt kropka plot otwórz nawias okrągły X0 przecinek Y1 zamknij nawias okrągły. Linia 34. plt kropka plot otwórz nawias okrągły X0 przecinek Y2 zamknij nawias okrągły. Linia 35. plt kropka grid otwórz nawias okrągły True zamknij nawias okrągły. Linia 36. if wynik dwukropek. Linia 37. plt kropka legend otwórz nawias okrągły otwórz nawias kwadratowy apostrof Rozwiązanie układu równań apostrof przecinek apostrof Wykres funkcji f otwórz nawias okrągły x zamknij nawias okrągły znak równości apostrof plus str otwórz nawias okrągły a1 prawy ukośnik minus b1 zamknij nawias okrągły plus apostrof asterysk x minus otwórz nawias okrągły apostrof plus str otwórz nawias okrągły minus c1 prawy ukośnik minus b1 zamknij nawias okrągły plus apostrof zamknij nawias okrągły apostrof przecinek apostrof Wykres funkcji f otwórz nawias okrągły x zamknij nawias okrągły znak równości apostrof plus str otwórz nawias okrągły a2 prawy ukośnik minus b2 zamknij nawias okrągły plus apostrof asterysk x minus otwórz nawias okrągły apostrof plus str otwórz nawias okrągły minus c2 prawy ukośnik minus b2 zamknij nawias okrągły plus apostrof zamknij nawias okrągły apostrof zamknij nawias kwadratowy zamknij nawias okrągły. Linia 38. else dwukropek. Linia 39. plt kropka legend otwórz nawias okrągły otwórz nawias kwadratowy apostrof Wykres funkcji f otwórz nawias okrągły x zamknij nawias okrągły znak równości apostrof plus str otwórz nawias okrągły a1 prawy ukośnik minus b1 zamknij nawias okrągły plus apostrof asterysk x minus otwórz nawias okrągły apostrof plus str otwórz nawias okrągły minus c1 prawy ukośnik minus b1 zamknij nawias okrągły plus apostrof zamknij nawias okrągły apostrof przecinek apostrof Wykres funkcji f otwórz nawias okrągły x zamknij nawias okrągły znak równości apostrof plus str otwórz nawias okrągły a2 prawy ukośnik minus b2 zamknij nawias okrągły plus apostrof asterysk x minus otwórz nawias okrągły apostrof plus str otwórz nawias okrągły minus c2 prawy ukośnik minus b2 zamknij nawias okrągły plus apostrof zamknij nawias okrągły apostrof zamknij nawias kwadratowy zamknij nawias okrągły. Linia 40. plt kropka show otwórz nawias okrągły zamknij nawias okrągły. Linia 43. kratka wykonanie. Linia 44. uklad podkreślnik rownan podkreślnik graficznie otwórz nawias okrągły 5 przecinek minus 4 przecinek 8 przecinek 4 przecinek 2 przecinek 22 zamknij nawias okrągły.

Wynikiem działania programu jest następujący wykres:

R138tlZL4EV1E
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Ważne!

Zwróćmy uwagę, że czerwony punkt przecięcia rysowany jest tylko wtedy, gdy funkcja ukl_wyzn(...) zwróci wartość (wyznacznik główny jest różny od zera), czyli gdy istnieje dokładnie jedno rozwiązanie układu.

1
Dla zainteresowanych

Programiści mają do dyspozycji ciekawą bibliotekę, wykorzystywaną do rozwiązywania problemów algebraicznych. Jest nią SymPybiblioteka SymPySymPy (została ona w całości napisana w języku Python).

Słownik

matplotlib
matplotlib

biblioteka służąca do przedstawienia obrazów składających się z punktów o współrzędnych x oraz y (np. wykresów, histogramów, rozkładów itp.); moduł matplotlib nie jest dostępny w standardowej instalacji języka Python – należy go zainstalować, korzystając z mechanizmu pip

biblioteka SymPy
biblioteka SymPy

biblioteka Pythona o otwartym kodzie źródłowym; oferuje narzędzia do
rozwiązywania szerokiej gamy problemów analitycznych i symbolicznych – https://www.sympy.org/en/index.html

układ równań
układ równań

co najmniej dwa równania połączone operatorem logicznym AND (koniunkcja co najmniej dwóch równań)