Pivoting con Inversione Virtuale di Righe
4
Routine
- integer Pivot(real(n, n) A in/out, integer(n) ipiv out, integer n in)
Sottoprogrammi
- integer IMaxCol (vedi Appendice)
File
- PIVOPAR2.FOR
Problema
Nel capitolo 3 è stato usato l'abbinamento PivoParz/BackSub (oppure PivoParz/BackCol) per risolvere un sistema lineare. Potrebbero sorgere, tuttavia, alcune obiezioni. La prima è che l'eliminazione di Gauss è un problema separato dalla risoluzione di sistemi la seconda è che si potrebbe desiderare risolvere più sistemi con la stessa matrice dei coefficienti. Un approccio più efficiente alla risoluzione dei sistemi è, quindi, quello di svincolare l'eliminazione di Gauss dal vettore dei termini noti, fornendo comunque le informazioni necessarie per l'adattamento di tale vettore alla matrice triangolarizzata.
Pivoting con Inversione Virtuale di Righe
4
Routine
- integer Pivot(real(n, n) A in/out, integer(n) ipiv out, integer n in)
Sottoprogrammi
- integer IMaxCol (vedi Appendice)
File
- PIVOPAR2.FOR
Problema
Nel capitolo 3 è stato usato l'abbinamento PivoParz/BackSub (oppure PivoParz/BackCol) per risolvere un sistema lineare. Potrebbero sorgere, tuttavia, alcune obiezioni. La prima è che l'eliminazione di Gauss è un problema separato dalla risoluzione di sistemi la seconda è che si potrebbe desiderare risolvere più sistemi con la stessa matrice dei coefficienti. Un approccio più efficiente alla risoluzione dei sistemi è, quindi, quello di svincolare l'eliminazione di Gauss dal vettore dei termini noti, fornendo comunque le informazioni necessarie per l'adattamento di tale vettore alla matrice triangolarizzata.
PIVOT
Scopo
Eseguire l'eliminazione di Gauss con pivoting parziale, fornendo, eventualmente, dei dati per l'adattamento del vettore dei termini noti.
Descrizione dell'algoritmo
L'algoritmo di questa funzione è analogo a quello di pivoparz (cap. 3), eccetto per il fatto che non coinvolge il vettore dei termini noti e che le inversioni non avvengono effettivamente sulla matrice, ma vengono eseguite graze a un vettore di interi.
Osservazioni / Raccomandazioni
BackSub e BackCol non sono adatte a risolvere sistemi le cui matrici sono state triangolarizzate da Pivot. Servirsi, piuttosto di InvSolve (Cap.5).
Specifiche
integer function Pivot(A, ipiv, n)
- Pivot integer function codice di avvertimento: 0: tutto ok 1: matrice singolare, l'elaborazione è comunque completata
- A (in/out) real(n, n) (in) matrice da triangolarizzare, (out) matrice triangolare superiore relativamente a ipiv
- ipiv (out) integer(n) (out) vettore inversioni, indica la sequenza corretta di indici di riga con cui considerare la matrice in uscita affinché risulti triangolare alta
- n (in) integer ordine del problema
Sottoprogrammi
[MaxCol (Appendice)]
Tempo di esecuzione
Come pivoparz (cap. 3), eccetto per il fatto che non esegue effettivamente le inversioni sulla matrice e non coinvolge il vettore dei termini noti.
Memoria richiesta
Nessun array locale.
Accuratezza
In relazione al condizionamento del sistema.
Esempio
Vedi cap. 5
PIVOPAR2.FOR
c PIVOPAR2.FOR
c Algoritmo di Gauss con Pivoting Parziale
c con inversione VIRTUALE
c Versione kij
c A matrice quadrata (in); matrice triangolarizzata (out)
c n ordine (in)
c ipiv vettore inversione (out)
c La funzione restituisce 1 se la matrice é singolare.
c Integer function Pivot(A,ipiv,n)
c integer n
c real A(n,n)
c integer ipiv(n)