Question about for loop in SOR method

I'm trying to do a SOR method to find the eigenvalue and eigenvector. I need to change the scalar weight w from 1 to 1.99 in increment of 0.01. The goal is to find w that corresponds to the smallest of the lambda values. Really appreciate it.
The code i have right now:
D_dig=diag(diag(D_final));
U = triu(D_final);
L=tril(D_final);
P=(1/w)*D_dig + L;
T = [(w-1)/w]*D_dig + U;
lambda=eig(-L \ T);

 Risposta accettata

KSSV
KSSV il 27 Apr 2018
Modificato: KSSV il 27 Apr 2018
D_dig=diag(diag(D_final));
U = triu(D_final);
L=tril(D_final);
w = 1:0.01:1.99 ;
N = length(w) ;
iwant = zeros(N,1) ;
for i = 1:N
P=(1/w(i))*D_dig + L;
T = (w(i)-1)/w(i)*D_dig + U;
lambda=eig(-L \ T);
iwant(i) = norm(lambda) ;
end
[val,idx] = min(iwant) ;
w(idx)

6 Commenti

I get that the cell stores all the lambda vectors at different w. But i still don't know how to find the w that corresponds to the smallest of the infinity norm for each of the lambda vectors.
Edited the answer
i get an error saying the min command is invalid.
Show full code you used....
Jiawen Sun
Jiawen Sun il 27 Apr 2018
Modificato: KSSV il 27 Apr 2018
D_dig=diag(diag(D_final));
U = triu(D_final);
L=tril(D_final);
w=1:0.01:1.99;
N=length(w);
ineed = cell(N,1);
for i = 1:N
P=(1/w(i))*D_dig + L;
T = [(w(i)-1)/w(i)]*D_dig + U;
lambda=eig(-L \ T);
ineed{i} = norm(lambda,Inf);
end
[val,idx] = min(ineed) ;
w(idx)
D_dig=diag(diag(D_final));
U = triu(D_final);
L=tril(D_final);
w=1:0.01:1.99;
N=length(w);
ineed = zeros(N,1);
for i = 1:N
P=(1/w(i))*D_dig + L;
T = [(w(i)-1)/w(i)]*D_dig + U;
lambda=eig(-L \ T);
ineed(i) = norm(lambda,Inf);
end
[val,idx] = min(ineed) ;
w(idx)

Accedi per commentare.

Più risposte (0)

Richiesto:

il 27 Apr 2018

Commentato:

il 27 Apr 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by