Programowanie i algorytmy

Metoda wyznaczników

Zad 1. Napisz program, który rozwiąże układ równań z dwiema niewiadomymi metodą wyznaczników.

Rozwiązanie:

Rozpatrujemy następujący układ:

{tex}\left\{\begin{matrix}a_1 x + b_1 y = c_1 \\ a_2 x + b_2 y = c_2 \end{matrix} \right.{/tex}

gdzie wartości a1, b1, c1, a2, b2, c2 podajemy z klawiatury (dane wejściowe). Następnie, na podstawie tych danych liczymy wyznacznik główny, według następującego wzoru:

{tex}W = \begin{vmatrix} a_1 & b_1 \\ a_2 & b_2 \end{vmatrix}=a_1b_2-a_2b_1{/tex},

i wyznaczniki Wx i Wy:

{tex}W_x = \begin{vmatrix} c_1 & b_1 \\ c_2 & b_2 \end{vmatrix}=c_1b_2-c_2b_1{/tex}

{tex}W_y = \begin{vmatrix} a_1 & c_1 \\ a_2 & c_2 \end{vmatrix}=a_1c_2-a_2c_1{/tex}.

Pamiętajmy, że przy rozwiązywaniu układów równań, możemy otrzymać jedno rozwiązanie (proste przecinają się w jednym punkcie), brak rozwiązań (proste są równoległe nie leżące na sobie) lub nieskończenie wiele rozwiązań (proste leżą na sobie).

Rozwiązaniem będzie jedna para w przypadku, gdy

{tex}W \not= 0{/tex},

i wyliczamy ją według wzorów:

{tex}x = \frac{W_x}{W}{/tex}

{tex}y = \frac{W_y}{W}{/tex}

brak rozwiązań,  w przypadku gdy

{tex}W=0{/tex}

i przynajmniej jeden z wyznaczników

{tex}W_x{/tex}, {tex}W_y{/tex}

jest różny od zera, i nieskończenie wiele rozwiązań, gdy wszystkie wyznaczniki są równe zero.

 

Prześledźmy przykład:

{tex}\left\{\begin{matrix} - x + y = 3 \\ 2 x + 2 y = 0 \end{matrix} \right.{/tex}

{tex}W = \begin{vmatrix} -1 & 1 \\ 2 & 1 \end{vmatrix}=-1\cdot 1 - 2 \cdot 1 = -3{/tex}

{tex}W_x =\begin{vmatrix} 3 & 1 \\ 0 & 1 \end{vmatrix}=3\cdot 1 - 0 \cdot 1 = 3{/tex}

{tex}W_y =\begin{vmatrix} -1 & 3 \\ 2 & 0 \end{vmatrix}=-1\cdot 0 - 2 \cdot 3 = -6{/tex}

{tex}x = \frac{W_x}{W} = \frac{3}{-3} = -1{/tex}

{tex}y = \frac{W_y}{W} = \frac{-6}{-3} = 2{/tex}.

Program:

#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main()
{
 
  float a1,a2,b1,b2,c1,c2,wx,wy,w,x,y;
 
  cout<<"Podaj a1: ";
  cin>>a1;
  cout<<"Podaj b1: ";
  cin>>b1;
  cout<<"Podaj c1: ";
  cin>>c1;
  cout<<"Podaj a2: ";
  cin>>a2;
  cout<<"Podaj b2: ";
  cin>>b2;
  cout<<"Podaj c2: ";
  cin>>c2;
 
  w = a1*b2 - b1*a2; //wyznacznik główny
  wx = c1*b2 - b1*c2;
  wy = a1*c2 - c1*a2;
 
  if(w!=0) //sprawdzamy, czy główny wyznacznik jest różny od zera
  {
    cout<<"x = "<<wx/w<<endl;
    cout<<"y = "<<wy/w<<endl;
  } 
  else // w tym miejscu sprawdzamy przypadek, gdy główny wyznacznik jest równy 0
    if(wx==0&&wy==0)
      cout<<"Uklad ma nieskonczenie wiele rozwiazan"<<endl;
    else
      cout<<"Uklad sprzeczny"<<endl;
 
  system("PAUSE");
  return 0;
}
 

 

powrót