Articulo de referencia

algoritmo de valores propios de Jacobi

En álgebra lineal numérica , el algoritmo de valores propios de Jacobi es un método iterativo para el cálculo de los valores y vectores propios de una matriz simétrica real (un ...

En álgebra lineal numérica , el algoritmo de valores propios de Jacobi es un método iterativo para el cálculo de los valores y vectores propios de una matriz simétrica real (un proceso conocido como diagonalización ). Recibe su nombre de Carl Gustav Jacob Jacobi , quien propuso el método por primera vez en 1846, [ 1 ] pero no se popularizó hasta la década de 1950 con la llegada de las computadoras. [ 2 ]

Este algoritmo es intrínsecamente un algoritmo para matrices densas : obtiene poca o ninguna ventaja al aplicarse a una matriz dispersa, y destruirá la dispersión al generar relleno. Del mismo modo, no preservará estructuras como la disposición en bandas de la matriz sobre la que opera.

Descripción

DejarS{\displaystyle S}sea ​​una matriz simétrica yGRAMO=GRAMO(i,j,θ){\displaystyle G=G(i,j,\theta )}Sea una matriz de rotación de Givens . Entonces:

S=GRAMOSGRAMO{\displaystyle S'=G^{\top }SG\,}

es simétrico y similar aS{\displaystyle S}.

Además,S{\displaystyle S^{\prime }}tiene entradas:

Sii=do2Sii2sdoSij+s2SjjSjj=s2Sii+2sdoSij+do2SjjSij=Sji=(do2s2)Sij+sdo(SiiSjj)Sik=Ski=doSiksSjkki,jSjk=Skj=sSik+doSjkki,jSkl=Sklk,li,j{\displaystyle {\begin{aligned}S'_{ii}&=c^{2}\,S_{ii}-2\,sc\,S_{ij}+s^{2}\,S_{jj}\\S'_{jj}&=s^{2}\,S_{ii}+2sc\,S_{ij}+c^{2}\, S_{jj}\\S'_{ij}&=S'_{ji}=(c^{2}-s^{2})\,S_{ij}+sc\,(S_{ii}-S_{jj})\\S'_{ik}&=S'_{ki}=c\,S_{ik}-s\,S_{jk}&k\neq i,j\\S'_{jk}&=S'_{kj}=s\,S_{ik}+c\,S_{jk}&k\neq i,j\\S'_{kl}&=S_{kl}&k,l\neq i,j\end{aligned}}}

dóndes=pecado(θ){\displaystyle s=\sin(\theta )}ydo=porque(θ){\displaystyle c=\cos(\theta )}.

DesdeGRAMO{\displaystyle G}es ortogonal,S{\displaystyle S}yS{\displaystyle S^{\prime }}tienen la misma norma de Frobenius||||F{\displaystyle ||\cdot ||_{F}}(la raíz cuadrada de la suma de los cuadrados de todos los componentes), sin embargo podemos elegirθ{\displaystyle \theta }de tal manera queSij=0{\displaystyle S_{ij}^{\prime }=0}, en cuyo casoS{\displaystyle S^{\prime }}tiene una suma de cuadrados mayor en la diagonal:

Sij=porque(2θ)Sij+12pecado(2θ)(SiiSjj){\displaystyle S'_{ij}=\cos(2\theta )S_{ij}+{\tfrac {1}{2}}\sin(2\theta )(S_{ii}-S_{jj})}

Establezca esto igual a 0 y reorganice:

broncearse(2θ)=2SijSjjSii{\displaystyle \tan(2\theta )={\frac {2S_{ij}}{S_{jj}-S_{ii}}}}

siSjj=Sii{\displaystyle S_{jj}=S_{ii}}

θ=π4{\displaystyle \theta ={\frac {\pi }{4}}}

Para optimizar este efecto, S ij debe ser el elemento fuera de la diagonal con el mayor valor absoluto , llamado pivote .

El método de valores propios de Jacobi realiza rotaciones repetidamente hasta que la matriz se vuelve casi diagonal. Entonces , los elementos de la diagonal son aproximaciones de los valores propios (reales) de S.

Convergencia

Si pag=Skl{\displaystyle p=S_{kl}} es un elemento pivote , entonces por definición |Sij||pag|{\displaystyle |S_{ij}|\leq |p|} para 1i,jnorte,ij{\displaystyle 1\leq i,j\leq n,i\neq j}. DejarΓ(S)2{\displaystyle \Gamma (S)^{2}}denota la suma de los cuadrados de todas las entradas fuera de la diagonal deS{\displaystyle S}. DesdeS{\displaystyle S}tiene exactamente 2norte:=norte(norte1){\displaystyle 2N:=n(n-1)} elementos fuera de la diagonal, tenemos pag2Γ(S)22nortepag2{\displaystyle p^{2}\leq \Gamma (S)^{2}\leq 2Np^{2}} o2pag2Γ(S)2/norte{\displaystyle 2p^{2}\geq \Gamma (S)^{2}/N}. AhoraΓ(SJ)2=Γ(S)22pag2{\displaystyle \Gamma (S^{J})^{2}=\Gamma (S)^{2}-2p^{2}}Esto implica Γ(SJ)2(11/norte)Γ(S)2{\displaystyle \Gamma (S^{J})^{2}\leq (1-1/N)\Gamma (S)^{2}} o Γ(SJ)(11/norte)1/2Γ(S){\displaystyle \Gamma (S^{J})\leq (1-1/N)^{1/2}\Gamma (S)}; es decir, la secuencia de rotaciones de Jacobi converge al menos linealmente por un factor (11/norte)1/2{\displaystyle (1-1/N)^{1/2}} a una matriz diagonal .

Una serie denorte{\displaystyle N}Las rotaciones de Jacobi se llaman barrido;Sσ{\displaystyle S^{\sigma }}denotemos el resultado. La estimación anterior arroja

Γ(Sσ)(11norte)norte/2Γ(S){\displaystyle \Gamma (S^{\sigma })\leq \left(1-{\frac {1}{N}}\right)^{N/2}\Gamma (S)};

es decir, la secuencia de barridos converge al menos linealmente con un factor ≈mi1/2{\displaystyle e^{1/2}}.

Sin embargo, el siguiente resultado de Schönhage [ 3 ] produce una convergencia cuadrática local. Para ello, supongamos que S tiene m autovalores distintos. λ1,...,λmetro{\displaystyle \lambda _{1},...,\lambda _{m}} con multiplicidades ν1,...,νmetro{\displaystyle \nu _{1},...,\nu _{m}} y sea d > 0 la distancia más pequeña entre dos autovalores diferentes. Llamemos a un número de

norteS:=norte(norte1)2μ=1metro12νμ(νμ1)norte{\displaystyle N_{S}:={\frac {n(n-1)}{2}}-\sum _{\mu =1}^{m}{\frac {1}{2}}\nu _{\mu }(\nu _{\mu }-1)\leq N}

Jacobi gira un barrido de Schönhage. Si Ss{\displaystyle S^{s}} denota el resultado entonces

Γ(Ss)norte21(γ2d2γ),γ:=Γ(S){\displaystyle \Gamma (S^{s})\leq {\sqrt {{\frac {n}{2}}-1}}\left({\frac {\gamma ^{2}}{d-2\gamma }}\right),\quad \gamma :=\Gamma (S)} .

Por lo tanto, la convergencia se vuelve cuadrática tan pronto como Γ(S)<d2+norte21{\displaystyle \Gamma (S)<{\frac {d}{2+{\sqrt {{\frac {n}{2}}-1}}}}}

Costo

Cada rotación de Givens se puede realizar enO(norte){\displaystyle O(n)}pasos cuando se conoce el elemento pivote p . Sin embargo , la búsqueda de p requiere la inspección de todos los N 1 / 2 n 2 elementos fuera de la diagonal, lo que significa que esta búsqueda domina la complejidad general y empuja la complejidad computacional de un barrido en el algoritmo clásico de Jacobi a  O(norte4){\displaystyle O(n^{4})}. Los algoritmos competidores alcanzanO(norte3){\displaystyle O(n^{3})}complejidad para una diagonalización completa.

Máximos de filas en caché

Podemos reducir la complejidad de encontrar el elemento pivote de O( N ) a O( n ) si introducimos un array de índices adicional. metro1,,metronorte1{\displaystyle m_{1},\,\dots \,,\,m_{n-1}} con la propiedad quemetroi{\displaystyle m_{i}} es el índice del elemento más grande en la fila i , ( i = 1, ..., n 1) de la S actual . Entonces los índices del pivote ( k , l ) deben ser uno de los pares  (i,metroi){\displaystyle (i,m_{i})}. Además, la actualización del array de índices se puede realizar con una complejidad promedio de O( n ) : Primero, se puede encontrar la entrada máxima en las filas actualizadas k y l en O( n ) pasos. En las demás filas i , solo cambian las entradas en las columnas k y l . Iterando sobre estas filas, simetroi{\displaystyle m_{i}}no es ni k ni l , basta con comparar el antiguo máximo enmetroi{\displaystyle m_{i}}a las nuevas entradas y actualizaciónmetroi{\displaystyle m_{i}}si es necesario. Simetroi{\displaystyle m_{i}}debe ser igual a k o l y la entrada correspondiente disminuyó durante la actualización, el máximo sobre la fila i debe encontrarse desde cero con una complejidad de O( n ). Sin embargo, esto sucederá en promedio solo una vez por rotación. Por lo tanto, cada rotación tiene una complejidad de O( n ) y un barrido de O( ) en el caso promedio, lo que equivale a una multiplicación de matrices . Además ,metroi{\displaystyle m_{i}} debe inicializarse antes de que comience el proceso, lo cual se puede hacer en n 2 pasos.

Normalmente, el método de Jacobi converge dentro de la precisión numérica después de un pequeño número de barridos. Tenga en cuenta que los valores propios múltiples reducen el número de iteraciones ya quenorteS<norte{\displaystyle N_{S}<N}.

Jacobi cíclico y paralelo

Un enfoque alternativo consiste en prescindir por completo de la búsqueda y simplemente hacer que cada barrido pivote cada elemento fuera de la diagonal una vez, en un orden predeterminado. Se ha demostrado que este algoritmo de Jacobi cíclico alcanza la convergencia cuadrática, [ 4 ] [ 5 ] al igual que el algoritmo de Jacobi clásico.

La oportunidad de paralelización que es particular de Jacobi se basa en combinar Jacobi cíclico con la observación de que las rotaciones de Givens para conjuntos disjuntos de índices conmutan, de modo que se pueden aplicar varias en paralelo. Concretamente, siGRAMO1{\displaystyle G_{1}}pivotes entre índicesi1,j1{\displaystyle i_{1},j_{1}}yGRAMO2{\displaystyle G_{2}}pivotes entre índicesi2,j2{\displaystyle i_{2},j_{2}}, luego de{i1,j1}{i2,j2}={\displaystyle \{i_{1},j_{1}\}\cap \{i_{2},j_{2}\}=\varnothing }sigueGRAMO1GRAMO2=GRAMO2GRAMO1{\displaystyle G_{1}G_{2}=G_{2}G_{1}}porque en informáticaGRAMO1GRAMO2A{\displaystyle G_{1}G_{2}A}oGRAMO2GRAMO1A{\displaystyle G_{2}G_{1}A}elGRAMO1{\displaystyle G_{1}}La rotación solo necesita acceder a las filas.i1,j1{\displaystyle i_{1},j_{1}}y elGRAMO2{\displaystyle G_{2}}La rotación solo necesita acceder a las filas.i2,j2{\displaystyle i_{2},j_{2}}Dos procesadores pueden realizar ambas rotaciones en paralelo, ya que no se accede a ningún elemento de la matriz en ambas.

La partición del conjunto de pares de índices de un barrido en clases disjuntas por pares es equivalente a particionar el conjunto de aristas de un grafo completo en emparejamientos , lo que es lo mismo que colorear sus aristas; cada clase de color se convierte entonces en una ronda dentro del barrido. El número mínimo de rondas es el índice cromático del grafo completo, y es igual anorte{\displaystyle n}para imparnorte{\displaystyle n}peronorte1{\displaystyle n-1}inclusonorte{\displaystyle n}Una regla simple para números impares.norte{\displaystyle n}es manejar los pares{i1,j1}{\displaystyle \{i_{1},j_{1}\}}y{i2,j2}{\displaystyle \{i_{2},j_{2}\}}en la misma ronda sii1+j1i2+j2(modnorte){\displaystyle i_{1}+j_{1}\equiv i_{2}+j_{2}\textstyle {\pmod {n}}}. Inclusonorte{\displaystyle n}uno puede crearnorte1{\displaystyle n-1}rondask=0,1,,norte2{\displaystyle k=0,1,\dotsc ,n-2}donde un par{i,j}{\displaystyle \{i,j\}}para1i<jnorte1{\displaystyle 1\leqslant i<j\leqslant n-1}entra en ronda(i+j)mod(norte1){\displaystyle (i+j){\bmod {(}}n-1)}y además un par{i,norte}{\displaystyle \{i,n\}}para1inorte1{\displaystyle 1\leqslant i\leqslant n-1}entra en ronda2imod(norte1){\displaystyle 2i{\bmod {(}}n-1)}Esto reduce la complejidad temporal de un barrido.O(norte3){\displaystyle O(n^{3})}aO(norte2){\displaystyle O(n^{2})}, sinorte/2{\displaystyle n/2}Hay procesadores disponibles.

Una ronda consistiría en que cada procesador primero calculara(do,s){\displaystyle (c,s)}para su rotación, y luego aplicando la rotación desde la izquierda (rotando entre filas). A continuación, los procesadores se sincronizan antes de aplicar la rotación transpuesta desde la derecha (rotando entre columnas), y finalmente se sincronizan de nuevo. Dos procesadores pueden acceder a un elemento de la matriz durante una ronda, pero no ambos durante la misma mitad de dicha ronda.

Es posible lograr una mayor paralelización dividiendo el trabajo de una sola rotación entre varios procesadores, pero eso podría resultar demasiado complejo para ser práctico.

Algoritmo

El siguiente algoritmo es una descripción del método de Jacobi en notación matemática. Calcula un vector e que contiene los valores propios y una matriz E que contiene los vectores propios correspondientes; es decir,mii{\displaystyle e_{i}} es un valor propio y la columnamii{\displaystyle E_{i}} un vector propio ortonormal paramii{\displaystyle e_{i}}, i = 1, ..., n .

procedimiento jacobi( SR n × n ; salida eR n ; salida ER n × n ) var i , k , l , m , estadoN s , c , t , p , y , d , rR indN n cambiadoL nfunción maxind( kN ) ∈ N ! índice del elemento fuera de la diagonal más grande en la fila k m := k +1 para i := k +2 hasta n hacer siS ki │ > │ S kmentonces m := i fin si fin para devolver m fin funciónprocedimiento update( kN ; tR ) ! actualizar e k y su estado y := e k ; e k := y + t si ha cambiado k y ( y = e k ) entonces ha cambiado k := falso; estado := estado −1 si no si (no ha cambiado k ) y ( ye k ) entonces ha cambiado k := verdadero; estado := estado +1 fin si finprocprocedimiento rotate( k , l , i , jN ) ! realizar rotación de S ij , S kl┐ ┌ ┐┌ ┐ │ S kl │ │ cs ││ S kl │ │ │ := │ ││ │ │ S ij │ │ s c ││ S ij │ └ ┘ └ ┘└ proceso final ! inicializar e, E y los arreglos ind, cambiado E := I ; estado := n para k := 1 a n hacer ind k := maxind( k ); e k := S kk ; cambiado k := verdadero fin para mientras estado ≠0 hacer ! siguiente rotación m := 1 ! encontrar índice (k,l) del pivote p para k := 2 a n −1 hacer siS k ind k  │ > │ S m ind m entonces m := k fin si fin para k := m ; l := ind m ; p := S kl ! calcular c = cos φ, s = sin φ y := ( e le k )/2; d := │ y │+√( p 2 + y 2 ) r := √( p 2 + d 2 ); c := d / r ; s := p / r ; t := p 2 / d if y <0 then s := − s ; t := − t endif S kl := 0.0; update( k ,− t ); update( l , t ) ! rotar filas y columnas k y l para i := 1 a k −1 hacer rotate( i , k , i , l ) fin para para i := k +1 a l −1 hacer rotate( k , i , i , l ) fin para para i := l +1 a n hacer rotate( k , i , l , i ) fin para ! rotar vectores propios para i := 1 a n hacer┐ ┌ ┐┌ ┐ │ E ik │ │ cs ││ E ik │ │ │ := │ ││ │ │ E il │ │ s c ││ E il │ └ ┘ └ ┘└ fin del bucle ! actualizar todos los ind i potencialmente cambiados para i := 1 a n hacer ind i := maxind( i ) fin del bucle fin del proceso

Notas

1. El arreglo lógico cambiado contiene el estado de cada valor propio. Si el valor numérico demik{\displaystyle e_{k}} omil{\displaystyle e_{l}} cambios durante una iteración, el componente correspondiente de cambiado se establece en verdadero , de lo contrario en falso . El estado entero cuenta el número de componentes de cambiado que tienen el valor verdadero . La iteración se detiene tan pronto como estado = 0. Esto significa que ninguna de las aproximacionesmi1,...,minorte{\displaystyle e_{1},\,...\,,e_{n}} Su valor ha cambiado recientemente, por lo que es poco probable que esto ocurra si la iteración continúa. Aquí se asume que las operaciones de punto flotante se redondean de forma óptima al número de punto flotante más cercano.

2. El triángulo superior de la matriz S se destruye mientras que el triángulo inferior y la diagonal permanecen sin cambios. Por lo tanto, es posible restaurar S si es necesario de acuerdo con

para k := 1 a n −1 hacer ! restaurar matriz S para l := k +1 a n hacer S kl := S lk fin para fin para

3. Los valores propios no tienen por qué estar en orden descendente. Esto se puede lograr mediante un algoritmo de ordenación sencillo.

para k := 1 a n −1 hacer m := k para l := k +1 a n hacer si e l > e m entonces m := l fin si fin para si km entonces intercambiar e m , e k intercambiar E m , E k fin si fin para

4. El algoritmo está escrito utilizando notación matricial (matrices basadas en 1 en lugar de basadas en 0).

5. Al implementar el algoritmo, la parte especificada mediante notación matricial debe realizarse simultáneamente.

6. Esta implementación no contempla correctamente el caso en que una dimensión sea un subespacio independiente. Por ejemplo, si se proporciona una matriz diagonal, la implementación anterior nunca terminará, ya que ninguno de los valores propios cambiará. Por lo tanto, en implementaciones reales, se debe agregar lógica adicional para tener en cuenta este caso.

Ejemplo

Dejar S=(4306035303006754206067516201050354201050700){\displaystyle S={\begin{pmatrix}4&-30&60&-35\\-30&300&-675&420\\60&-675&1620&-1050\\-35&420&-1050&700\end{pmatrix}}}

Luego, Jacobi produce los siguientes valores propios y vectores propios después de 3 barridos (19 iteraciones)  :

mi1=2585.25381092892231{\displaystyle e_{1}=2585.25381092892231}

mi1=(0,02919332316478605880,3287120557631889970.7914111458331263310.514552749997152907){\displaystyle E_{1}={\begin{pmatrix}0.0291933231647860588\\-0.328712055763188997\\0.791411145833126331\\-0.514552749997152907\end{pmatrix}}}

mi2=37.1014913651276582{\displaystyle e_{2}=37.1014913651276582}

mi2=(0,1791862905354548260,7419177906284534350,1002281369471921990,638282528193614892){\displaystyle E_{2}={\begin{pmatrix}-0.179186290535454826\\0.741917790628453435\\-0.100228136947192199\\-0.638282528193614892\end{pmatrix}}}

mi3=1.4780548447781369{\displaystyle e_{3}=1.4780548447781369}

mi3=(0,5820756994972376500,3705021850670930580,5095786345017996260,514048272222164294){\displaystyle E_{3}={\begin{pmatrix}-0.582075699497237650\\0.370502185067093058\\0.509578634501799626\\0.514048272222164294\end{pmatrix}}}

mi4=0,1666428611718905{\displaystyle e_{4}=0.1666428611718905}

mi4=(0,7926082911637635850,4519231209015997940,3224163985818249920,252161169688241933){\displaystyle E_{4}={\begin{pmatrix}0.792608291163763585\\0.451923120901599794\\0.322416398581824992\\0.252161169688241933\end{pmatrix}}}

Aplicaciones para matrices simétricas reales

Cuando se conocen los valores propios (y los vectores propios) de una matriz simétrica, los siguientes valores se calculan fácilmente.

Valores singulares
Los valores singulares de una matriz (cuadrada)A{\displaystyle A}son las raíces cuadradas de los valores propios (no negativos) deATA{\displaystyle A^{T}A}En caso de una matriz simétricaS{\displaystyle S}tenemos deSTS=S2{\displaystyle S^{T}S=S^{2}}, por lo tanto los valores singulares deS{\displaystyle S}son los valores absolutos de los valores propios deS{\displaystyle S}.
norma 2 y radio espectral
La norma 2 de una matriz A es la norma basada en la norma vectorial euclidiana; es decir, el valor más grandeAincógnita2{\displaystyle \|Ax\|_{2}}cuando x recorre todos los vectores conincógnita2=1{\displaystyle \|x\|_{2}=1}Es el valor singular más grande deA{\displaystyle A}. En el caso de una matriz simétrica, es el mayor valor absoluto de sus autovectores y, por lo tanto, igual a su radio espectral .
Número de condición
El número de condición de una matriz no singularA{\displaystyle A}se define como condición(A)=A2A12{\displaystyle {\mbox{cond}}(A)=\|A\|_{2}\|A^{-1}\|_{2}}En el caso de una matriz simétrica, es el valor absoluto del cociente del mayor y el menor valor propio. Las matrices con números de condición grandes pueden causar resultados numéricamente inestables: una pequeña perturbación puede generar grandes errores. Las matrices de Hilbert son las matrices mal condicionadas más conocidas. Por ejemplo, la matriz de Hilbert de cuarto orden tiene una condición de 15514, mientras que para el orden 8 es 2,7  ×  10⁸ .
Rango
Una matrizA{\displaystyle A}tiene rangor{\displaystyle r}si tiener{\displaystyle r}columnas que son linealmente independientes mientras que las columnas restantes dependen linealmente de estas. De manera equivalente,r{\displaystyle r}es la dimensión del rango de A{\displaystyle A}Además, es el número de valores singulares distintos de cero.
En el caso de una matriz simétrica, r representa el número de autovalores distintos de cero. Desafortunadamente, debido a errores de redondeo, las aproximaciones numéricas de autovalores cero pueden no serlo (también puede ocurrir que una aproximación numérica sea cero mientras que el valor real no lo sea). Por lo tanto, solo se puede calcular el rango numérico decidiendo cuáles de los autovalores están lo suficientemente cerca de cero.
Pseudoinversa
La pseudoinversa de una matrizA{\displaystyle A}es la matriz únicaincógnita=A+{\displaystyle X=A^{+}}para quéAincógnita{\displaystyle AX}yincógnitaA{\displaystyle XA}son simétricas y para las cualesAincógnitaA=A,incógnitaAincógnita=incógnita{\displaystyle AXA=A,XAX=X}se sostiene. SiA{\displaystyle A}es no singular, entoncesA+=A1{\displaystyle A^{+}=A^{-1}}.
Cuando se llama al procedimiento jacobi (S, e, E), entonces la relaciónS=miTDiag(mi)mi{\displaystyle S=E^{T}{\mbox{Diag}}(e)E}donde Diag( e ) denota la matriz diagonal con el vector e en la diagonal. Seami+{\displaystyle e^{+}}denotemos el vector donde mii{\displaystyle e_{i}}es reemplazado por1/mii{\displaystyle 1/e_{i}}si mii0{\displaystyle e_{i}\leq 0}y por 0 si mii{\displaystyle e_{i}}es (numéricamente cercano a) cero. Dado que la matriz E es ortogonal, se deduce que la pseudoinversa de S viene dada por S+=miTDiag(mi+)mi{\displaystyle S^{+}=E^{T}{\mbox{Diag}}(e^{+})E}.
Solución de mínimos cuadrados
Si matrizA{\displaystyle A} no tiene rango completo, puede que no haya solución del sistema lineal Aincógnita=b{\displaystyle Ax=b}. Sin embargo, se puede buscar un vector x para el cual Aincógnitab2{\displaystyle \|Ax-b\|_{2}}es mínimo. La solución esincógnita=A+b{\displaystyle x=A^{+}b}. En el caso de una matriz simétrica S como antes, se tieneincógnita=S+b=miTDiag(mi+)mib{\displaystyle x=S^{+}b=E^{T}{\mbox{Diag}}(e^{+})Eb}.
exponencial matricial
DeS=miTDiag(mi)mi{\displaystyle S=E^{T}{\mbox{Diag}}(e)E}uno encuentraexpS=miTDiag(expmi)mi{\displaystyle \exp S=E^{T}{\mbox{Diag}}(\exp e)E}donde exp mi{\displaystyle e} es el vector dondemii{\displaystyle e_{i}}es reemplazado porexpmii{\displaystyle \exp e_{i}}. Del mismo modo,F(S){\displaystyle f(S)} se puede calcular de forma obvia para cualquier función (analítica)F{\displaystyle f}.
Ecuaciones diferenciales lineales
La ecuación diferencial incógnita=Aincógnita,incógnita(0)=a{\displaystyle x'=Ax,x(0)=a}tiene la soluciónincógnita(t)=exp(tA){\displaystyle x(t)=\exp(tA)}Para una matriz simétricaS{\displaystyle S}De ello se deduce que incógnita(t)=miTDiag(exptmi)mia{\displaystyle x(t)=E^{T}{\mbox{Diag}}(\exp te)Ea}. Si a=i=1norteaimii{\displaystyle a=\sum _{i=1}^{n}a_{i}E_{i}}es la expansión dea{\displaystyle a} por los autovectores deS{\displaystyle S}, entoncesincógnita(t)=i=1norteaiexp(tmii)mii{\displaystyle x(t)=\sum _{i=1}^{n}a_{i}\exp(te_{i})E_{i}}.
Dejar Ws{\displaystyle W^{s}}sea ​​el espacio vectorial generado por los autovectores deS{\displaystyle S}que corresponden a un valor propio negativo yW{\displaystyle W^{u}}De forma análoga para los autovalores positivos. Si aWs{\displaystyle a\in W^{s}}entonceslímitetincógnita(t)=0{\displaystyle {\mbox{lim}}_{t\rightarrow \infty }x(t)=0}; es decir, el punto de equilibrio 0 es atractivo paraincógnita(t){\displaystyle x(t)}. SiaW{\displaystyle a\in W^{u}}entonceslímitetincógnita(t)={\displaystyle {\mbox{lim}}_{t\rightarrow \infty }x(t)=\infty }; es decir, 0 es repulsivo a incógnita(t){\displaystyle x(t)}.Ws{\displaystyle W^{s}}yW{\displaystyle W^{u}}se denominan variedades estables e inestables paraS{\displaystyle S}. Sia{\displaystyle a}Si tiene componentes en ambas variedades, entonces un componente es atraído y el otro repelido. Por lo tantoincógnita(t){\displaystyle x(t)}aprochesW{\displaystyle W^{u}}comot{\displaystyle t\to \infty }.

Implementación de Julia

El siguiente código es una implementación directa de la descripción matemática del algoritmo de valores propios de Jacobi en el lenguaje de programación Julia .

usando Álgebra Lineal , Pruebafunción find_pivot ( Sprime ) n = tamaño ( Sprime , 1 ) pivot_i = pivot_j = 0 pivot = 0.0para j = 1 : n para i = 1 : ( j - 1 ) si abs ( Sprime [ i , j ]) > pivote pivote_i = i pivote_j = j pivote = abs ( Sprime [ i , j ]) fin fin findevolver ( pivot_i , pivot_j , pivot ) fin# En la práctica, no se debe instanciar explícitamente la función de matriz de rotación de Givens givens_rotation_matrix ( n , i , j , θ ) G = Matrix { Float64 }( I ,( n , n )) G [ i , i ] = G [ j , j ] = cos ( θ ) G [ i , j ] = sin ( θ ) G [ j , i ] = - sin ( θ ) return G end# S es una matriz simétrica n por n n = 4 sqrtS = randn ( n , n ); S = sqrtS * sqrtS ' ;# el elemento fuera de la diagonal más grande permitido de U' * S * U # donde U son los vectores propios tol = 1e-14Sprime = copiar ( S ) U = Matriz { Float64 }( I ,( n , n ))mientras sea verdadero ( pivot_i , pivot_j , pivot ) = encontrar_pivote ( Sprime )si pivot < tol break finθ = atan ( 2 * Sprime [ pivote_i , pivot_j ] / ( Sprime [ pivote_j , pivot_j ] - Sprime [ pivote_i , pivot_i ] )) / 2G = givens_rotation_matrix ( n , pivot_i , pivot_j , θ )# actualizar Sprime y U Sprime .= G '* Sprime * G U .= U * G fin# Sprime ahora es (casi) una matriz diagonal # extraer valores propios λ = diag ( Sprime )# Ordenar los valores propios (y los vectores propios correspondientes U) por valores crecientes i = sortperm ( λ ) λ = λ [ i ] U = U [ : , i ]# S debería ser igual a U * diagm(λ) * U' @test S U * diagm ( λ ) * U '

Generalizaciones

El método de Jacobi se ha generalizado a matrices hermíticas complejas , matrices reales y complejas no simétricas generales, así como a matrices por bloques.

Dado que los valores singulares de una matriz real son las raíces cuadradas de los valores propios de la matriz simétricaS=ATA{\displaystyle S=A^{T}A}También se puede utilizar para el cálculo de estos valores. Para este caso, el método se modifica de tal manera que S no debe calcularse explícitamente, lo que reduce el peligro de errores de redondeo . Tenga en cuenta queJSJT=JATAJT=JATJTJAJT=BTB{\displaystyle JSJ^{T}=JA^{T}AJ^{T}=JA^{T}J^{T}JAJ^{T}=B^{T}B} con B:=JAJT{\displaystyle B\,:=JAJ^{T}}.

Referencias

  1. Jacobi, CGJ (1846). "Über ein leichtes Verfahren, die in der Theorie der Säkularstörungen vorkommenden Gleichungen numerisch aufzulösen" . Diario de Crelle (en alemán). 1846 (30): 51– 94. doi : 10.1515/crll.1846.30.51 . S2CID 199546177 . 
  2. Golub, GH ; van der Vorst, HA (2000). "Cálculo de valores propios en el siglo XX" . Journal of Computational and Applied Mathematics . 123 ( 1–2 ): 35–65 . doi : 10.1016/S0377-0427(00)00413-1 .
  3. ^ Schönhage, A. (1964). "Zur quadratischen Konvergenz des Jacobi-Verfahrens". Numerische Mathematik (en alemán). 6 (1): 410– 412. doi : 10.1007/BF01386091 . SEÑOR 0174171 . S2CID 118301078 .  
  4. Wilkinson, JH (1962). "Nota sobre la convergencia cuadrática del proceso cíclico de Jacobi". Numerische Mathematik . 6 : 296– 300. doi : 10.1007/BF01386321 .
  5. van Kempen, HPM (1966). "Sobre la convergencia cuadrática del método cíclico especial de Jacobi". Numerische Mathematik . 9 : 19– 22. doi : 10.1007/BF02165225 .

Lecturas adicionales

  • Press, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP (2007), "Sección 11.1. Transformaciones de Jacobi de una matriz simétrica" , Numerical Recipes: The Art of Scientific Computing (3.ª  ed.), Nueva York: Cambridge University Press, ISBN 978-0-521-88068-8Archivado del original el 11 de agosto de 2011 , consultado el 13 de agosto de 2011.
  • Rutishauser, H. (1966). "Serie de manuales de álgebra lineal: el método de Jacobi para matrices simétricas reales". Matemática numérica . 9 (1): 1– 10. doi : 10.1007/BF02165223 . SEÑOR 1553948 . S2CID 120520713 .  
  • Sameh, AH (1971). "Sobre los algoritmos de Jacobi y similares a Jacobi para una computadora paralela" . Matemáticas de la Computación . 25 (115): 579– 590. doi : 10.1090/s0025-5718-1971-0297131-6 . JSTOR 2005221. MR 0297131 .  
  • Shroff, Gautam M. (1991). "Un algoritmo paralelo para los valores propios y vectores propios de una matriz compleja general". Numerische Mathematik . 58 (1): 779– 805. CiteSeerX 10.1.1.134.3566 . doi : 10.1007/BF01385654 . MR 1098865 . S2CID 13904356 .   
  • Veselić, K. (1979). "Sobre una clase de procedimientos tipo Jacobi para diagonalizar matrices reales arbitrarias". Numerische Mathematik . 33 (2): 157– 172. doi : 10.1007/BF01399551 . MR 0549446 . S2CID 119919630 .  
  • Veselić, K.; Wenzel, HJ (1979). "Un método tipo Jacobi de convergencia cuadrática para matrices reales con valores propios complejos". Numerische Mathematik . 33 (4): 425– 435. doi : 10.1007/BF01399324 . MR 0553351 . S2CID 119554420 .  
  • Yousef Saad: "Revisando el método de rotación de subespacios de Jacobi (en bloques) para el problema de valores propios simétricos", Numerical Algorithms, vol. 92 (2023), pp. 917-944. https://doi.org/10.1007/s11075-022-01377-w .
  • Implementación en Matlab del algoritmo de Jacobi que evita las funciones trigonométricas.
  • Implementación en C++11