Discussioni su Analisi Numerica e Ricerca Operativa

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

Iterazioni con il metodo delle potenze in Matlab

01/09/2022, 22:04

Ciao a tutti, non riesco a risolvere l'esercizio di cui vi metto il testo.


Immagine

parto dicendo che so come scrivere una fuction per usare il metodo delle potenze inverse
Codice:
function [lambda_p,w,m] = potenze_inverse(A,p,z,tol,m_max)

n=size(A);
w=z/norm(z);
lambda_p(1)=p;
[L,U,P]=lu(A-p*eye(n));

for m=1:m_max
    y=L\(P*w);
    z=U\y;
    lambda_p(m+1)=p+1/(w'*z);
    w=z/norm(z);
    if abs(lambda_p(m+1)-lambda_p(m)) <= tol*abs(lambda_p(m+1))
        break
    end
end
end


o per lo meno così mi è stato spiegato durante un' esercitazione in aula; però non riesco a trovare il modo di risolvere questo esercizio.
Tra l'altro, la domanda fa parte di un quiz a crocette a cui rispondere in pochi minuti quindi una soluzione così articolata mi pare faccia perdere troppo tempo.
Mi date una mano a risolverlo e magari a trovare un metodo più immediato?

Grazie a tutti! :smt023

Re: Iterazioni con il metodo delle potenze in Matlab

06/09/2022, 11:59

Nessuno che riesca ad aiutarmi? :?

Re: Iterazioni con il metodo delle potenze in Matlab

08/09/2022, 09:05

Ciao Alessio_Ale.

Cosa è che ti manca per risolvere l'esercizio?

Re: Iterazioni con il metodo delle potenze in Matlab

08/09/2022, 09:09

:lol: In realtà tutto e niente :lol:
mi spiego meglio, quello che ho postato è il codice copiato dalla teoria, se ci metto dentro i miei dati però non ottengo il risultato che dovrei ottenere.
Poi come dicevo, dovendo dare una risposta in breve tempo nell' ambito di un test mi pare una soluzione troppo elaborata da riscrivere a memoria in un paio di minuti.
Quindi mi manca che non riesco a farlo funzionare e non riesco a semplificarlo.

Re: Iterazioni con il metodo delle potenze in Matlab

08/09/2022, 09:13

Non ho controllato il codice. Ma assumendo sia corretto, dovrebbe darti una delle risposte elencate. Intendi dire che dopo aver calcolato l'errore relativo trovi un risultato che non è in elenco, giusto?

Re: Iterazioni con il metodo delle potenze in Matlab

08/09/2022, 09:26

Non ci arrivo nemmeno a scrivere l'errore, in realtà non ho idea di come calcolarlo l'errore.

Re: Iterazioni con il metodo delle potenze in Matlab

08/09/2022, 09:34

Ti copio function e script così come li ho scritti io:

La function
Codice:
function [lambda_p,w,m] = pot_inverse(A,p,z,tol,m_max)
n=size(A);
w=z/norm(z);
lambda_p(1)=p;
[L,U,P]=lu(A-p*eye(n));

for m=1:m_max
    y=L\(P*w);
    z=U\y;
    lambda_p(m+1)=p+1/(w'*z);
    w=z/norm(z);
    if abs(lambda_p(m+1)-lambda_p(m)) <= tol*abs(lambda_p(m+1))
        break
    end
end
end


e lo script
Codice:
m_max=6;
tol=1.0e-10;
z=ones(8,1);
p=1.5;
A=hilb(8);
[lambda_p,w1,m1] = pot_inverse(A,p,z,tol,m_max)

plot(1:m1+1,lambda_p,'b+-','linewidth',2)
lambda_max_p=lambda_p(end)
autovalori_A_eig=eig(A)

% ipotesi di calcolo dell' errore
err=(norm(autovalori_max_p)-norm(lambda_A_eig))/norm(autovalori_max_p)

Re: Iterazioni con il metodo delle potenze in Matlab

08/09/2022, 16:09

Quanto fa
Codice:
abs(lambda_p(end)-autovalori_A_eig(end))/autovalori_A_eig(end)
?

Re: Iterazioni con il metodo delle potenze in Matlab

08/09/2022, 16:22

L'errore lo devi calcolare sulla quantità che hai approssimato, cioè l'autovalore $\lambda_p$ più vicino a $p$. Nel tuo codice stai calcolando la norma di un vettore di cui in realtà ti interessa una sola componente, l'ultima. Cioè l'output del metodo delle potenze inverse. Altra cosa, nell'errore relativo devi dividere per il valore esatto, non per quello approssimato. Nota che
Codice:
autovalori_max_p
non è nemmeno definito nel tuo listato. Non è un problema, ma in genere è buona norma fornire un codice che compili/esegue senza errori :-)
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.