Řešení soustav lineárních rovnic -...
-
Upload
truongthuan -
Category
Documents
-
view
235 -
download
1
Transcript of Řešení soustav lineárních rovnic -...
Řešení soustav lineárních rovnic
Obsah
Řešení soustav lineárních rovnic
přímé metody
Gaussova eliminace
LU rozklad
iterační metody
prostá
Jacobiova
Gaussova-Seidelova
gradientní metody
největšího spádu
sdružených gradientů
2
Řešení soustav lineárních rovnic
• Úloha. Dána soustava rovnic ve tvaru Ax = b.
Určete neznámý vektor x.
• Řešitelnost.
Je li matice A regulární (det A různý od nuly), existuje jediné řešení. (podrobněji viz Skripta Matematika 1, Frobeniova věta)
3
Přímé a iterační metody
Přímé metody
• Za konečný počet kroků určíme přesné řešení (neuvažujeme li zaokrouhlovací chyby výpočtu)
• Příklady: – Gaussova eliminační metoda
– LU rozklad matice soustavy
Iterační metody• Volíme počáteční
aproximaci - vektor x(0) , a postupně vypočítáváme vektory x(1), x(2), … , které se od přesného řešení x* liší tím méně, čím více iteračních kroků provedeme
• Příklady:
• Maticové iterační metody– Prostá, Jacobiova, Gaussova-
Seidelova
• Gradientní metody– největšího spádu
– sdružených gradientů
4
Řešení soustav lineárních rovnicpřímé metody
Gaussova eliminační metoda.Ekvivalentními úpravami (násobení řádunenulovým číslem a přičítání k řádku násobkujiného řádku) převedeme soustavu rovnic naekvivalentní soustavu s trojúhelníkovou maticísoustavy (přímý chod).
Z poslední rovnice (ve které je pouze jednaneznámá) vypočítáme poslední neznámou,kterou dosadíme do zbývajících rovnic, takpokračujeme k první rovnici (zpětný chod).
5
Gaussova eliminační metoda - přímý chod
• Označíme A(0) (rozšířenou) matici soustavy - A (nebo A|b)• Krok 1: vytvoříme matici A(1)
– opíšeme první řádek matice A(0), – ke druhému, …, poslednímu řádku matice A(0) přičteme takové násobky prvního řádku, abychom v prvním
sloupci získali nulové prvky, tj. ke druhému řádku přičítáme (-a21)/a11 násobky 1.řádku, ke třetímu řádku přičítáme (-a31)/a11 násobky 1.řádku,…, k poslednímu (n-tému) řádku přičítáme (-an1)/a11 násobky 1.řádku.
– (V LU rozkladu(viz dále) budou právě tyto násobky s opačným znaménkem tvořit 1.sloupec matice L)
• Krok 2: vytvoříme matici A(2)
– Opíšeme první a druhý řádek matice A(1), – Ke třetímu ,…, poslednímu řádku přičteme takové násobky druhého řádku matice A(1), abychom ve druhém
sloupci získali nulové prvky tj. ke třetímu řádku přičítáme (-a32)/a22 násobky 2.řádku, ke čtvrtému řádku přičítáme (-a42)/a22 násobky 2.řádku,…, k poslednímu (n-tému) řádku přičítáme (-an2)/a22 násobky 2.řádku.
– (V LU rozkladu(viz dále) budou právě tyto násobky s opačným znaménkem tvořit 2.sloupec matice L)
• Krok i: vytvoříme matici A(i)
– Opíšeme první, druhý, …, i-tý řádek matice A(i-1),– Ke (i+1) ,…, poslednímu řádku matice A(i-1) přičteme takové násobky i-tého řádku matice A(i-1), abychom v
i-tém sloupci získali nulové prvky tj. k (i+1)-mu řádku přičítáme (-a i+1,i)/a ii násobky i.řádku, …, k poslednímu (n-tému) řádku přičítáme (-ani)/a ii násobky i.řádku.
• Krok poslední (n-1): vytvoříme matici A(n-1)
– Opíšeme první, druhý, …, (n-1) řádek matice A(n-2),– K poslednímu (n-tému) řádku přičteme takové násobky (n-1) řádku, abychom v (n-1) sloupci získaly nulové
prvky.
• Poznámka 1: stane li se, že v některém kroku (k) bude prvek a kk nulový, vyměníme řádek k s řádkem m, m>k. Podmínka , že matice A je regulární zaručuje, že je to možné.
• Poznámka 2: aby vliv zaokrouhlovacích chyb byl menší, je možné v každém kroku i nejprve vyměnit řádek i s takovým řádkem m (m > k), ve kterém je prvek a mi největší v absolutní hodnotě.
6
Gaussova eliminační metoda - zpětný chod
• Matice A(n-1), vytvořená přímým chodem vypadá:(horní index v závorce je pro připomenutí,na kterém kroku byl tento prvek vypočten)
Poslednímu řádku odpovídá tvar poslední rovnice : ann xn = bn
• Z poslední rovnice vypočteme poslední neznámouxn = bn / ann, kterou dosadíme do (všech) rovnic n-1…1
• Z předposlední rovnice, která po dosazení vypadá: an-1,n-1 xn-1+ an-1,n xn = bn-1
vypočítáme předposlední neznámou xn-1=(bn-1- an-1,nxn)/an-1,n-1…
• Ze třetí rovnice vypočteme x3 = (b3- a3,nxn- a3,n-1xn-1 - … -a3,4x4)/a3,3
• Z druhé rovnice vypočteme x2 = (b2- a2,nxn- a2,n-1xn-1 - … -a2,3x3)/a2,2
• Z první rovnice vypočteme x1 = (b1- a1,nxn- a1,n-1xn-1 - … -a1,2x2)/a1,1
)1()1()2()1(
)2(
1
)2()2()1(
)2()1(
)1()1()1()1(
)0()0()0()0(
000
00
00
0
,1
2223
111312
n
n
n
n
n
n
b
ba
baa
baaa
nn
n
n
n n
1n1 ,n
2 2
1 1
a
a
a
a
7
Gaussova eliminační metoda: soustava s třídiagonální maticí• Uvažujme soustavu rovnic:
Potom v každém kroku (i) přímého chodu přičítáme násobky řádku i pouze k jednomu řádku i+1.
Matice A(0)… A(n-1) můžeme zapisovat jako trojice vektorů u=(u1, u2,…,un-1) = (a12,a23,…,an-1,n), d=(d1,d2,…,dn) = (a11,a22,…,an,n), l=(l 1, l 2,…, l n-1) = (a21,a32,…,an,n-1)a vektoru pravé strany b=(b1,b2,…,bn)Úpravy přímého chodu (které mění pouze vektory d a b) lze zapsat:di=di+ui-1(- l i-1/di-1), bi=bi+bi-1(- l i-1/di-1),i=2,…,nZpětný chod je vyjádřen: xn=bn/dn, xi= (bi-ui xi+1) /di,i=n-1,…,1
6
5
4
3
2
1
6
5
4
3
2
1
6661
565551
454441
343331
232221
1211
0000
000
000
000
000
0000
b
b
b
b
b
b
x
x
x
x
x
x
aa
aaa
aaa
aaa
aaa
aa
8
Gaussova eliminační metodapříklady
• Příklad 1.Příklad 2.
1136 :rovnice první
,2 :rovnice druhá
,1 :rovnice posl.
:Zp.chod
00
10
1136
:)(*.2.3 :2Krok
0
10
1136
:)(*.1.3
)(*.1.2 :1Krok
:ozn.
2
3
1
123
122
136
38
32
61
61
61
61
38
32)2(
21
23
21
21
38
32)1(
63
62
)0(
xzyx
yzy
zz
řř
řř
řř
z
y
x
A
A
A2123
3122
1136
:chod Přímý
6
5
4
3
2
1
10
6
,
4
34
34
27
20
13
6
,
2
2
2
2
2
,
4
4
4
4
4
4
,
1
1
1
1
1
34
34
27
20
13
6
20000
2000
0200
000
000
0000
701434
41946
356
7100
70239
41140
1241
724
27
6
5
4
3
2
1
xbd
bldu
x
x
x
x
x
x
:chod Zpětný :chod Přímý
vektory Označíme
4
14
14
142
142
14
9
Gaussova eliminační metodaa LU rozklad matice
• V situaci, kdy je potřeba řešit několik (mnoho) soustav rovnic se stejnou maticí soustavy, ale různými pravými stranami, je vhodné jednou rozložit matici soustavy A na součin trojúhelníkových matic L a U, a potom pro každou pravou stranu řešit 2 soustavy rovnic s trojúhelníkovými maticemi (což je méně pracné):
Uy=b (tím aplikujeme úpravy přímého chodu na vektor b) a
Lx=y (odpovídá zpětnému chodu)
• Matice L slouží k „zapamatování“ úprav přímého chodu, U odpovídá matici A(n-1), která vzniká přímým chodem Gaussovy eliminační metody (za předpokladu, že jsme a) v kroku i přičítali násobky i-tého řádku (a ostatní řádky ničím nenásobili) a b) neměnili pořadí řádků matice). Horní index (i) označuje prvek matice, získaný v kroku i přímého chodu Gaussovy eliminace.
)1(
)2(
3
)2(
33
)1(
2
)1(
23
)1(
22
)0(
1
)0(
13
)0(
12
)0(
11
)2(
)2(
1
)1(
22
)1(
1
)0(
11
)0(
1
)1(
22
)1(
32
)0(
11
)0(
31
)0(
11
)0(
21
000
00
0
,
1
01
001
0001
n
nn
n
n
n
n
nn
n
nnna
aa
aaa
aaaa
U
a
a
a
a
a
a
a
a
a
a
a
a
L
10
LU rozklad matice - příklad• Příklad 3. Řešte soustavy rovnic Ax=b, Az=c užitím LU rozkladu
matice A.
• a)LU rozklad:
v prvním kroku násobíme přičítáme ke druhému řádku (-2/6)násobky prvního řádku a ke třetímu (-3/6) násobky prvního řádku(viz příklad 1), proto v prvním sloupci hledané matice L budou tyto násobky s opačným znaménkem;
ve druhém kroku přičítáme ke třetímu řádku (-1/2) násobky druhého řádku, proto ve druhém sloupci matice L bude tento násobek s opačným znaménkem.
Hledaná matice U odpovídá upravené matici soustavy.
28
24
45
,
2
3
1
,
123
122
136
cbA
61
32
21
63
62
00
10
136
,
1
01
001
UL
61
32
21
21
32
00
10
136
0
10
136
123
122
136-2/6-3/6-
-1/2
11
Řešení soustavy užitím LU rozkladu• b) pomocí matice L upravíme vektor pravé strany b (řešíme Ly=b)
a určíme neznámý vektor x (řešíme Ux=y )==>x3=1,x2=2,x1=-1
• c)stejným způsobem upravíme vektor c: řešíme Lw=c
a určíme neznámý vektor z: řešíme Uz=w ==>z3=6,z2=5,z1=4
1
2
1
1
00
10
136
6/1
3/8
1
2
3
1
1
01
001 1
2
361
38
3
2
1
61
32
3
2
1
3
2
1
21
63
62
x
x
xx
x
x
y
y
y
y
y
y
yUybL
4
5
61
9
45
00
10
136
1
9
45
28
24
45
1
01
001 1
2
33
2
1
61
32
3
2
1
3
2
1
21
63
62
z
z
zz
z
z
y
y
y
y
y
y
wUwcL
12
Některé operace s maticemi v MATLABu• Malá a velká písmena se rozlišují• Proměnné není potřeba deklarovat• Operace s maticemi (+,-, *,/,…) jsou DEFINOVÁNY• Zadání matice: po řádcích, prvky v řádku odděleny mezerou, řádky
odděleny středníkem: A=*a11 a12 a13; … a31 a32 a33+• Vektor řádek (tj. matice 1xn): b=(b1 b2 …bn)• Vektor sloupec(tj. matice nx1):c=(c1;c2; …cn)• Získat (změnit) prvek matice: z=A(1,2) … A(1,2)=4• Násobení matic(rozměry musí odpovídat!): d=A*c výsledný vektor
sloupec, f=A*b nelze, q=b*A výsledný vektor řádek• Transponování: b’ tedy f=A*b’ lze, výsledný vektor sloupec• Řešení soustavy Ax=b: x=A \ b• LU rozklad: [L U]=lu(A) (pozor, algoritmus je jiný---)• Určení determinantu matice: d=det(A)• Určení vlastních čísel matice: vl_cisla=eig(A)• Inverzní matice: Ainv=inv(A)
13
Kontrola výsledků v MATLABu(Gaussova eliminace, LU rozklad)
• A=[6 3 1; 2 2 1; 3 2 1] //zadat matici A
• b=[1; 3; 2] //zadat vektor b
• x_gauss=A\b //vypocet x Gauss.el.
• [L,U]=lu(A) //vytvoreni LU rozkladu
• b_upr=L\b //reseni Lb_upr=b
• x_LU=U\b_upr //reseni LU rozkladem
• b=[45; 24; 28] //zadani jine prave strany
• b_upr=L\b //reseni Lb_upr=b
• x_LU=U\b_upr //reseni LU rozkladem
14
Řešení soustav lineárních rovnicmaticové iterační metody
• Soustavu rovnic Ax=b převedeme na soustavu ve tvaru x=Ux+v
• Volíme x(0), počítáme x(1) = Ux(0)+v,
x(2) = Ux(1)+v,…x(k+1) = Ux(k)+v
• Způsob, jak vytvoříme matici U a vektor v je určen iterační metodou
• Aby posloupnost vektorů x(1),…,x(k) konvergovala k přesnému řešení, musí být splněny podmínky konvergence iterační metody
15
• Pojmy (A : čtvercová matice , prvky – reálná čísla)– ostře diagonálně dominantní matice (ODD)
po řádcích : když i = 1,…,n platí |aii|>| aij |, j =1,…,n, j≠ipo sloupcích: když i = 1,…,n platí |aii|>| aji |, j =1,…,n, j≠i
– A je ODD, když je ODD po řádcích nebo po sloupcích– symetrická matice
A=AT tj. aij=aji,i,j = 1,…,n– pozitivně definitní matice
jsou li všechny hlavní minory kladné – norma matice
• řádková ||A|| = max i | aij |, j =1,…,n• sloupcová ||A||1 = max j | aij |, i =1,…,n• Euklidovská ||A||1 =( | aij |2 ) 1/2 , i =1,…,n, j =1,…,n
– vlastní čísla matice – řešení charakteristické rovnice det(A-E)=0
– spektrální poloměr matice je největší z absolutních hodnot vlastních čísel tj. (A) = max i | i |
– absolutní hodnota komplexního čísla: z=a+ib, |z| = (a2+b2) 1/2
16
Příklady (vlastnosti matic)• Dány matice, vektor. Určete normy matic a vektoru, spektrální poloměr matic. Jsou
matice symetrické, pozitivně definitní, ostře diagonálně dominantní?
Normy
72.149.025.01||||,2.27.05.01||||,1}7.0,5.0,1max{||||
7.04.0...1.04.0||||
8.0}8.0,7.0,5.0{max||||8}5.1,2,8,4{max||||
8.0}8.0,7.0,5.0{max||||5.5}1,4,5,5.5{max||||
7.0
5.0
1
4.04.00
4.02.01.0
01.04.0
1000
0220
0050
5.0014
21
222
2
..3..2..1
1
||||||||
1
..3..2..1
||||||||
4
1
4
4
1
3
4
1
2
4
1
1
4
1
4
4
1
3
4
1
2
4
1
1
ccc
B
BA
BA
cBA
slslsl
aaaa
rrr
aaaa
i
i
i
i
i
i
i
i
j
j
j
j
j
j
j
j
7.251.25...114||A||
222
2
17
Příklady (vlastnosti matic)spektrální poloměr
symetrie
pozitivní definitnost
ostrá diagonální dominantnost
ODD není B(2.,3.sl.) nenísloupcích po 2.,3.ř.), ve(nesplněno nenířádcích po :B
ODD jeA jesloupcích po 3.ř.), ve(nesplněno nenířádcích po :A
definitní pozitivně je :minory :B
definitní pozitivně není počítat, nemusíme dál :minory :A
symetrická není B :(např.) symetrická neníA
0.5(B) :poloměr spektrální
5| |(A) :poloměr spektrální
01.0)det(,009.02.01.0
1.04.0,0
2050
14,0
4.04.0,1.01.0:,
5.04.03.0||||4.03.02
64.06.04.0
)25.06.0)(4.0()det(
)4.0(01.0)4.0(16.0)4.0)(2.0()4.0()det(
1,2,5,4)1)(2)(5)(4()det(
11
11
2112
23
323,21
2
2
4321
Bb
a
aa
ii
EB
EB
EA
18
Kontrola výsledků v MATLABu - vlastnosti matice• A=[0.4 -0.1 0; 0.1 0.2 0.4; 0 -0.4 0.4] //zadani matice A (3x3) po radcich
• vlastni_cisla=eig(A) //vektor vlastnich cisel
• rho=max(abs(vlastni_cisla)) //spektralni polomer
• isequal(A,A’) //vysledek: 1 - kdyz A je symetricka, 0 - neni
• A(1,1)>0 & det([A(1,1) A(1,2); A(2,1) A(2,2)])>0 & det(A)>0
//vysledek: 1 - kdyz A je pozitivne definitni, 0 – neni
//ODD
• D=abs(diag(A)) // D: vektor absolutnich hodnot A(i,i)
• [M,N]=size(A) //M:pocet radku, N: pocet sloupcu
• for(i=1:1:M) plati=D(i)>sum(abs(A(i,:)))-D(i); end
//plati je vektor z 0 a 1, 1- kdyz podminka splnena
• ODD=isequal(plati, ones) //vysledek: 1 – ODD po radcich, 0 neni
• for(i=1:1:M) plati=D(i)>sum(abs(A(:,i)))-D(i); end //overeni pro sloupce
• ODD=isequal(plati, ones) //vysledek: 1 – ODD po sloupcich, 0 neni
//normy
• norm(A) //vysledek: euklidovska norma
• norm(A,inf) //vysledek: radkova norma
• norm(A,1) //vysledek: sloupcova norma
//kořeny polynomu
• roots([aN … a2 a1 a0]) // určení kořenů aN xN+…a2x2+a1x+a0 = 019
Prostá iterační metoda• Výpočet: x(k+1) = Ux(k)+v (pro U,v musí platit v=Qb, U+QA=E)
• Podmínky konvergence:
– Postačující : existuje alespoň 1 norma matice U, která je menší než 1.
• Je-li splněna, lze odhadnout velikost chyby v kroku i:
• Případně lze určit počet iterací k, abychom získali řešení s chybou menší než :
– Nutná a postačující : spektrální poloměr matice U musí být
menší než 1 (spektrální poloměr je největší z absolutních hodnot vlastních
čísel matice).
||||||||1
||||||||||||
||||1
|||||||| )0()1()(*)1()()(* xx
U
Uxxxx
U
Uxx
iiiii
nebo
||||
||)||1(ln||||ln||||
||||1
||||||||
)0()1(
)0()1()(*
xx
UUkxx
U
Uxx
kk
20
Prostá iterační metoda-příklad
Dána soustava rovnic ve tvaru x=Ux+v, kde
a) Ověřte, že soustavu lze řešit prostou iterační metodou.
Existuje norma matice U, která je menší než 1 (např. řádková: ||U||=0.8), je splněna postačující podmínka konvergence.
b) Volte x(0)=(0,0,0)T a vypočtěte x(1) a x(2) prostou iterační metodou.
c) Odhadněte velikost chyby x(2).
d) Určete počet iterací potřebných k výpočtu x(k) s chybou < 0.1.
Je potřeba 23 iterací.
3
2
1
,
4.04.00
4.02.01.0
01.04.0
vU
4.3
7.3
2.1
3
2
1
3
2
1
4.04.00
4.02.01.0
01.04.0
3
2
1
3
2
1
0
0
0
4.04.00
4.02.01.0
01.04.0
)1()0(
)2()1(
vxUvxU
xx
,
4.67.12.0
8.0||||
4.0
7.1
2.0
8.01
8.0||||||||
||||1
|||||||| )2(*)2(*)1()2()2(*
xxxxxx
U
Uxx
45.223
02.0ln8.0ln
3
2.01.08.01.03.
8.01
8.01.0||||
||||1
||||1.0|||| )0()1()(*
kkxx
U
Uxx k
kkk
21
Kontrola v MATLABu - prostá iterační metoda
• U=[0.4 -0.1 0; 0.1 0.2 0.4; 0 -0.4 0.4] //zadani matice U (3x3) po radcich
• max(abs(eig(A)))<1 // overeni konvergence
• v=[1;2;3] // zadani vektoru – sloupce
• xk=[0;0;0] //zadani x0
////////////////// zpusob iterace po iteraci:
• x_k1=U*xk+v //zobrazi se vysledek dalsi iterace
• xk=x_k1; // strednik zpusobi nezobrazeni vysledku
• x_k1=U*xk+v //pocitame dalsi iteraci
• xk=x_k1; // … a tak dal…
////////////////// nebo pocitame urcity pocet iteraci:
• pocet_iteraci=5 //kolik iteraci chceme vypocitat
• for(i=1:1:pocet_iteraci) x_k1=U*xk+v; xk=x_k1;end //v xk bude posledni vypoctena
////// nebo pocitame dokud norma rozdilu 2 iteraci po sobe bude mensi nez cislo
• cislo = 0.001
• x_k1=U*xk+v
• while(norm(xk-x_k1)>cislo) xk=x_k1; xk_1=U*xk+v; end
22
Jacobiova metoda• Iterační matice UJ(formálně UJ =-D-1(L+U), vJ=D-1 b
kde D,U,L jsou matice
A=L+D+U
viz Gaussova – Seidelova metoda)
(aij jsou koeficienty původní matice soustavy A)
• Podmínky konvergence:
– Postačující :
• Matice A je ostře diagonálně dominantní
• existuje norma matice UJ, která je menší než 1
– Nutná a postačující :
• spektrální poloměr matice UJ musí být menší než 1
nn
n
J
nn
n
nn
n
nn
n
n
n
n
J
a
b
a
b
a
b
a
b
v
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
U
33
3
22
2
11
1
321
33
3
33
32
33
31
22
2
22
23
22
21
11
1
11
13
11
12
,
0
0
0
0
23
Jacobiova metoda - praktický výpočet
• Z první rovnice vyjádříme 1. neznámou
• Z druhé rovnice vyjádříme 2. neznámou
• Ze třetí rovnice vyjádříme 3. neznámou
…
• Postupně (v libovolném pořadí) vypočítáme nové, přesnější, hodnoty x(k+1). Do výrazů na pravé straně dosazujeme za x(k) hodnoty vypočítané na předcházejícím kroku.
• Určení spektrálního poloměru iterační matice UJ z matice soustavy A:
Vlastní čísla UJ matice určíme z rovnice:
k
nn
kk
n
nn
k
n
k
nn
kkk
k
nn
kkk
k
nn
kkk
xaxaxaba
x
xaxaxaba
x
xaxaxaba
x
xaxaxaba
x
111212111
)1(
12321313
33
)1(
3
13231212
22
)1(
2
13132121
11
)1(
1
1
1
1
1
0det
321
3333231
2232221
1131211
nnnnn
n
n
n
aaaa
aaaa
aaaa
aaaa
24
Jacobiova metoda - příklad
Dána soustava rovnic Ax=b, kde
a) Ověřte, že danou soustavu lze řešit Jacobiovou metodou.
b) Určete spektrální poloměr Jacobiovy matice.
c) Volte x(0)=(0,0,0)T a určete x(1) a x(2) Jacobiovou metodou.
a) Matice A je ostře diagonálně dominantní, je splněna postačující podmínka konvegrence Jacobiovy metody.
b) Vlastní čísla matice UJ určíme z výrazu
tedy (UJ)=0.5
6
1
1
,
420
142
014
bA
0
420
142
014
det
2
1,
2
1,00)14(1608864 321
23
25
Jacobiova metoda - příkladc) Z první rovnice vyjádříme x1, z druhé x2, ze třetí x3.
Při výpočtu první iterace x(1)=(x1(1), x2
(1), x3(1)) (levá strana)
dosadíme do výrazů na pravé straně hodnoty x(0)=(0,0,0).
Dostáváme x(1)=(1/4,-1/4,3/2)T.
Při výpočtu druhé iterace x(2)=(x1(2), x2
(2), x3(2)) (levá strana)
dosadíme do výrazů na pravé straně hodnoty x(1).
Dostáváme
23
312
21
264
1
214
1
14
1
xx
xxx
xx
8
13
4
126
4
1
4
3
2
3
4
121
4
1
16
5
4
11
4
1
)2(
)2(
)2(
3
2
1
x
x
x
26
Jacobiova metoda – kontrola v MATLABu
A=[4 1 0; 2 4 1; 0 2 4];
b=[1;-1;6];
x0=[0;0;0];
////vytvorime matici UJ a vektor vJ
U=triu(A,1); L=tril(A,-1); D=A-U-L;
UJ=inv(D)*(U+L)*(-1); vJ=inv(D)*b;
//// vypocet iteraci jako prostou iteracni metodou
x1=UJ*x0+vJ
X2=UJ*x1+vJ
///... a tak dale
rho=max(abs(eig(UJ))) //spektralni polomer UJ
////spektralni polomer UJ vypocitany z matice A
roots([64 0 -16 0 ]) //urceni korenu 64*x3-16x=0
rho=max(abs(roots ([64 0 -16 0 ]) ))
27
Gaussova-Seidelova metoda• Iterační matice UG=-(D+L)-1P (dokážeme se bez ní obejít!), vG=(D+L)-1b, kde
• Podmínky konvergence:
– Postačující :
• Matice A je ostře diagonálně dominantní
• Matice A je symetrická a zároveň pozitivně definitní
• existuje norma matice UG, která je menší než 1
– Nutná a postačující :
• spektrální poloměr matice UG musí být menší než 1
0
00
000
0000
,
000
000
000
000
,
0000
000
00
0
,,
321
3231
21
33
22
11
3
223
11312
3
2
1
321
3333231
2232221
1131211
nnnnn
n
n
n
nnnnnn
n
n
n
aaa
aa
a
L
a
a
a
a
Da
aa
aaa
U
b
b
b
b
b
aaaa
aaaa
aaaa
aaaa
A
28
Gaussova-Seidelova metoda - praktický výpočet
• Z první rovnice vyjádříme 1. neznámou
• Z druhé rovnice vyjádříme 2. neznámou
• Ze třetí rovnice vyjádříme 3. neznámou
…
• Postupně (v pořadí od x1 k xn) vypočítáme nové, přesnější, hodnoty x(k+1). Do výrazů na pravé straně dosazujeme za xi hodnoty vypočtené na tomto kroku (pokud jsou k dispozici) nebo na předcházejícím kroku, tj.
při výpočtu xi(k+1) dosadíme x1
(k+1) x2(k+1) …xi-1
(k+1) a xi+1(k) … xn
(k) .
• Určení spektrálního poloměru iterační matice UG z matice soustavy A:
Vlastní čísla UG matice určíme z rovnice:
1
111
1
212
1
111
)1(
1
1
232
1
1313
33
)1(
3
1323
1
1212
22
)1(
2
13132121
11
)1(
1
1
1
1
1
k
nn
kk
n
nn
k
n
k
nn
kkk
k
nn
kkk
k
nn
kkk
xaxaxaba
x
xaxaxaba
x
xaxaxaba
x
xaxaxaba
x
0det
321
3333231
2232221
1131211
nnnnn
n
n
n
aaaa
aaaa
aaaa
aaaa
29
Gaussova-Seidelova metoda – příkladDána soustava rovnic Ax=b, kde
a) Ověřte, že danou soustavu lze řešit Gaussovou-Seidelovou metodou.
b) Určete spektrální poloměr Gaussovy-Seidelovy matice.
c) Volte x(0)=(0,0,0)T a určete x(1) a x(2) Gaussovou-Seidelovou metodou.
a) Matice A je ostře diagonálně dominantní, je splněna postačující podmínka konvegrence Gaussovy-Seidelovy metody.
b) Vlastní čísla matice UG určíme z výrazu
tedy (UG)=0.25
6
1
1
,
420
142
014
bA
0
420
142
014
det
4
1,0,00)14(1608864 321
2223
30
Gaussova-Seidelova metoda – příkladc) Z první rovnice vyjádříme x1, z druhé x2, ze třetí x3.
Výpočet první iterace: Výpočet druhé iterace:
Změny vektoru x(0) na x(1) Změny vektoru x(1) na x(2)
2331221 264
1,21
4
1,1
4
1xxxxxxx
64
123
32
2726
4
1
32
27
16
27
32
1121
4
1
32
11
8
31
4
1
16
27
8
326
4
1
8
30
4
121
4
1
4
11
4
1
)(
)2(
3
),(
)2(
)(
)2(
)(
)1(
)0,(
)1(
)0(
)1(
3227
2
1627
33211
1
2
83
2
1
83
2
3
341
1
2
2
1
x
xx
x
x
xx
x
x
x
x
x
x
x
)1()0(
1627
83
41
0
83
41
0
0
41
0
0
0
xx
)2()1(
64123
3227
3211
1627
3227
3211
1627
83
3211
1627
83
41
xx
31
Gaussova-Seidelova metoda – kontrola v MATLABu
A=[4 1 0; 2 4 1; 0 2 4];
b=[1;-1;6];
x0=[0;0;0];
////vytvorime matici UGa vektor vG
U=triu(A,1); L=tril(A,-1); D=A-U-L;
UG=inv(D+L)*U*(-1); vG=inv(D+L)*b;
//// vypocet iteraci jako prostou iteracni metodou
x1=UG*x0+vG
X2=UG*x1+vG
///... a tak dale
rho=max(abs(eig(UJ))) //spektralni polomer UJ
////spektralni polomer UG vypocitany z matice A
roots([64 -16 0 0 ]) //urceni korenu 64*x3-16x2=0
rho=max(abs(roots ([64 -16 0 0 ]) ))
32
Řešení soustav lineárních rovnicgradientní metody
(Podle F.Bubeník, M.Pultar, I.Pultarová – Matematické vzorce a metody, Vydavatelství ČVUT, 2001)
• Metodu největšího spádu a metodu sdružených gradientů lze použít pro řešení soustav se symetrickou a pozitivně definitní maticí A. Řešení takové soustavy je jediným minimem kvadratické formy Q(x)=1/2xTAx-xTb. Volíme počáteční aproximaci x(0) . Aproximaci x(k+1) počítáme z aproximace x(k) přičtením (k) násobku vektoru p(k). Směr p(k) zvolíme a číslo (k)
vypočítáme tak, aby aproximace x(k+1) minimalizovala kvadratickou formu Q na přímce x= x(k) + p(k). Metody se liší podle volby směru p(k).
• Reziduum k-té aproximace je definováno vztahem r(k)=A x(k) – b
• x (k+1)= x(k) + p(k)
33
Metoda největšího spádu• Směr p(k) se volí jako směr gradientu funkce Q.
• Postačující podmínka konvergence : A je symetrická a pozitivně definitní.
Výpočet 1. a 2. aproximace podrobněji:
)(
)()(
)()()()1( k
kTk
kTkkk r
Arr
rrxx
)0()0()1(
)0()0(
)0()0(
)0()0()0()0(
)0()0(
)0(
rxx
Arr
rr
rArrr
bAxr
x
T
T
TT
číslo
součin a součin skal.
reziduum
:vypočteme
volíme
)1()1()2(
)1()1(
)1()1(
)1()1()1()1(
)1()1(
)1(
rxx
Arr
rr
rArrr
bAxr
x
T
T
TT
číslo
součin a součin skal.
reziduum
:vypočteme
máme
34
Metoda největšího spádu - příklad
Dána soustava rovnic Ax=b, kde
a) Ověřte, že danou soustavu lze řešit metodou největšího spádu.
b) Volte x(0)=(0,0,0)T a určete x(1) metodou největšího spádu.
a) Matice A je symetrická. Ověříme, zda je pozitivně definitní:
a11 = 2 > 0, 18-16=2>0, det A = 90+8+8-9-8-80 = 9 > 0.
Matice A je symetrická a pozitivně definitní, lze použít metodu největšího spádu.
b) Výpočet x(1) :
r(0)=Ax(0)-b= (1, 3, -4)T,
r(0)Tr(0)=1 1+3 3+(-4)(-4) = 26,
r(0)TAr(0) = (1, 3, -4)(2+12-4, 4+27-8, 1+6-20)T = (1, 3, -4)(10, 23, -13)T = 10+69+52=131,
= 26/131 ,
x(1) = x(0) - r(0) = -26/131 (1, 3, -4)T = (-0.198, -0.595, 0.794) T
35
4
3
1
,
521
294
142
bA
Metoda sdružených gradientů• Směry p(k) se získají A-ortogonalizací posloupnosti vektorů reziduí r(k) .
• Postačující podmínka konvergence : A je symetrická a pozitivně definitní.
Výpočet aproximací :
první aproximace – x(1) - analogicky metodě největšího spádu
druhá a další aproximace:
…
)()()()1( kkkk pxx
)0()0()0()1(
)0()0(
)0()0()0(
)0()0()0()0(
)0(
,
,
pxxApp
rr
rpbAxr
x
T
T
aproximaci číslo
směr reziduum :vypočteme
, volíme
36
)1()1()1()2(
)1()1(
)1()1()1(
)0()0()1()1(
)0()0(
)1()1()0(
)0()0()0()1(
,
,
,
pxx
App
rr
prp
rr
rr
Aprr
T
T
T
T
číslo
směr
číslo
reziduum
)1()1()1()2(
)1()1(
)1()1()1(
)()()1()1(
)()(
)1()1()(
)()()()1(
,
,
,
kkkk
kTk
kTkk
kkkk
kTk
kTkk
kkkk
pxx
App
rr
prp
rr
rr
Aprr
číslo
směr
číslo
reziduum