Implementazione del metodo Jacobi-Davidson per il problema degli autovalori cubici


9

Ho un grosso problema di autovalori cubici:

(A0+λA1+λ2A2+λ3A3)x=0.

Potrei risolverlo convertendomi in un problema di autovalore lineare ma si tradurrebbe in un sistema di dimensioni:32

[A0000I000I][xyz]=λ[A1A2A3I000I0][xyz],

dove y=λx e z=λy . Quali altre tecniche sono disponibili per risolvere un problema di autovalori cubici? Ho sentito che esiste una versione di Jacobi-Davidson che la risolverà ma non ha trovato un'implementazione.

Inoltre, devo essere in grado di indirizzare specifici autovalori in modo simile al metodo shift-and-invert di ARPACK e trovare gli autovettori associati.


Quali sono le dimensioni delle matrici coinvolte?
Bill Barth,

Ai è ordine 10000×10000 . Ho due diverse formulazioni di questo problema, una in cui Ai è denso e nell'altro è scarso.
OSE,

1
SLEPc ha routine per problemi di autovalori quadratici e problemi di autovalori non lineari, quindi potresti essere in grado di trovare ciò di cui hai bisogno. Ha anche funzioni di cambio e inversione e ha un'interfaccia con ARPACK.
Geoff Oxberry,

Risposte:


5

Con il protocollo di comunicazione inversa di ARPACK, non è necessario memorizzare esplicitamente la matrice : è sufficiente fornire due funzioni che calcolano:3n×3n

[xyz][A0xyz] e [xyz][A1x+A2y+A3zyz]

(paghi ancora il prezzo di memorizzazione dei vettori dimensionali ma non paghi nulla per le matrici).3×n

Per quanto riguarda la trasformazione invertita, puoi fare la stessa cosa, cioè implementarla tu stesso usando un callback che calcola invece di e sostituisca i calcolati con . Per calcolare , puoi pre-fattorizzare la tua matrice , il che significa solo pre-factoring (usando LU, Cholesky o versioni sparse di esse a seconda della struttura della matrice). Per la trasformazione full shift-invert, penso che si possa fare qualcosa di simile.xM1xxMxλsλ1M1xMA0

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.