Matrici di Householder su Matlab
Buon sabato a tutti ragazzi..avrei bisogno di un aiuto per poter scrivere sul matlab il codice per costruire matrici di Householder.
La definizione non è costruttiva,quindi non so proprio da dove iniziare..magari se avete anche qualche idea.
Conoscere questo tipo di matrici mi serve per scrivere un programma su matlab che implementi la fattorizzazione QR (nonostante in matlab ci sia già il comando predefinito),quindi scomporre una matrice A in una matrice Q ortogonale,e una matrice R triangolare.
Vi ringrazio già in anticipo..a presto!!!
La definizione non è costruttiva,quindi non so proprio da dove iniziare..magari se avete anche qualche idea.
Conoscere questo tipo di matrici mi serve per scrivere un programma su matlab che implementi la fattorizzazione QR (nonostante in matlab ci sia già il comando predefinito),quindi scomporre una matrice A in una matrice Q ortogonale,e una matrice R triangolare.
Vi ringrazio già in anticipo..a presto!!!
Risposte
nessuno?

Senti, sono cose che non tocco più da anni purtroppo. Però mi ricordo che non è necessario, e anzi è una inutile lungaggine computazionale, costruire esplicitamente una matrice di Householder. Infatti una tale matrice è identificata univocamente da un vettore $v$ e uno scalare $beta$, se non sbaglio così:
$E(v, v, beta)=I -betavv^H$ ($v^H$=trasposto e coniugato di $v$)
cosicché il prodotto per un vettore è dato dalla formula
$E(v, v, beta)w=w-(betaw^Hv)w$.
Usare questa formula è computazionalmente più efficiente che costruire esplicitamente la matrice di Householder e poi farne il prodotto per $w$.
$E(v, v, beta)=I -betavv^H$ ($v^H$=trasposto e coniugato di $v$)
cosicché il prodotto per un vettore è dato dalla formula
$E(v, v, beta)w=w-(betaw^Hv)w$.
Usare questa formula è computazionalmente più efficiente che costruire esplicitamente la matrice di Householder e poi farne il prodotto per $w$.
si ma non è una definizione o una proprietà operativa..
???
Più operativa di così: è una formula esplicita. Che cosa vuoi dire?
Più operativa di così: è una formula esplicita. Che cosa vuoi dire?
Per implementare la fattorizzazione qr su matlab, ovvero fattorizzare una matrice A in una matrice Q unitaria e R triangolare superiore, devo utilizzare le matrici di Householder. Come hai detto nel post precedente,non è necessario trovare tutta la matrice, bensì il vettore che la identifica.
Per la fattorizzazione qr bisogna costruire una sequenza finita di matrici $ A=A_1; A_2;A_3...;A_n $ ; si avrà che $ A_n=R $
Si tratta di trovare il vettore Householder, che ne identifica la matrice corrispondente, per ogni colonna della matrice A, per costruire tale sequenza.
La mia domanda è : come trovo il vettore di Householder avendo un altro vettore in input?
Spero di aver preso bene appunti a lezione e di esser stata chiara!
Per la fattorizzazione qr bisogna costruire una sequenza finita di matrici $ A=A_1; A_2;A_3...;A_n $ ; si avrà che $ A_n=R $
Si tratta di trovare il vettore Householder, che ne identifica la matrice corrispondente, per ogni colonna della matrice A, per costruire tale sequenza.
La mia domanda è : come trovo il vettore di Householder avendo un altro vettore in input?
Spero di aver preso bene appunti a lezione e di esser stata chiara!
C'è il procedimento per trovare la formula per trovare [tex]v[/tex], si fanno un po' di calcoli però: imponi che [tex]P x = \alpha e_1[/tex] (da qui trovi [tex]v[/tex]) e inoltre imponi imponi che [tex]P[/tex] sia unitaria (da qui trovi il [tex]\beta[/tex]). Alla fine il vettore buono che determina la [tex]P[/tex] è
[tex]v = \begin{pmatrix} x_1 - \alpha\\ x_2\\ \dots\\ x_n \end{pmatrix}[/tex]
dove [tex]\alpha = - ||x||_2 \frac{x_1}{|x_1|}[/tex] (se capita che [tex]x_1 = 0[/tex] va bene [tex]\alpha = - ||x||_2[/tex]). Il segno - serve per evitare cancellazione nel calcolo [tex]x_1 - \alpha[/tex].
[tex]\beta = \frac{1}{||x||_2 ( ||x||_2 + |x_1|)}[/tex]
[tex]v = \begin{pmatrix} x_1 - \alpha\\ x_2\\ \dots\\ x_n \end{pmatrix}[/tex]
dove [tex]\alpha = - ||x||_2 \frac{x_1}{|x_1|}[/tex] (se capita che [tex]x_1 = 0[/tex] va bene [tex]\alpha = - ||x||_2[/tex]). Il segno - serve per evitare cancellazione nel calcolo [tex]x_1 - \alpha[/tex].
[tex]\beta = \frac{1}{||x||_2 ( ||x||_2 + |x_1|)}[/tex]
ok..quindi solo la prima componente cambia?
Sì, è quella la cosa comodissima!
perfetto
grazie mille allora!!
