Jacobi-módszer
A Jacobi-módszer (vagy Jacobi-féle sajátértékmódszer) néven ismert eljárás olyan iteratív módszer, amely kis méretű (n<10) szimmetrikus valós mátrixok sajátértékeinek és sajátvektorainak a meghatározására használható. Ezen módszer célja a mátrix főátlón kívüli elemeinek iteratív eljárással történő kinullázása. A Jacobi-módszer esetén az iterációs lépéseket addig ismételjük, míg egy általunk meghatározott pontosságig az ismeretleneket meg nem határozzuk. Ez azt fogja jelenteni, hogy akkor állunk meg a lépesekkel, mikor már két egymás utáni lépésben kapott ismeretlen értékek különbsége kisebb egy általunk meghatározott értéknél.
Nevét Carl Gustav Jacob Jacobiról kapta, aki először 1846-ban publikálta,[1] de csak az 1950-es években vált elterjedtté a számítógépek fejlődése miatt.[2]
A Jacobi-módszer esetében az iterációs képlet a következő lesz:
Ahhoz, hogy könnyebben megérthessük a módszer elvét, tekintsünk egy példát:
Hogy jobban áttekinthető legyen, átírhatjuk egyenletek formájába, amely így nézhet ki:
Innen kifejezhető az x1 és x2 ismeretlen, így a következő egyenleteket kapjuk:
,
Az így kapott egyenletrendszert úgy oldhatjuk meg, hogy kezdetben kiindulunk az , illetve az legjobb becslésünkből, vagy az egyszerűség kedvéért indulhatunk 0-ból is. Ezután felhasználva az
,
lépéseket, eljuthatunk egy jobb közelítő értékig. Ezt addig alkalmazzuk, amíg az ismeretleneket tetszőleges pontossággal meg nem határozzuk.
Leírás
[szerkesztés]Az olyan transzformációt, ahol egy mátrixszal jobbról és az inverzével balról szorzunk egy mátrixot, hasonlósági transzformációnak nevezzük. A karakterisztikus egyenletet felírva belátható, hogy a hasonlósági transzformáció nem változtatja meg a sajátértékeket. Valós és szimmetrikus mátrixok esetén , vagyis a hasonlósági transzformáció ortogonális transzformáció is egyben. Ezen az összefüggésen alapul a következőkben ismertetett módszer is. Vagyis a megfelelően megválasztott transzformációval a mátrixot diagonalizáljuk. Mivel a sajátvektorok maguk is valósak és ortogonálisak, az szimmetrikus mátrix diagonalizálása megoldható az ortogonális hasonlósági transzformáció segítségével, azaz
Vegyük példaként a típusú mátrix esetét. Ekkor a transzformációhoz használjuk a
síkforgatást leíró mátrixot, ahol a forgatás szöge. Ha felírjuk ezzel az szimmetria transzformációt, a transzformálás után az mátrix elemei
lesznek. Ha a nem átlós és elemeket 0-vá alakítjuk, az elforgatási szögre a következő egyenletet kapjuk:
melynek alapján
Innen megkaphatjuk a és függvényeket, melyekkel felépítjük a forgatásmátrixot. Az így kapott mátrix diagonális, tehát az átlóban található együtthatók a sajátértékek, míg az forgatásmátrix két oszlopa a sajátértékeknek megfelelő két sajátvektor:
Általános eset
[szerkesztés]A következőkben nézzük meg, hogy miként működik ez a módszer általános esetben méretű mátrixok esetén. A sík-forgatás mátrixunk az egységmátrixtól csak az elemekben tér el, vagyis
Ezt felhasználva az
ortogonális hasonlósági transzformációval nullákat viszünk be az és elemek helyére. A szorzás elvégzése után az
mátrixelemeket kapjuk eredményül. Ezek közül megköveteljük, hogy az , illetve az elemek 0-ák legyenek. Ekkor a
egyenlethez jutunk, melyet megoldva a forgatás szöge
lesz.
Meg kell jegyeznünk, hogy amikor egy másik elemet nullázunk ki a következő lépésben, akkor az előzőekben kinullázott elem elromlik. Viszont belátható, hogy bizonyos feltételek mellett az átlón kívüli elemek négyzetösszege egy lépésben -tel csökken, vagyis monoton módon tart 0-hoz.
-lel jelölve az . transzformáció utáni mátrixot, a transzformáció-sorozatot a következőképpen írhatjuk:
ahol -el valamely nem-átlós elemre alkalmazott transzformációt jelöltük. Képezzük a transzformációs mátrixok
szorzatát. Ha végtelen sok transzformációt végzünk, akkor
lesz. Ez azt jelenti, hogy ha ezeket a transzformációkat egymás után alkalmazzuk, akkor a mátrix diagonalizálódik, és az átlóban a sajátértékeket kapjuk. A sajátvektorok pedig a transzformációk szorzatmátrixának oszlopaiban lesznek.
A módszer konvergenciáját a feltétel tiszteletben tartása biztosítja, ami egy forgatásnak felel meg. Ezt úgy tudjuk biztosítani, hogy a két gyök közül a "+" előjelest választjuk, amennyiben és a "−" előjelest az ellenkező esetben. Ezt úgy tudjuk legkönnyebben megvalósítani, hogy a szöget a következőképpen számoljuk:
Algoritmus
[szerkesztés]A leírt módszer a következő algoritmus segítségével alkalmazható számítógépre:
from __future__ import division
import math
dim=4
def Jacobi(a,imax,epsilon,x,l):
for i in range(dim):
for j in range(dim):
x[i][j]=0
x[i][i]=1
l[i]=a[i][i]
for it in range (imax):
amax=0
for j in range(1,dim,1):
for i in range (j):
a[i][i]=l[i]
a[j][j]=l[j]
a[j][i]=math.fabs(a[j][i])
if amax<a[j][i]:
amax=a[j][i]
if a[j][i]>epsilon:
tmp=(a[i][i]-a[j][j])/(2*a[j][i])
t=1/(math.fabs(tmp)+math.sqrt(1+tmp*tmp))
if tmp<0:
t=-t
c=1.0/(math.sqrt(1+t*t))
s=c*t
for k in range(i):
temp=a[i][k]*c+a[j][k]*s
a[j][k]=a[j][k]*c-a[i][k]*s
a[i][k]=temp
for k in range(i+1,j,1):
temp=a[k][i]*c+a[j][k]*s
a[j][k]=a[j][k]*c-a[k][i]*s
a[k][i]=temp
for k in range(j+1,dim,1):
temp=a[k][i]*c+a[k][j]*s
a[k][j]=a[k][j]*c-a[k][i]*s
a[k][i]=temp
for k in range (dim):
temp=x[k][i]*c+x[k][j]*s
x[k][j]=x[k][j]*c-x[k][i]*s
x[k][i]=temp
tmp=2*s*c*a[j][i]
l[i]=a[i][i]*c*c+a[j][j]*s*s+tmp
l[j]=a[i][i]*s*s+a[j][j]*c*c-tmp
a[j][i]=0
if amax<=epsilon:
return 0
return 666
a=[
[3,0,2,1],
[0,1,3,4],
[2,3,2,1],
[1,4,1,5]
]
x=[
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]
]
l=[0,0,0,0]
epsilon=1e-16
imax=1e6
print a
b=Jacobi(a,imax,epsilon,x,l)
print b
print x
print l
Példa
[szerkesztés]Legyen
A jacobi a következő sajátértékeket és sajátvektorokat adja:
Jegyzetek
[szerkesztés]- ↑ Jacobi, C.G.J. (1846). „Über ein leichtes Verfahren, die in der Theorie der Säkularstörungen vorkommenden Gleichungen numerisch aufzulösen” (german nyelven). Crelle's Journal 30, 51–94. o.
- ↑ Golub, G.H. (2000). „Eigenvalue computation in the 20th century”. Journal of Computational and Applied Mathematics 123 (1-2), 35–65. o. DOI:10.1016/S0377-0427(00)00413-1.
Források
[szerkesztés]- Numerikus módszerek, 1st, Kolozsvári Egyetemi Kiadó (2008)
- Digitális tankönyvtár/Természettudományok/Matematika/Numerikus módszerek 1./Jacobi-módszer
További információk
[szerkesztés]- Press, WH; Teukolsky, SA & Vetterling, WT et al. (2007), "Section 11.1. Jacobi Transformations of a Symmetric Matrix", Numerical Recipes: The Art of Scientific Computing (3rd ed.), New York: Cambridge University Press, ISBN 978-0-521-88068-8
- Rutishauser, H. (1966). „Handbook Series Linear Algebra: The Jacobi method for real symmetric matrices.”. Numerische Mathematik 9 (1), 1–10. o. DOI:10.1007/BF02165223.
- Sameh, A.H. (1971). „On Jacobi and Jacobi-like algorithms for a parallel computer”. Mathematics of Computation 25 (115), 579–590. o. DOI:10.1090/s0025-5718-1971-0297131-6. JSTOR 2005221.
- Shroff, Gautam M. (1991). „A parallel algorithm for the eigenvalues and eigenvectors of a general complex matrix”. Numerische Mathematik 58 (1), 779–805. o. DOI:10.1007/BF01385654.
- Veselić, K. (1979). „On a class of Jacobi-like procedures for diagonalising arbitrary real matrices”. Numerische Mathematik 33 (2), 157–172. o. DOI:10.1007/BF01399551.
- Veselić, K. (1979). „A quadratically convergent Jacobi-like method for real matrices with complex eigenvalues”. Numerische Mathematik 33 (4), 425–435. o. DOI:10.1007/BF01399324.