Esercizio in Matlab su sistemi lineari e fattorizzazione

Messaggioda Alessio_Ale » 08/07/2022, 09:21

Un altro esercizio che non riesco a risolvere.



Immagine

Il codice:

Codice:
n=18;

A1=6*ones(n,1);    %vettori per la creazione di A
A2=3*ones(n-1,1);
A3=6*ones(n-1,1);

    A=diag(A1)+diag(A2,1)+diag(A3,-1); %creo A
   
    b=linspace(5,8,n);

    tic %calcolo costo computazionale  LUP
    [L,U,P]= lu(A);
    y=L\(P*b');
    x=U\y;
   
    t1=toc

    tic %calcolo costo computazionale  QR
    [Q,R]=qr(A);
    x=R\(Q*b');
   
    t2=toc


Non riesco ad arrivare al risultato, ma prima ancora mi rendo conto di avere dei valori stranissimi derivanti sicuramente a qualche errore nel codice. Riuscite ad aiutarmi a correggerlo? Grazie!
Ultima modifica di feddy il 08/07/2022, 22:03, modificato 1 volta in totale.
Motivazione: Sistemato titolo
Alessio_Ale
Starting Member
Starting Member
 
Messaggio: 21 di 36
Iscritto il: 23/06/2022, 22:31

Re: Esercizio in Matlab su sistemi lineari e fattorizzazione

Messaggioda feddy » 08/07/2022, 21:53

Ciao Alessio,

le prossime volte inserisci il codice tra gli appositi tag, come ho fatto io nel tuo post, che ora risulta modificato. Aiuta la lettura.
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2939 di 5941
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: Esercizio in Matlab su sistemi lineari e fattorizzazione

Messaggioda feddy » 08/07/2022, 22:02

Non hai calcolato gli autovalori. Se questi sono positivi, allora puoi applicare la fattorizzazione di Cholesky, in quanto la matrice è SPD (simmetrica e definita positiva). Il fatto che sia simmetrica è evidente da come è definita A.

Qualora non fosse SPD, allora va usato un altro metodo.

Il codice che hai scritto è molto breve, l'errore lo puoi trovare in pochissimo tempo. Inizia intanto a verificare che la tua incognita *risolva* il sistema lineare, cioè che $Ax-b$ sia piccolo in una qualche norma... ;)
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2940 di 5941
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: Esercizio in Matlab su sistemi lineari e fattorizzazione

Messaggioda feddy » 08/07/2022, 23:45

Siccome a quest'ora non ho nulla da fare...

Errori:
1) La matrice $A$ che hai creato non è quella richiesta. In particolare, la tua non è nemmeno simmetrica. Infatti,
Codice:
A3
deve essere moltiplicata per $3$, invece che per $6$.

A dire il vero, non ti serve nemmeno definire
Codice:
A3
come variabile, perché è uguale alla diagonale sopra. Dunque, ti basta un solo vettore per le sopra e sotto diagonali.

2) La tua risoluzione con LU è corretta, ma la QR no. Dalla teoria sai che $x=R^{-1}(Q^t b)$, ma nel tuo codice tu stai usando $Q$, non $Q^t$. Basta aggiungere un apice e risulta corretto.

3) Devi calcolare gli autovalori, notare che sono tutti positivi e, siccome la matrice è anche simmetrica, utilizzare l'algoritmo di Cholesky per fattorizzare $A$ in $A=R^tR$. Questi sono due sistemi triangolari, proprio quelli richiesti dall'esercizio.





Di seguito l'esercizio corretto: ho definito
Codice:
b
direttamente come vettore colonna, per evitare il trasposto. Ho corretto la risoluzione con $QR$, che di fatto non era richiesta, e aggiunto la parte che mancava riguardo agli autovalori.

Codice:
n=18;
d=6*ones(n,1);    %vettori per la creazione di A
sd=3*ones(n-1,1);
A=diag(d)+diag(sd,1)+diag(sd,-1); %creo A
b=linspace(5,8,n)';

tic %calcolo costo computazionale  LUP
[L,U,P]= lu(A);
y=L\(P*b);
x=U\y;
toc

tic %calcolo costo computazionale  QR
[Q,R]=qr(A);
x=R\(Q'*b);
toc

% Autovalori
eig(A)>0 %risulta un vettore di 1, cioè true, dunque la matrice è definita positiva

% Poichè sappiamo quindi che A è simmetrica e definita positiva, allora possiamo utilizzare
% tranquillamente la decomposizione di Cholesky:
tic
R = chol(A);
y = R'\b;
x = R\y;
toc

norm(x+y,1)
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2944 di 5941
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: Esercizio in Matlab su sistemi lineari e fattorizzazione

Messaggioda Alessio_Ale » 09/07/2022, 08:31

Ciao! Ho visto che hai risposto a tutti i post che ho scritto e inizio ringraziandoti per la correzione e ancora più per avermi spiegato gli errori.
Prendo inoltre i consigli per scrivere i futuri post nel modo migliore!
Alessio_Ale
Starting Member
Starting Member
 
Messaggio: 23 di 36
Iscritto il: 23/06/2022, 22:31

Re: Esercizio in Matlab su sistemi lineari e fattorizzazione

Messaggioda feddy » 09/07/2022, 08:51

Prego!
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2945 di 5941
Iscritto il: 26/06/2016, 00:25
Località: SISSA


Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite