Układ równań z dwoma niewiadomymi


Tematy pokrewne

 

Algorytm

Układ równań liniowych z dwoma niewiadomymi ma następującą postać:

 

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

 

Wyrazy a, b, c, ..., f nazywamy współczynnikami, a x i y nazywamy niewiadomymi. 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ń:

 

2x + 3y - 8 = 0
4x - 3y + 2 = 0

 

są dwie liczby: x = 1 oraz y = 2, ponieważ:

 

2 1 + 3 2 - 8 = 0
4 1 - 3 2 + 2 = 0
2 + 6 - 8 = 0
4 - 6 + 2 = 0

 

Układ równań z dwoma niewiadomymi możemy rozwiązać analitycznie. Oto jeden ze sposobów (nie jedyny ani nie najlepszy!). Z pierwszego równania wyznaczamy niewiadomą y:

 

ax + b + c = 0  / -ax - c

by = - ax - c / : b

y =   - ax - c
b

 

Wyliczonym wyrażeniem zastępujemy niewiadomą y w drugim równaniu i wyliczamy niewiadomą x:

 

dx + ey + f = 0  /  y - ax - c
b
dx + e  - ax - c + f = 0
b
db x -  ea x -  ec  +  fb  = 0
b b b b
db - ea x +  fb - ec  = 0  /  - fb - ec
b b b
db - ea x =  ec - fb   /    b
b b db - ea

 

 x =   ec - fb  
db - ea

 

Otrzymany wzór pozwala wyliczyć niewiadomą x. Wyrażenie to wstawiamy w miejsce x w równaniu pierwszym i wyliczamy y:

 

ax + by + c = 0  /  x ec - fb
db - ea
a ec - fb  + by + c = 0 /  - a  ec - fb - c
db - ea db - ea
by = - a  ec - fb - c
db - ea
by =  - eca + fba - dcb + eca
db - ea
by =  fba - dcb  / : b
db - ea
y =  b(fa - dc)
b(db - ea)

 

 y =   fa - dc  
db - ea

 

Otrzymaliśmy wzory, które pozwalają obliczyć wartość niewiadomych dla danego układu równań liniowych:

 

 x =   ec - fb  
db - ea
i
 y =   fa - dc  
db - ea

 

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:

 

| db - ea | < ε

 

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.

 

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 i funkcje

ε - 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: m ← db - ea
K03: Jeśli | m | < ε, to idź do K08
K04:
x ec - fb
m
K05:
y fa - dc
m
K06: Pisz x, y
K07: Zakończ
K08: Pisz "Brak rozwiązania"
K09: Zakończ

 

Schemat blokowy

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.


 

Programy

W celu uruchomienia przykładów zastosuj projekt aplikacji konsoli (ang. Console Application).

 

Efekt uruchomienia programu

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...

 

Free 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.
Code::Blocks
// 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;
}
FreeBASIC
' 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>

 

Tutaj możesz przetestować działanie prezentowanego skryptu:

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:

.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.