3D számítógépes geometria 2

Hasonló dokumentumok
Saj at ert ek-probl em ak febru ar 26.

Vektorok, mátrixok, lineáris egyenletrendszerek

Mátrixok 2017 Mátrixok

Saj at ert ek-probl em ak febru ar 22.

NUMERIKUS MÓDSZEREK I. BEUGRÓ KÉRDÉSEK

Numerikus módszerek beugró kérdések

alakú számot normalizált lebegőpontos számnak nevezik, ha ,, és. ( : mantissza, : mantissza hossza, : karakterisztika) Jelölés: Gépi számhalmaz:

Gauss-eliminációval, Cholesky felbontás, QR felbontás

Gauss-Seidel iteráció

NUMERIKUS MÓDSZEREK I. TÉTELEK

Kvadratikus alakok és euklideszi terek (előadásvázlat, október 5.) Maróti Miklós, Kátai-Urbán Kamilla

Numerikus módszerek 1.

Lineáris algebra 2. Filip Ferdinánd december 7. siva.banki.hu/jegyzetek

Matematika (mesterképzés)

2. előadás. Lineáris algebra numerikus módszerei. Mátrixok Mátrixműveletek Speciális mátrixok, vektorok Norma

Szinguláris érték felbontás Singular Value Decomposition

Diszkrét matematika I., 12. előadás Dr. Takách Géza NyME FMK Informatikai Intézet takach november 30.

LINEÁRIS ALGEBRA. matematika alapszak. Euklideszi terek. SZTE Bolyai Intézet, őszi félév. Euklideszi terek LINEÁRIS ALGEBRA 1 / 40

10. Előadás. Megyesi László: Lineáris algebra, oldal. 10. előadás Sajátérték, Kvadaratikus alak

Vektorterek. =a gyakorlatokon megoldásra ajánlott

Norma Determináns, inverz Kondíciószám Direkt és inverz hibák Lin. egyenletrendszerek A Gauss-módszer. Lineáris algebra numerikus módszerei

Tétel: Ha,, akkor az ábrázolt szám hibája:

1. Determinánsok. Oldjuk meg az alábbi kétismeretlenes, két egyenletet tartalmaz lineáris egyenletrendszert:

1. Az euklideszi terek geometriája

Ortogonalizáció. Wettl Ferenc Wettl Ferenc Ortogonalizáció / 41

6. gyakorlat. Gelle Kitti. Csendes Tibor Somogyi Viktor. London András. jegyzetei alapján

Feladat: megoldani az alábbi egyenletrendszert: A x = b,

Szinguláris értékek. Wettl Ferenc április 3. Wettl Ferenc Szinguláris értékek április 3. 1 / 28

Numerikus módszerek I. zárthelyi dolgozat (2017/18. I., A. csoport) Megoldások

Szinguláris értékek. Wettl Ferenc április 12. Wettl Ferenc Szinguláris értékek április / 35

Sajátértékek és sajátvektorok. mf1n1a06- mf1n2a06 Csabai István

A KroneckerCapelli-tételb l következik, hogy egy Bx = 0 homogén lineáris egyenletrendszernek

1 Lebegőpontos számábrázolás

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei

Gauss elimináció, LU felbontás

1. Mátrixösszeadás és skalárral szorzás

Matematika A2 vizsga mgeoldása június 4.

Numerikus matematika vizsga

Numerikus módszerek 1.

1. feladatsor Komplex számok

1. feladatsor: Vektorterek, lineáris kombináció, mátrixok, determináns (megoldás)

Feladatok a Gazdasági matematika II. tárgy gyakorlataihoz

Numerikus matematika. Irodalom: Stoyan Gisbert, Numerikus matematika mérnököknek és programozóknak, Typotex, Lebegőpontos számok

3. el adás: Determinánsok

Mer legesség. Wettl Ferenc Wettl Ferenc Mer legesség / 40

Numerikus módszerek 1.

Lineáris algebra. =0 iє{1,,n}

és n oszlopból áll, akkor m n-es mátrixról beszélünk. (Az oszlopok száma a mátrix vízszintes mérete, a sorok 2 3-as, a ij..

Numerikus módszerek 1.

Táblán. Numerikus módszerek 1. előadás (estis), 2017/2018 ősz. Lócsi Levente. Frissült: december 1.

Alkalmazott algebra - SVD

3. Lineáris egyenletrendszerek megoldása február 19.

Lineáris leképezések. Wettl Ferenc március 9. Wettl Ferenc Lineáris leképezések március 9. 1 / 31

Matematika elméleti összefoglaló

Bevezetés az algebrába 1

Numerikus Analízis I.

Mátrixok, mátrixműveletek

Mátrixfelbontások BSc szakdolgozat

Lineáris Algebra. Tartalomjegyzék. Pejó Balázs. 1. Peano-axiomák

12. előadás. Egyenletrendszerek, mátrixok. Dr. Szörényi Miklós, Dr. Kallós Gábor

Haladó lineáris algebra

1. A kétszer kettes determináns

Lineáris leképezések. 2. Lineáris-e az f : R 2 R 2 f(x, y) = (x + y, x 2 )

Lineáris egyenletrendszerek

9. Előadás. (9. előadás) Lineáris egyr.(3.), Sajátérték április / 35

9. gyakorlat Lineáris egyenletrendszerek megoldási módszerei folyt. Néhány kiegészítés a Gauss- és a Gauss Jordan-eliminációhoz

Numerikus Analízis. Király Balázs 2014.

1. Geometria a komplex számsíkon

Gyakorló feladatok. Agbeko Kwami Nutefe és Nagy Noémi

Testek. 16. Legyen z = 3 + 4i, w = 3 + i. Végezzük el az alábbi. a) (2 4), Z 5, b) (1, 0, 0, 1, 1) (1, 1, 1, 1, 0), Z 5 2.

Tartalomjegyzék. Bevezetés 17. I. A lineáris algebra forrásai Vektorok 29. A könyvben követett elvek 18 A könyv felépítése 21 Szoftverek 23

Lineáris leképezések (előadásvázlat, szeptember 28.) Maróti Miklós, Kátai-Urbán Kamilla

Gazdasági matematika II. tanmenet

Műveletek mátrixokkal. Kalkulus. 2018/2019 ősz

15. LINEÁRIS EGYENLETRENDSZEREK

Első zárthelyi dolgozat megoldásai biomatematikából * A verzió

Lineáris algebra Gyakorló feladatok

II. Két speciális Fibonacci sorozat, szinguláris elemek, természetes indexelés

Algoritmusok Tervezése. 1. Előadás MATLAB 1. Dr. Bécsi Tamás

Lineáris algebra numerikus módszerei

I. VEKTOROK, MÁTRIXOK

Matlab alapok. Baran Ágnes

Gyakorló feladatok I.

Determinánsok. A determináns fogalma olyan algebrai segédeszköz, amellyel. szolgáltat az előbbi kérdésekre, bár ez nem mindig hatékony.

Numerikus módszerek I. zárthelyi dolgozat, 2009/10. I. félév, A. csoport, MEGOLDÁSOK

7. gyakorlat megoldásai

Keresztmetszet másodrendű nyomatékainak meghatározása

i=1 λ iv i = 0 előállítása, melynél valamelyik λ i

1. Bázistranszformáció

Intergrált Intenzív Matematika Érettségi

Alkalmazott algebra - skalárszorzat

Lin.Alg.Zh.1 feladatok

Konjugált gradiens módszer

Problémás regressziók

Lineáris algebra és mátrixok alkalmazása a numerikus analízisben

41. Szimmetrikus mátrixok Cholesky-féle felbontása

NÉVMUTATÓ. Beke Manó, 17 Bellman, R., 310, 398 Bevilacqua, R., 93 Boros Tibor, 459, 464 Boullion, T. L., 109 Bunyakovszkij, V. J.

NUMERIKUS MÓDSZEREK PÉLDATÁR

1. Mit jelent az, hogy egy W R n részhalmaz altér?

Principal Component Analysis

Átírás:

3D számítógépes geometria 2 Lineáris algebra alapok Várady Tamás, Salvi Péter / BME September 6, 2018

Mátrixok típusai Mátrixműveletek Jellemző értékek A mátrix m n skalár érték: A = a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 m = 1 sorvektor, n = 1 oszlopvektor Julia: julia> a = [1 2 3; 4 5 6] 2x3 Array{Int64,2}: 1 2 3 4 5 6 Indexelés 1-től, pl. a[2,1] 4 Oszlopfolytonos (column-major) tárolás

Mátrixok típusai Mátrixműveletek Jellemző értékek GSL Külön struktúra és függvények vektorokra és mátrixokra Háttérben mindkettő mögött egy block struktúra (összefüggő memóriaterület) Egy blockra több nézet (view) készíthető Indexelés 0-tól, sorfolytonos (row-major) tárolás Kezelés: gsl_matrix *a = gsl_matrix_alloc(2, 3); gsl_matrix_set(a, 1, 2, x); y = gsl_matrix_get(a, 1, 2); gsl_matrix_free(a); vagy: gsl_matrix_view a = gsl_matrix_view_array(arr, 2, 3); Vektorokra hasonlóan (gsl_vector_... )

Mátrixok típusai Mátrixműveletek Jellemző értékek Eigen Template osztály: Matrix<típus, m, n, sorrend> Speciális méret a Dynamic, ha fordítási időben nem ismert Tárolási sorrend: ColMajor (default) / RowMajor Indexelés 0-tól Hasznos előre definiált típusok: Kezelés: typedef Matrix<double, Dynamic, Dynamic> MatrixXd; typedef Matrix<int, Dynamic, 1> VectorXi; hasonlóan (Vector Matrix)[1-4X][ifd] MatrixXd a(2,3); a < < 1, 2, 3, 4, 5, 6; a(1,2) = x; y = a(1,2);

Mátrixok típusai Mátrixműveletek Jellemző értékek Speciális mátrixok Négyzetes: m = n Szimmetrikus: a ij = a ji Átlós (diagonális): i j a ij = 0 Egység (identitás I ): a ij = δ ij Felső háromszög: i > j a ij = 0 Alsó háromszög: j > i a ij = 0 Sávos: i j > b a ij = 0 b a sávszélesség (bandwidth) b = 0: átlós mátrix b = 1: tridiagonális mátrix Ritka: a legtöbb elem 0 (más tárolás) a 11 a 12 a 13 a 14 a 15 a 21 a 22 a 23 a 24 a 25 a 31 a 32 a 33 a 34 a 35 a 41 a 42 a 43 a 44 a 45 a 51 a 52 a 53 a 54 a 55 Eigen: SparseMatrix osztály, GSL: gsl_spmatrix_* Julia: spzeros(m,n) / sparse(i,j,vals) [SparseArrays]

Mátrixok típusai Mátrixműveletek Jellemző értékek Elemenkénti műveletek Összeadás, kivonás Julia: +, - (és.+,.-) GSL: gsl_matrix_add(a, b), gsl_matrix_sub(a, b) Eigen: +, - Szorzás, osztás Julia:.*,./ GSL: gsl_matrix_mul_elements(a, b), gsl_matrix_div_elements(a, b) Eigen: nincs (ld. Array osztály) Műveletek skalárokkal Julia:.+,.-,.*,./ (és *, /) GSL: gsl_matrix_scale(a, x), gsl_matrix_add_constant(a, x) Eigen: *, / (összeadás/kivonás nincs, ld. Array osztály)

Mátrixok típusai Mátrixműveletek Jellemző értékek Szorzás C = AB esetén (A: m n, B: n l, C: m l) c ij = n k=1 a ik b kj [ 1 2 3 4 5 6 ] 7 8 9 = Asszociatív, disztributív, de nem kommutatív Simán elvégezve O(n 3 ), de lehet ügyesebben Strassen-algoritmus: O(n 2.8 ) 2 2-es mátrixok 7 műveletes szorzásával [ 1 7 + 2 8 + 3 9 4 7 + 5 8 + 6 9 Kicsit kevésbé stabil Van O(n 2.3 ) módszer is, de nagy konstans szorzóval [Kitérő: bignum szorzásra hasonló elvű a Karatsuba algoritmus, xy = (x 1 B + x 2 )(y 1 B + y 2 ) 3 szorzással, O(n 1.6 )] ]

Mátrixok típusai Mátrixműveletek Jellemző értékek Szorzás (folyt.) & permutáció Szorzás könyvtárakkal: Julia: * GSL: BLAS függvényekkel, pl. C = AB: gsl_blas_dgemm(cblasnotrans, CblasNoTrans, 1.0, &A.matrix, &B.matrix, 0.0, &C.matrix); Eigen: * Permutációs mátrix: egységmátrix felcserélt sorokkal Balról szorozva sorokat, jobbról szorozva oszlopokat cserél Pl. a 2. és 3. sorokat ill. oszlopokat felcserélve: 1 0 0 a b c d a b c d 0 0 1 k l m n = w x y z 0 1 0 w x y z k l m n [ a b c x y z ] 1 0 0 0 0 1 0 1 0 = [ a c b x z y ]

Mátrixok típusai Mátrixműveletek Jellemző értékek Egyéb műveletek Inverz (négyzetes, nemszinguláris [det(a) 0] mátrixokra) AA 1 = I (számítása nem triviális, ld. később) Transzponált: A T (átlóra tükrözött), Adjungált: A (konjugált transzponált) Julia: transpose(a) és adjoint(a) / a GSL: gsl_matrix_transpose(a) [négyzetes mátrixra], gsl_matrix_transpose_memcpy(b, a) Eigen: a.transpose() és a.adjoint() Nyom: az átlós elemek összege Julia: tr(a) [LinearAlgebra] Eigen: a.trace() Kiegészítés (augmentáció): egy mátrix melléhelyezése julia> [[1 2 3; 4 5 6] [7 8; 9 10]] 2x5 Array{Int64,2}: 1 2 3 7 8 4 5 6 9 10

Mátrixok típusai Mátrixműveletek Jellemző értékek Ritka mátrixok tárolása Célok: Kompakt tárolás Hatékony vektorral való szorzás Triviális módszer (i, j, aij ) hármasok tárolása C-ben érdemes három tömbbel Tárolandó még: Mátrix mérete (m, n) Nem 0 elemek száma (NNZ) Ax szorzat kiszámítása: y = zeros(m) for k = 1:nnz y[i[k]] += v[k] * x[j[k]] end

Mátrixok típusai Mátrixműveletek Jellemző értékek Ritka mátrixok tárolása Tömörített sortárolás (Compressed Row Storage, CRS) Példa: i helyett a sorok kezdőindexei + utolsó utáni index A = 0 a 1 0 0 a 2 0 a 3 a 4 0 a 5 0 a 6 0 a 7 a 8 a 9 Ax szorzat kiszámítása: row = 1, 2, 5, 7, 10 j = 2, 1, 3, 4, 2, 4, 2, 3, 4 v = a 1,..., a 9 y = zeros(m) for i = 1:m for k = row[i]:row[i+1]-1 y[i] += v[k] * x[j[k]] end end

Mátrixok típusai Mátrixműveletek Jellemző értékek Vektornormák p-norma (p 1): ( n ) 1/p x p = x i p i=1 Julia: norm(v, p) [LinearAlgebra] GSL: gsl_blas_dnrm2(v) [2-es norma] Eigen: v.lpnorm<p>() ill. v.norm() [2-es norma] Maximum norma: x = max 1 i n x i Julia: norm(v, Inf) Eigen: v.lpnorm<infinity>()

Mátrixok típusai Mátrixműveletek Jellemző értékek Mátrixnormák Frobenius norma: m n A f = a ij 2 i=1 j=1 Julia: norm(a) / norm(a, 2) [LinearAlgebra] Eigen: a.norm() Oszlopösszeg és sorösszeg normák: A 1 = max 1 j n m i=1 a ij, A = max 1 i m n a ij j=1 Julia: opnorm(a, 1) ill. opnorm(a, Inf) [LinearAlgebra] Eigen: a.lpnorm<1>() ill. a.lpnorm<infinity>()

Mátrixok típusai Mátrixműveletek Jellemző értékek Determináns Négyzetes mátrixra det(a) = A = σ S n sgn(σ) n i=1 a iσi Sn az {1... n} permutációinak halmaza sgn(σ) a permutáció előjele (páratlan inverziószámra negatív) Könyvtárakkal: Julia: det(a) [LinearAlgebra] GSL: gsl_linalg_lu_det(lu, permutation_signum) LU felbontás után hívható (ld. később) Eigen: a.determinant()

Gauss-elimináció LU-felbontás Iteratív módszerek Lináris egyenletrendszerek mátrix alakban Lineáris egyenletrendszer: a 11 x 1 + a 12 x 2 + + a 1n x n = b 1 a 21 x 1 + a 22 x 2 + + a 2n x n = b 2.. a m1 x 1 + a m2 x 2 + + a mn x n = b m Pl. egyenesek metszése, illesztés pontokra stb. Mátrix alak: Ax = b Homogén, ha b = 0 Megoldás: x = Ix = A 1 Ax = A 1 b

Gauss-elimináció LU-felbontás Iteratív módszerek Lináris egyenletrendszerek megoldása Ha m > n túlhatározott (pl. LSQ) Ha m < n alulhatározott (pl. optimalizálás) Megoldó módszerek (részleges lista): Cramer-szabály Determinánsok alapján (csak nagyon kis mátrixokra hatékony) Gauss-elimináció ld. később LU-felbontás ld. később Cholesky-felbontás ld. később QR-felbontás Felbontás egy ortogonális és egy felső háromszög mátrixra Megfelelő algoritmus a mátrix stuktúrája szerint julia> [-1 2; 3 2] \ [2; 18] 2-element Array{Float64,1}: 4.0 3.0 [ 1 2 3 2 ] [ x1 x 2 ] = [ 2 18 ]

Gauss-elimináció LU-felbontás Iteratív módszerek Nem négyzetes esetek Visszavezetjük a négyzetes esetre Túlhatározott: legkisebb négyzetes megoldás (LSQ) 2 m n Ax b 2 2 = a ij x j b i min i=1 j=1 Megoldandó: (A T A)x = A T b Geometriailag: R m -ben b vetítése A oszlopainak alterére Alulhatározott: legkisebb normájú megoldás x 2 min Megoldandó: (AA T )y = b, és ebből x = A T y Bizonyítás: (ˆx x) x könnyen belátható ˆx 2 = ˆx x + x 2 = ˆx x 2 + x 2 x 2 Geometriailag: R n -ben 0 vetítése a megoldások alterére

Gauss-elimináció LU-felbontás Iteratív módszerek Naív algoritmus Két lépés: elimináció + visszahelyettesítés i-edik elimináció eltünteti az i-edik oszlopot az i-edik sor alatt A j-edik sorból (j > i) levonjuk az i-edik sor aji /a ii -szeresét Az eredmény ilyen alakú lesz: a 11 x 1 + a 12 x 2 + + a 1n x n = b 1 a 22x 2 + + a 2nx n = b 2.. a nn (n 1) x n = b n (n 1) Ebből alulról felfele meghatározhatóak az x i értékek (visszahelyettesítés) Julia implementáció O(n 3 )

Gauss-elimináció LU-felbontás Iteratív módszerek Példa Elimináció 2x 1 4x 2 +x 3 = 12 x 1 +2x 2 3x 3 = 12 6x 1 4x 2 +5x 3 = 36 Első sor félszeresét (1/2) ill. háromszorosát (6/2) levonjuk: 2x 1 4x 2 +x 3 = 12 4x 2 3.5x 3 = 18 8x 2 +2x 3 = 0 Második sor kétszeresét (8/4) levonjuk: 2x 1 4x 2 +x 3 = 12 4x 2 3.5x 3 = 18 9x 3 = 36

Gauss-elimináció LU-felbontás Iteratív módszerek Példa Visszahelyettesítés 2x 1 4x 2 +x 3 = 12 4x 2 3.5x 3 = 18 9x 3 = 36 Az utolsó sor alapján Ekkor a második sor x 3 = 36/9 = 4 Végül az első sor 4x 2 3.5 4 = 18 x 2 = ( 18 + 14)/4 = 1 2x 1 4 ( 1) + 4 = 12 x 1 = (12 4 4)/2 = 2

Gauss-elimináció LU-felbontás Iteratív módszerek Pivotálás Mindig az a ii elemmel dolgoztunk Ha ez 0-közeli, akkor elszállhat Megoldás: megcseréljük a sorokat Mindig az oszlop legnagyobb abszolutértékű elemét vesszük (részleges pivotálás) pivot = findmax(abs.(ab[i:n,i]))[2] + i - 1 if pivot!= i ab[[i,pivot],:] = ab[[pivot,i],:] end Lehet oszlopok és sorok szerint nézni (teljes pivotálás) De ritkán éri meg

Gauss-elimináció LU-felbontás Iteratív módszerek Példa részleges pivotálás 2x 2+3x 3 = 8 4x 1+6x 2+7x 3 = 3 2x 1 3x 2+6x 3 = 5 Az első oszlopban a maximum a második sorban levő 4 4x 1+6x 2 +7x 3 = 3 2x 2 +3x 3 = 8 6x 2+2.5x 3 = 6.5 A második oszlopban a maximum a harmadik sorban levő -6 4x 1+6x 2 +7x 3 = 3 6x 2+2.5x 3 = 6.5 3 5 6 x3 = 10 1 6

Gauss-elimináció LU-felbontás Iteratív módszerek Egyéb felhasználás Determináns számítás Háromszögmátrixnál az átlós elemek szorzata Sorok egymáshoz adása nem változtatja meg Használjuk a Gauss-eliminációból kapott háromszöget! Pivotálásnál a cserék paritása szerint változik az előjel Inverz számítás D = a 11 a 22 a nn (n 1) ( 1) p b vektor helyett az I oszlopaira oldjuk meg (AA 1 = I ) LU-felbontással egyszerűbb lesz Julia: inv(a), Eigen: a.inverse(), GSL: gsl_linalg_lu_invert(lu, permutation, inv) Sávos mátrixoknál egyszerűsödik az algoritmus Tridiagonális különösen gyakori és egyszerű

Gauss-elimináció LU-felbontás Iteratív módszerek Ismételt megoldás Ha több b-re kell megoldani ugyanazt a rendszert Pl. görbeillesztésnél ugyanazt kell megoldani x, y, z-re A = LU L alsó háromszög (átlóban 1-esekkel), U felső háromszög Szokás egy mátrixban tárolni Ax = LUx = b megoldandó Ld = b, majd Ux = d Az U ugyanaz, amit a Gauss-elimináció ad Az L elemei az elimináció a ji /a ii szorzói Pivotálás itt is kell Ha a permutációs mátrix P: PA = LU Ld = Pb Ux = d

Gauss-elimináció LU-felbontás Iteratív módszerek LU a gyakorlatban Julia: lu(a) [LinearAlgebra] Visszatérési érték: L, U, permutáció (pl. [3,1,2]) Megoldáshoz a \-t érdemes használni GSL: gsl_linalg_lu_decomp(a, permutation, signum) PA = LU, signum -1 vagy 1 (cserék paritása alapján) Ezután gsl_linalg_lu_solve(lu, permutation, b, x) Vagy: gsl_linalg_lu_svx(lu, permutation, bx) (bx egyben bemeneti (b) és kimeneti (x) változó) Eigen: a.fullpivlu() Visszatérési érték egy FullPivLu objektum Ennek van egy solve(b) függvénye

Gauss-elimináció LU-felbontás Iteratív módszerek Cholesky-felbontás & kondíciószám Cholesky-felbontás: Speciális LU-felbontás szimmetrikus poz. definit mátrixokra Pozitív definit: z 0 : z T Az > 0 ( sajátértékek pozítívak) Pl. A T A, ha A oszlopai lin. függetlenek ( pl. LSQ) A = U T U U T d = b és Ux = d U nagyon könnyen számolható: i 1 u ii = aii uki 2, u ij = a ij i 1 k=1 u kiu kj u ii k=1 Kondíciószám: A A 1 (mindig 1) [konkrét érték függ a norma típustól] A megoldás normájának relatív hibája arányos a kondíciószámmal: x / x Cond(A) A / A Pl. A t jegyig pontos és Cond(A) 10 c x kb. 10 c t jegyig

Gauss-elimináció LU-felbontás Iteratív módszerek Gauss-Seidel iteráció Közelítő megoldás keresése finomítással (O(n 2 ) / iteráció) Kezdőértékek kellenek (pl. xi 0 = 0) Mindig a legfrisebb értékeket használja: xi k = 1 i 1 n b i a ij xj k a ij x k 1 j a ii j=1 j=i+1 Jacobi-iteráció: mindig az előző iteráció értékeit használja: x k i = 1 b i a ij x k 1 j a ii j i A Gauss-Seidel általában hatékonyabb Elégséges konvergencia-feltétel: diagonális dominancia a ii > j i a ij

Gauss-elimináció LU-felbontás Iteratív módszerek Példa Gauss-Seidel iteráció 3x 1 0.1x 2 0.2x 3 = 7.85 0.1x 1 +7x 2 0.3x 3 = 19.3 0.3x 1 0.2x 2 +10x 3 = 71.4 A pontos megoldás x 1 = 3, x 2 = 2.5, x 3 = 7. Legyenek a kezdőértékek 0-k. Ekkor x (1) 1 = (7.85 + 0.1 0 + 0.2 0)/3 = 2.617 x (1) 2 = ( 19.3 0.1 2.617 + 0.3 0)/7 = 2.795 x (1) 3 = (71.4 0.3 2.617 + 0.2 ( 2.795))/10 = 7.006 x (2) 1 = (7.85 + 0.1 ( 2.795) + 0.2 7.006)/3 = 2.991 x (2) 2 = ( 19.3 0.1 2.991 + 0.3 7.006)/7 = 2.5 x (2) 3 = (71.4 0.3 2.991 + 0.2 ( 2.5))/10 = 7 x (3) 1 = (7.85 + 0.1 ( 2.5) + 0.2 7)/3 = 3

Gauss-elimináció LU-felbontás Iteratív módszerek Relaxáció Az új értékeket összesúlyozzuk a régikkel x new i Alulrelaxálás: 0 < λ < 1 = λx new i Még nem konvergáló rendszernél Oszcillálás csökkentésére Túlrelaxálás: 1 < λ < 2 Már konvergáló rendszernél gyorsít Successive Over-Relaxation (SOR) A λ beállítása nagyon feladatfüggő Csak λ (0, 2) értékekre konvergál + (1 λ)x old i

Gauss-elimináció LU-felbontás Iteratív módszerek x k+1 = x k + α k p k Konjugált gradiens Ritka mátrixú egyenletrendszerek megoldására A mátrix csak vektorral való szorzásban (ritkára gyors) De csak szimmetrikus pozitív definit mátrixokra Elv: f (x) = 1 2 x T Ax x T b min f = Ax b = 0 A k-adik iterációban p k keresőirány (konjugált az előzőekre) u és v konjugált A-ra nézve, ha u T Av = 0 Keressük αk -t, hogy f (x k + α k p k ) min A minimumban p k merőleges f -re, ezt meg akarjuk tartani rk = b Ax k az x k approximáció hibavektora (reziduálisa) r 0 = p 0 = b Ax 0 α k = r T k r k /(p T k Ap k ) r k+1 = r k α k Ap k β k = r T k+1r k+1 /(r T k r k ) p k+1 = r k+1 + β k p k

Gauss-elimináció LU-felbontás Iteratív módszerek Bikonjugált gradiens Tetszőleges mátrixra működik (nem csak szimm. poz. def.) Hasonló, de A T alapú egyenletekkel kiegészített Négy vektormennyiség: r k, r k, p k, p k r0 = r 0 = p 0 = p 0 = b Ax 0 Iterációnként: x k+1 = x k + α k p k α k = r T k r k/( p T k Ap k) r k+1 = r k α k Ap k r k+1 = r k α k A T p k β k = r k+1 T r k+1/( r k T r k) p k+1 = r k+1 + β k p k p k+1 = r k+1 + β k p k

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Definíciók A négyzetes mátrix; Av = λv esetén λ sajátérték v a λ-hoz tartozó (jobboldali) sajátvektor [konstansszoros is] Az (A λi )x = 0 egyenlet nem triviális megoldását keressük A λi = 0 Karakterisztikus polinom gyökei a sajátértékek [ ] 10 5 5 10 10 λ 5 5 10 λ = λ2 20λ + 75 λ 1,2 = 20 ± { 20 2 4 75 λ 1 = 15 = 2 λ 2 = 5 Ez általában nem egy jó módszer a sajátértékek keresésére

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Definíciók Ermitikus (Hermite-)mátrix: A = A (konjugált transzponált), azaz a ij = a ji (komplex konjugált) minden sajátérték valós Speciális eset: valós szimmetrikus mátrix Ortogonális mátrix: A T = A 1 Unitér mátrix: A = A 1 Speciális eset: valós ortogonális mátrix Normál mátrix: AA = A A (ermitikus/unitér normál) A sajátvektorok ortogonálisak és kifeszítik a teret Azonos sajátértékeknél nem feltétlenül, de található ilyen Gram Schmidt ortogonalizáció Megoldás könyvtárakkal: Julia: eigen(a) [LinearAlgebra], Eigen: a.eigenvalues() GSL: gsl_eigen_symm(a, eigen, w) + gsl_eigen_symm_alloc(n) / gsl_eigen_symm_free(w) Sajátvektorokra gsl_eigen_symmv*

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Hatvány-iteráció Közelítő algoritmus a legnagyobb sajátértékre Ha a legkisebb kell, az inverz mátrixra végezzük (1/λ sajátértékei vannak) Kell egy kezdőérték a v-nek (pl. csupa 1, vagy random) Ez alapján kiszámoljuk a jobboldalt és normalizáljuk (úgy, hogy a max. érték 1 legyen) Megszorozzuk ezzel a mátrixot, tehát mindig v k+1 = Av k 40 20 0 1 20 1 20 40 20 1 = 0 20 0 0 20 40 1 20 1 40 20 0 20 40 20 0 20 40 1 0 1 = 40 40 40 40 1 1 1

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Hatvány-iteráció 40 20 0 20 40 20 0 20 40 40 20 0 20 40 20 0 20 40 40 20 0 20 40 20 0 20 40 1 1 1 0.714 1 0.714 0.75 1 0.75 = = = 60 80 60 50 70 50 48.517 68.517 48.517 Valódi megoldás: λ = 68.284 és v = 80 70 0.75 1 0.75 0.714 1 0.714 68.517 [ ] 2 2 1 2 2 0.708 1 0.708

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás A megoldás elve Átlós mátrix sajátértékei az átlóban vannak: a 11 λ 0 det(a λi ) =....... = (a 11 λ) (a nn λ) 0 a nn λ Alsó/felső háromszögnél szintén Hasonlósági transzformáció: A Z 1 A Z Nem változtatja meg a sajátértékeket Cél: átlós alakra hozni (Z-ben lesznek a sajátvektorok) pl. Jacobi és Householder transzformációk Ha csak sajátértékek kellenek, elég az alsó/felső háromszög QR-felbontás A (k+1) = RQ = Q T A (k) Q felső háromszög

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Jacobi-transzformáció Forgatási mátrixokkal (forgatás/tükrözés numerikusan stabil) 1... 1 cos φ sin φ 1 P pq =... 1 sin φ cos φ 1... 1

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Jacobi-transzformáció Csak néhány sor/oszlop változik (c = cos φ, s = sin φ): a rp = ca rp sa rq, r / {p, q} a rq = ca rq + sa rp, r / {p, q} a pp = c 2 a pp + s 2 a qq 2sca pq a qq = s 2 a pp + c 2 a qq + 2sca pq a pq = (c 2 s 2 )a pq + sc(a pp a qq ) Az átlón kívüli elemeket tudjuk törölni: a pq = 0-hoz θ = cot 2φ = c2 s 2 2sc = a qq a pp 2a pq

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Jacobi-transzformáció A t = tan φ = s/c jelölés bevezetésével t 2 + 2tθ 1 = 0 Az (abszolutértékben) kisebb gyök kell t = sgn(θ) θ + θ 2 + 1 Ha θ túl nagy (θ 2 túlcsordul), akkor legyen t = 1/(2θ) Ebből pedig c = 1/ t 2 + 1 s = tc Konvergens ( r s a rs 2 monoton csökken)

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Jacobi-transzformáció Milyen sorrendben elimináljuk az elemeket? Eredeti algoritmus (1846): mindig a legnagyobbat Kézi számoláshoz jó A keresés O(n 2 ), míg maga a forgatás O(n) Szisztematikus, ciklikus bejárás Pl. P 12, P 13,..., P 1n, P 23, P 24,... Javítások: Az első három bejárásnál csak egy ɛ feletti elemeket eliminál ɛ = r<s a rs /(5n 2 ) Utána ha apq min( a pp, a qq ) forgatás nélkül a pq = 0

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Householder-transzformáció Tridiagonális alakra hoz n 2 ortogonális transzformációval Householder mátrix: P = I 2w w T (w valós egységvektor) Ortogonális, mivel szimmetrikus és P 2 = I Alternatív felírás: P = I u u T /H, ahol H = u 2 /2, u tetsz. Ha u = x x e 1, akkor Px = ± x e 1 Lépések: e 1 az első bázisvektor: [1, 0,..., 0] T P töröl minden elemet, kivéve az elsőt 1. Az A első oszlopának alsó n 1 eleme alapján P n 1 2. Ezt kiegészítjük egy egységmátrix-darabbal n n-esre 3. Elimináljuk az első sor/oszlop n 2 elemét 4. Az A második oszlopának alsó n 2 eleme alapján P n 2 5. Ezt kiegészítjük egy egységmátrix-darabbal n n-esre 6. stb.

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Householder-transzformáció Példa P 3 = A = 1/3 2/3 2/3 2/3 2/3 1/3 2/3 1/3 2/3 A 1 = Q 1 AQ 1 = 4 1 2 2 1 2 0 1 2 0 3 2 2 1 2 1, Q 1 = 1 0 0 0 0 1/3 2/3 2/3 0 2/3 2/3 1/3 0 2/3 1/3 2/3 4 3 0 0 3 10/3 1 4/3 0 1 5/3 4/3 0 4/3 4/3 1

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Householder-transzformáció Példa P 2 = A 1 = [ 3/5 4/5 4/5 3/5 A 2 = Q 2 A 1 Q 2 = 4 3 0 0 3 10/3 1 4/3 0 1 5/3 4/3 0 4/3 4/3 1 ], Q 2 = 1 0 0 0 0 1 0 0 0 0 3/5 4/5 0 0 4/5 3/5 4 3 0 0 3 10/3 5/3 0 0 5/3 33/25 68/75 0 0 68/75 149/75

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Householder-transzformáció Az A = Q A Q szorzás elvégzése helyett legyen p = (Au)/H K = (u T p)/(2h) q = p Ku Ekkor A = A qu T uq T, ami hatékonyabban számolható Érdemes a transzformációt megcsinálni a QR használata előtt, sokkal gyorsabb lesz, iterációnként O(n 3 ) helyett O(n) pl. Eigen: a.fullpivhouseholderqr()

Egyszerű algoritmus Diagonalizáció Szinguláris felbontás Szinguláris érték szerinti felbontás (SVD) A sajátérték fogalmának bővítése tetszőleges alakú mátrixokra A = UΣV U és V unitér mátrixok (U = U 1 ), méretük m m ill. n n U az AA, V az A A sajátvektoraiból áll Σ egy m n átlós mátrix nemnegatív valós értékekkel szinguláris értékek az AA (és A A) sajátértékei V oszlopai a hozzájuk tartozó (jobboldali) szinguláris vektorok Kiszámítás: Bidiagonális alakra hozzuk A-t, majd iteratív algoritmus... Julia: svd(a) [LinearAlgebra] GSL: gsl_linalg_sv_decomp(a, V, S, work) [A U] Eigen: a.jacobisvd() / a.bdcsvd() Felhasználás: LSQ illesztés, pszeudoinverz, főkomponens-analízis, tömörítés... Eckart Young-tétel: U ˆΣV a legjobb k-adrangú közelítés, ahol ˆΣ = Σ, de ˆΣ ii = 0 minden i > k-ra