Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek
|
W naszym serwisie jest nowszy artykuł o obliczaniu pierwiastków funkcji: "Metody numeryczne".
SPIS TREŚCI |
Podrozdziały |
Układ równań liniowych z dwoma niewiadomymi ma następującą postać:
Wyrazy a, b, c, ..., f nazywamy współczynnikami (ang. coefficients), a x i y nazywamy niewiadomymi (ang. variables). Rozwiązaniem takiego układu równań są takie wartości x i y, dla których równanie jest prawdziwe (spełnione).
Przykład:
Rozwiązaniem dla poniższego układu równań:
są dwie liczby: x = 1 oraz y = 2, ponieważ:
Układ równań z dwoma niewiadomymi możemy rozwiązać analitycznie. Oto jeden ze sposobów (nie jedyny i nie najlepszy!). Z pierwszego równania wyznaczamy niewiadomą y:
Wyliczonym wyrażeniem zastępujemy niewiadomą y w drugim równaniu i wyliczamy niewiadomą x:
Otrzymany wzór pozwala wyliczyć niewiadomą x. Wyrażenie to wstawiamy w miejsce x w równaniu pierwszym i wyliczamy y:
Otrzymaliśmy wzory, które pozwalają obliczyć wartość niewiadomych dla danego układu równań liniowych:
![]() |
i |
![]() |
Warunkiem istnienia jednoznacznego rozwiązania układu równań jest niezerowy
mianownik w obu wyznaczonych ułamkach. Zatem wyrażenie
Jeśli warunek powyższy będzie prawdziwy, to układ równań nie będzie posiadał jednoznacznego rozwiązania (o takich równaniach mówimy, iż są sprzeczne lub liniowo zależne). W przeciwnym razie rozwiązanie takie istnieje i wyliczamy je zgodnie z podanymi wzorami.
a,b,c,d,e,f | – współczynniki układu równań, a,b,c,d,e,f ∈ R |
x,y | – wartości niewiadomych, x,y ∈ R lub informacja, iż układ równań nie posiada rozwiązania. |
ε | – dokładność porównania z zerem, ε ∈ R, ε = 0.0000000001 |
m | – mianownik wspólnego wyrażenia we wzorach na x i y. m ∈ R |
K01: | Czytaj a,b,c,d,e,f |
K02: | m ← db - ea |
K03: | Jeśli |
m | <
ε, to idź do kroku K08 |
K04: | ![]() |
K05: | ![]() |
K06: | Pisz x, y |
K07: | Zakończ |
K08: | Pisz "Brak rozwiązania" |
K09: | Zakończ |
Na początku algorytmu odczytujemy kolejne współczynniki układu równań oraz obliczamy mianownik m, który jest wykorzystywany we wzorach na niewiadome x i y. Dzięki temu zaoszczędzimy nieco na obliczeniach.
Sprawdzamy, czy mianownik m jest w dostatecznie bliskim otoczeniu zera. Jeśli tak, to układ równań nie posiada rozwiązania. Wypisujemy to i kończymy algorytm.
W przeciwnym razie obliczamy niewiadome x i y wg wyprowadzonych wzorów i wypisujemy je. Po tej operacji kończymy algorytm.
Zwróć uwagę, iż koncepcyjnie podany algorytm jest identyczny z algorytmem z poprzedniego rozdziału.
W celu uruchomienia przykładów zastosuj projekt aplikacji konsoli (ang. Console Application).
C++// Program rozwiązuje układ dwóch równań liniowych // ax + by + c = 0 // dx + ey + f = 0 //------------------------------------------------ // (C)2006 mgr Jerzy Wałaszek // I Liceum Ogólnokształcące // im. Kazimierza Brodzińskiego // w Tarnowie //------------------------------------------------ #include <iostream> #include <iomanip> #include <cmath> #include <cstdlib> using namespace std; int main() { const double EPS = 0.0000000001; double a,b,c,d,e,f,m,x,y; cout << setprecision(4) // 4 cyfry po przecinku << fixed; // format stałoprzecinkowy cout << "Rozwiazywanie ukladu rownan liniowych:\n" "ax + by + c = 0\n" "dx + ey + f = 0\n" "--------------------------------------\n" "(C)2006 mgr J.Walaszek I LO w Tarnowie\n\n" "Wpisz wartosci wspolczynnikow:\n\n" "a = "; cin >> a; cout << "b = "; cin >> b; cout << "c = "; cin >> c; cout << "d = "; cin >> d; cout << "e = "; cin >> e; cout << "f = "; cin >> f; cout << "\n--------------------------------------\n" "WYNIKI\n\n"; m = d * b - e * a; if(fabs(m) < EPS) cout << "Brak rozwiazania\n"; else { x = (e * c - f * b) / m; y = (f * a - d * c) / m; cout << "x = " << setw(10) << x << "\n\ny = " << setw(10) << y << endl; } cout << "\n--------------------------------------\n\n"; system("pause"); return 0; } |
Pascal// Program rozwiązuje układ dwóch równań liniowych // ax + by + c = 0 // dx + ey + f = 0 //------------------------------------------------ // (C)2006 mgr Jerzy Wałaszek // I Liceum Ogólnokształcące // im. Kazimierza Brodzińskiego // w Tarnowie //------------------------------------------------ program mzfl2; const EPS = 0.0000000001; // dokładność porównania z zerem var a,b,c,d,e,f,m,x,y : couble; begin writeln('Rozwiazywanie ukladu rownan liniowych:'); writeln('ax + by + c = 0'); writeln('dx + ey + f = 0'); writeln('--------------------------------------'); writeln('(C)2006 mgr J.Walaszek I LO w Tarnowie'); writeln; writeln('Wpisz wartosci wspolczynnikow:'); writeln; write('a = '); readln(a); write('b = '); readln(b); write('c = '); readln(c); write('d = '); readln(d); write('e = '); readln(e); write('f = '); readln(f); writeln; writeln('--------------------------------------'); writeln('WYNIKI'); writeln; m := d * b - e * a; if abs(m) < EPS then writeln('Brak rozwiazania') else begin x := (e * c - f * b) / m; y := (f * a - d * c) / m; writeln('x = ',x:10:4); writeln; writeln('y = ',y:10:4); end; writeln; writeln('--------------------------------------'); writeln('Koniec. Nacisnij klawisz Enter...'); readln; end. |
Basic' Program rozwiązuje układ dwóch równań liniowych ' ax + by + c = 0 ' dx + ey + f = 0 '------------------------------------------------ ' (C)2006 mgr Jerzy Wałaszek ' I Liceum Ogólnokształcące ' im. Kazimierza Brodzińskiego ' w Tarnowie '------------------------------------------------ const EPS As Double = 0.0000000001 ' dokładność porównania z zerem Dim As double a,b,c,d,e,f,m,x,y Print "Rozwiazywanie ukladu rownan liniowych:" Print "ax + by + c = 0" Print "dx + ey + f = 0" Print "--------------------------------------" Print "(C)2006 mgr J.Walaszek I LO w Tarnowie" Print Print "Wpisz wartosci wspolczynnikow:" Print Input "a = ",a Input "b = ",b Input "c = ",c Input "d = ",d Input "e = ",e Input "f = ",f Print Print "--------------------------------------" Print "WYNIKI" Print m = d * b - e * a If abs(m) < EPS then Print "Brak rozwiazania" Else x = (e * c - f * b) / m y = (f * a - d * c) / m Print Using "x = #####.####";x Print Print Using "y = #####.####";y End If Print Print "--------------------------------------" Print "Koniec. Nacisnij klawisz Enter..." Sleep End |
JavaScript<html> <head> </head> <body> <div align="center"> <form style="BORDER-RIGHT: #ff9933 1px outset; PADDING-RIGHT: 4px; BORDER-TOP: #ff9933 1px outset; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: #ff9933 1px outset; PADDING-TOP: 1px; BORDER-BOTTOM: #ff9933 1px outset; BACKGROUND-COLOR: #ffcc66" name="frmprg"> <h3 style="TEXT-ALIGN: center"> Rozwiązywanie układu równań liniowych </h3> <p style="TEXT-ALIGN: center"> <i>ax + by + c = 0<br> dx + ey + f = 0</i> </p> <p style="TEXT-ALIGN: center"> (C)2006 mgr Jerzy Wałaszek I LO w Tarnowie </p> <hr> <p style="TEXT-ALIGN: center"> Podaj wartości współczynników: </p> <div align="center"> <table border="0" cellpadding="4" style="border-collapse: collapse"> <tr> <td align="right"> <i>a</i> = <input type="text" name="inp_a" size="20" value="2" style="text-align: right"> </td> <td align="right"> <i>b</i> = <input type="text" name="inp_b" size="20" value="3" style="text-align: right"> </td> <td align="right"> <i>c</i> = <input type="text" name="inp_c" size="20" value="-8" style="text-align: right"> </td> </tr> <tr> <td align="right"> <i>d</i> = <input type="text" name="inp_d" size="20" value="4" style="text-align: right"> </td> <td align="right"> <i>e</i> = <input type="text" name="inp_e" size="20" value="-3" style="text-align: right"> </td> <td align="right"> <i>f</i> = <input type="text" name="inp_f" size="20" value="2" style="text-align: right"> </td> </tr> </table> </div> <p style="TEXT-ALIGN: center"> <input type="button" value="Rozwiąż układ równań" name="B1" onclick="main()"> </p> <hr> <p style="TEXT-ALIGN: center"> <b>WYNIKI:</b> </p> <p style="TEXT-ALIGN: center" id="t_out">.</p> </form> <script language=javascript> // Program rozwiązuje układ dwóch równań liniowych // ax + by + c = 0 // dx + ey + f = 0 //------------------------------------------------ // (C)2006 mgr Jerzy Wałaszek // I Liceum Ogólnokształcące // im. Kazimierza Brodzińskiego // w Tarnowie //------------------------------------------------ function main() { var EPS = 0.0000000001; var a,b,c,d,e,f,m,x,y,t; a = parseFloat(document.frmprg.inp_a.value); b = parseFloat(document.frmprg.inp_b.value); c = parseFloat(document.frmprg.inp_c.value); d = parseFloat(document.frmprg.inp_d.value); e = parseFloat(document.frmprg.inp_e.value); f = parseFloat(document.frmprg.inp_f.value); if(isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) t = "<b><font color=red>Nieprawidłowe współczynniki</font></b>"; else { m = d * b - e * a; if(Math.abs(m) < EPS) t = "<b><font color=red>Brak rozwiazania</font></b>"; else { x = (e * c - f * b) / m; y = (f * a - d * c) / m; t = "x = " + x + ", y = " + y; } } document.getElementById("t_out").innerHTML = t; } </script> </div> </body> </html> |
Wynik: |
Rozwiązywanie układu równań
liniowych: ax + by + c = 0 dx + ey + f = 0 -------------------------------------- (C)2006 mgr J.Wałaszek I LO w Tarnowie Wpisz wartości współczynników: a = 2 b = 3 c = -8 d = 4 e = -3 f = 2 -------------------------------------- WYNIKI x = 1,0000 y = 2,0000 -------------------------------------- Koniec. Naciśnij klawisz Enter... |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.