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:
$$\left\{\begin{matrix}a_1 x + b_1 y = c_1 \\ a_2 x + b_2 y = c_2 \end{matrix} \right.$$
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:
$$W = \begin{vmatrix} a_1 & b_1 \\ a_2 & b_2 \end{vmatrix}=a_1b_2-a_2b_1$$,
i wyznaczniki Wx i Wy:
$$W_x = \begin{vmatrix} c_1 & b_1 \\ c_2 & b_2 \end{vmatrix}=c_1b_2-c_2b_1$$
$$W_y = \begin{vmatrix} a_1 & c_1 \\ a_2 & c_2 \end{vmatrix}=a_1c_2-a_2c_1$$.
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
$$W \not= 0$$,
i wyliczamy ją według wzorów:
$$x = \frac{W_x}{W}$$
$$y = \frac{W_y}{W}$$
brak rozwiązań, w przypadku gdy
$$W=0$$
i przynajmniej jeden z wyznaczników
$$W_x$$, $$W_y$$
jest różny od zera, i nieskończenie wiele rozwiązań, gdy wszystkie wyznaczniki są równe zero.
Prześledźmy przykład:
$$\left\{\begin{matrix} - x + y = 3 \\ 2 x + 2 y = 0 \end{matrix} \right.$$
$$W = \begin{vmatrix} -1 & 1 \\ 2 & 1 \end{vmatrix}=-1\cdot 1 - 2 \cdot 1 = -3$$
$$W_x =\begin{vmatrix} 3 & 1 \\ 0 & 1 \end{vmatrix}=3\cdot 1 - 0 \cdot 1 = 3$$
$$W_y =\begin{vmatrix} -1 & 3 \\ 2 & 0 \end{vmatrix}=-1\cdot 0 - 2 \cdot 3 = -6$$
$$x = \frac{W_x}{W} = \frac{3}{-3} = -1$$
$$y = \frac{W_y}{W} = \frac{-6}{-3} = 2$$.
Program:
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
double 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;
}