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:

$$\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;
}