Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

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
I LO w Tarnowie

W naszym serwisie jest nowszy artykuł o obliczaniu pierwiastków funkcji: "Metody numeryczne".

Układ równań z dwoma niewiadomymi

SPIS TREŚCI
Podrozdziały

Algorytm

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 db - ea musi być różne od zera. Z uwagi na błędy zaokrągleń warunek ten zastąpimy przez:

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.

Na początek:  podrozdziału   strony 

Opis algorytmu

Specyfikacja problemu

Dane wejściowe

a,b,c,d,e,f – współczynniki układu równań, a,b,c,d,e,f R

Dane wyjściowe

x,y – wartości niewiadomych, x,y R lub informacja, iż układ równań nie posiada rozwiązania.

Zmienne pomocnicze

ε – dokładność porównania z zerem, ε R,  ε = 0.0000000001
m – mianownik wspólnego wyrażenia we wzorach na x i y. m R

Lista kroków

K01: Czytaj a,b,c,d,e,f
K02: mdb - 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

Schemat blokowy

 obrazek

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.

Na początek:  podrozdziału   strony 

Programy

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 + ",&nbsp;&nbsp;&nbsp; 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...

Rozwiązywanie układu równań liniowych

ax + by + c = 0
dx + ey + f = 0

(C)2006 mgr Jerzy Wałaszek I LO w Tarnowie


Podaj wartości współczynników:

a = b = c =
d = e = f =


WYNIKI:

.

Na początek:  podrozdziału   strony 

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.