Problema con Matlab!

Messaggioda chiaraunipd » 27/08/2018, 11:43

Ciao a tutti, sono nuova nel forum e prima di porre questo quesito ho cercato tra gli argomenti già discussi, ma purtroppo non sono riuscita a trovare una risposta.

Sto cercando di costruire una matrice con MATLAB, in particolare la matrice EW (matrice di iterazione del metodo SOR).
Il punto è che voglio che questa matrice cambi ogni volta che scelgo un valore diverso di w.

Mi spiego:
La matrice di iterazione è: EW=((F-wM)^(-1))*((1-w)F+wN) dove:
- F matrice diagonale di A
- M matrice con la parte triangolare inferiore di A cambiata di segno (esclusa la diagonale)
- N matrice con la parte triangolare superiore di A cambiata di segno (esclusa la diagonale)
in modo tale che A=F-M-N
- w coefficiente che varia e che modifica la matrice di volta in volta

Voglio che il mio coefficiente w vari tra 0 e 2 con passo 0.08.
Premetto che non so riportare codici scritti bene qui quindi mi limiterò a copiare e incollare da MATLAB :(
Per fare questo ho creato un ciclo for di questo tipo:

indice=0;
for w=0:0.08:2
indice=indice+1;
EW=(I-w*(inv(F+w.*M))*A);
rhoEW(indice)=max(eig(EW));
end

Voglio creare anche un vettore rhoEW che mi dia il raggio spettrale della matrice EW ad ogni passo, cioè ogni volta che varia w, e questo lo faccio usando la variabile indice che mi colloca componente dopo componente nel mio vettore rhoEW, completo alla fine del ciclo. Ma posso fare questo perché è uno scalare!

!!! Non ho idea di come fare a creare una "successione", una volta uscita dal ciclo, di matrici EW che variano ogni volta al variare di w. Dal momento che non posso usare lo stesso sistema che userei per uno scalare come rhoEW (preallocando il vettore o meno) non ho idea di come poter registrare la serie di matrici ottenute.

Qualcuno saprebbe aiutarmi? Grazie in anticipo a tutti :lol: :D
chiaraunipd
Starting Member
Starting Member
 
Messaggio: 1 di 10
Iscritto il: 27/08/2018, 11:22

Re: Problema con Matlab!

Messaggioda chiaraunipd » 27/08/2018, 12:10

p.s nello script ho scritto una formula diversa per EW ma è equivalente :)
chiaraunipd
Starting Member
Starting Member
 
Messaggio: 2 di 10
Iscritto il: 27/08/2018, 11:22

Re: Problema con Matlab!

Messaggioda apatriarca » 27/08/2018, 12:19

Puoi fare la stessa cosa con le matrici. Matlab permette infatti la creazione di array di ogni dimensione. Vettori e matrici rappresentano semplicemente le loro versioni mono- e bi- dimensionali. Le due principali differenze tra memorizzare una sequenza di valori scalari in un vettore e memorizzare una sequenza di matrici in un array tridimensionale sono:

  • Devi scegliere in quali dimensioni memorizzare le matrici. Nell'esempio seguente ho ad esempio scelto di usare i primi due indici come gli indici della matrice e l'ultimo per le iterazioni.
  • Devi chiarire in quali indici inserire (o da quali leggere) i valori della tua matrice.

A questo punto il codice diventa semplicemente il seguente:

Codice:
indice = 0;
for w = 0:0.08:2
    indice = indice+1;
    EW(:,:,indice) = (I-w*(inv(F+w.*M))*A);
    rhoEW(indice) = max(eig(EW(:,:,indice)));
end


Per inserire del codice devi inserire il codice tra tag CODE. Per esempio:
Codice:
[code]a = b;[/code]


Per inserire formule è disponibile la sintassi di \(\LaTeX\). Puoi sia inserire formule all'interno del testo, come \(a \in \mathbb N\), oppure inserire formule su righe separate come
\[ E_w = (F - w\,M)^{-1} \, \bigl((1-w)\,F+w\,N \bigr) \]

Il paragrafo precedente l'ho scritto come segue:
Codice:
Per inserire formule è disponibile la sintassi di \(\LaTeX\). Puoi sia inserire formule all'interno del testo, come \(a \in \mathbb N\), oppure inserire formule su righe separate come
\[ E_w = (F - w\,M)^{-1} \, \bigl((1-w)\,F+w\,N \bigr) \]
apatriarca
Moderatore
Moderatore
 
Messaggio: 5083 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Problema con Matlab!

Messaggioda chiaraunipd » 27/08/2018, 13:05

Grazie davvero! Mi sei stato di grande aiuto :) :D :P
chiaraunipd
Starting Member
Starting Member
 
Messaggio: 3 di 10
Iscritto il: 27/08/2018, 11:22


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite