Системы уравнений

реклама
Решение системы линейных уравнений
 
A x  b
a11 a12
0 a
22

0
0



0
0

a13
a23
a33

an 3
... a1n   x1   b1 





... a2 n   x2  b2 
... a 3n    x3   b3 
    
   
... ann   xn  bn 
Прямой ход
for i:=1 to n-1 do begin
v:=i;
{выбор ведущего элемента:}
for j:=i+1 to n do
if abs(A[j,i])>abs(A[v,i]) then v:=j;
if v<>i then {перестановка i–го уравнения с v–м}
for j:=i to n+1 do begin
z:=A[i,j]; A[i,j]:=A[v,j]; A[v,j]:=z
end;
for k:=i+1 to n do begin {вычитание уравнений}
c:=A[k,i]/A[i,i];
for j:=i to n+1 do
A[k,j]:=A[k,j]-c*A[i,j]
end
end;
______________________________________________________________________________________________________________________________
При j=i: A[k,i]=A[k,i]-(A[k,i]/A[i,i])*A[i,i]
Обратный ход
for i:=n downto 2 do
begin
for k:=1 to i-1 do {вычитание уравнений}
begin c:=A[k,i]/A[i,i];
A[k,n+1]:=A[k,n+1]-c*A[i,n+1];
A[k,i]:=0
end
end;
Вычисление неизвестных
for i:=1 to n do
X[i]:=A[i,n+1]/A[i,i];
Трудоемкость
T1(n) = (n – 1)·(n + 1) + (n – 2)·n + … + 1∙3 = (2n3 +3n2 – 5n)/6 ≈
n3/3
T2(n) = n + (n – 1) + … + 1 = n·(n + 1)/2 ≈ n2/2
Общее решение системы линейных
уравнений
1) система имеет единственное решение тогда и только тогда, когда
ранг r матрицы A равен n и «лишние» m – r уравнений
(если таковые есть) являются линейными комбинациями r
остальных уравнений. Тогда после преобразования матрицы A
к единичному виду:
x1 = b1, …, xn = bn;
2) система противоречива и не имеет ни одного решения, если
«лишние» m – r уравнений не являются линейными
комбинациями r остальных уравнений;
3) система имеет бесконечно много решений, если ранг r
матрицы A меньше n, и «лишние» m – r уравнений
являются линейными комбинациями r остальных уравнений:
x1 = b1 – a1,r + 1∙xr + 1 – … – a1,n∙xn ,
…,
xr = br – ar,r + 1∙xr + 1 – … – ar,n∙xn .
Общее решение системы линейных уравнений
Результат после прямого и обратного хода:
1
0


0
0


0
0
1

0
0

0





0 a1, r 1
0 a2, r 1


1 ar , r 1
0 0


 0 0
 a1, n 
 b1 
 a2, n 
 b2 
  x1   
 
 x2    
 ar , n       br 



 br 1 
 0
  xn    
 
b 
 0 
 m
Общее решение системы уравнений
for i:=1 to n do L[i]:=i;
______________________________________________________________________
i:=1;
if n<=m then r:=n else r:=m;
while i<=r do
begin
{выбор ведущего элемента A[v,u]}
if abs(A[v,u])<eps then r:=i-1
else begin {перестановка строк}
{перестановка столбцов}
{деление i-й строки на A[i,i]}
{вычитание уравнений}
i:=i+1
end
end;
выбор ведущего элемента A[v,u]
v:=i; u:=i;
for j:=i to m do
for k:=i to n do
if abs(A[j,k])>abs(A[v,u]) then
begin v:=j; u:=k end;
_______________________________________________________________________________________________________
перестановка
строк
if v<>i then {перестановка i-го уравнения с v-м}
for j:=i to n+1 do begin
z:=A[i,j]; A[i,j]:=A[v,j]; A[v,j]:=z
end;
перестановка столбцов
if u<>i then begin {перестановка i-го столбца с u-м}
for k:=1 to m do begin
z:=A[k,i]; A[k,i]:=A[k,u]; A[k,u]:=z
end;
p:=L[i]; L[i]:=L[u]; L[u]:=p
end;
_______________________________________________________________________________________________________
деление
i-й строки на
c:=A[i,i];
for j:=i to n+1 do
A[i,j]:=A[i,j]/c;
A[i,i]
вычитание уравнений
for k:=1 to m do
if k<>i then begin
c:=A[k,i];
for j:=i to n+1 do
A[k,j]:=A[k,j]-c*A[i,j]
end;
____________________________________________________________________
Общее решение системы уравнений:
X[L[r+1]], ..., X[L[n]] – независимые переменные;
зависимые переменные:
X[L[1]]=A[1,n+1]-A[1,r+1]*X[L[r+1]]- ...
- A[1,n]*X[L[n]]
...
X[L[r]]=A[r,n+1]-A[r,r+1]*X[L[r+1]]- ...
- A[r,n]*X[L[n]]
Трудоемкость при
m≥n
выбор ведущего элемента
T1(n,m) = m·n + (m – 1) ·(n – 1) + … + (m – n + 1)·1 =
= n2 + (n – 1)2 + … + 12 + (m – n)·n + … + (m – n)·1 ≈
≈ n3/3 + (m – n) n2/2 = m·n2/2 – n3/6
перестановка строк
T2(n) = (n + 1) + n + … + 2 = (n + 2)·(n + 1)/2 – 1 ≈ n2/2
перестановка столбцов
T3(n,m) = m·(n – 1)
деление i-й строки на A[i,i]
T4(n) = (n + 1) + n + … + 2 ≈ n2/2
вычитание уравнений
T5(n,m) = m·(n + 1) + m·n + … + m·2 + m·1 =
= m·(n + 1)·(n + 2)/2 ≈ m·n2/2
Общая трудоемкость
T1(n,m) ≈ m·n2 – n3/6
Вычисление определителя
i:=1; r:=n; p:=1;
while i<=r do begin
{выбор ведущего элемента A[v,i]}
if abs(A[v,i])<eps then r:=i-1
else begin
{перестановка строк}
{вычитание строк матрицы}
i:=i+1
end
end;
{вычисление определителя}
Вычисление определителя
выбор ведущего элемента A[v,i]
v:=i;
for j:=i+1 to n do
if abs(A[j,i])>abs(A[v,i]) then v:=j;
Трудоемкость: T1(n) = n + (n – 1) + … + 1 = n(n + 1)/2 ≈ n2/2
______________________________________________
перестановка строк
if v<>i then begin
p:=-p;
for j:=i to n do begin
z:=A[i,j]; A[i,j]:=A[v,j]; A[v,j]:=z
end
end;
Трудоемкость: T2(n) = n + (n – 1) + … + 1 = n(n + 1)/2 ≈ n2/2
Вычисление определителя
вычитание строк матрицы
for k:=i+1 to n do
begin
c:=A[k,i]/A[i,i];
for j:=i to n do
A[k,j]:=A[k,j]-c*A[i,j]
end;
T3(n) = (n – 1)n + (n – 2) (n – 1) + … + 1∙2 = (n3 – n)/3 ≈ n3/3
_______________________________________________
вычисление определителя
if r<n then X:=0
else begin
X:=p*A[1,1];
for i:=2 to n do X:=X*A[i,i]
end;
Вычисление обратной матрицы
A∙D = I,
(*)
где A – исходная квадратная матрица; D – обратная матрица;
I – единичная матрица.
A  D j  I j , j  1,..., n
где D – j–й столбец обратной матрицы;
j
I j – j–й столбец единичной матрицы.
__________________________________________________________
После приведения матрицы A к единичному виду:
I∙D = D
(**)
Вычисление обратной матрицы
for i:=1 to n do
for j:=1 to n do
if i=j then D[i,j]:=1
else D[i,j]:=0;
Трудоемкость: T1(n) = n2
_______________________________________________________________________
i:=1; r:=n;
while i<=r do begin
{выбор ведущего элемента A[v,i]}
if abs(A[v,i])<eps then r:=i-1;
else begin {перестановка строк}
{деление i-й строки на A[i,i]}
{вычитание уравнений}
i:=i+1
end
end;
Вычисление обратной матрицы
перестановка строк
if v<>i then begin
for j:=i to n do begin
z:=A[i,j]; A[i,j]:=A[v,j]; A[v,j]:=z
end;
for j:=1 to n do begin
z:=D[i,j]; D[i,j]:=D[v,j]; D[v,j]:=z
end
end;
Трудоемкость: T2(n) ≈ n2/2 + n2 = 3/2 n2
Вычисление обратной матрицы
деление i-й строки на A[i,i]
aii:= A[i,i];
for j:=i to n do
A[i,j]:=A[i,j]/aii;
for j:=1 to n do
D[i,j]:=D[i,j]/aii;
Трудоемкость: T3(n) ≈ n2/2 + n2 = 3/2 n2
Вычисление обратной матрицы
вычитание уравнений
for k:=1 to n do
if k<>i then begin
c:=A[k,i];
for j:=i to n do
A[k,j]:=A[k,j]-c*A[i,j];
for j:=1 to n do
D[k,j]:=D[k,j]-c*D[i,j]
end;
Трудоемкость: T3(n) ≈ n3/2 + n3 = 3/2 n3
Скачать