MATLAB - ciclo for o cos'altro?

di il
3 risposte

MATLAB - ciclo for o cos'altro?

Ciao a tutti,
questo è il mio primo post. Ho iniziato ad usare matlab qualche giorno fa e non capisco come comunicare al programma quello che ho in testa. Ho cercato su internet ma senza risposte. Mi rendo conto che sarà semplice ed elementare, ma io proprio non ne vengo a capo.

Il punto è questo, vediamo se riesco a rendermi chiaro (data la confusione in testa!!):
ho un laminato costituito da "n" lamine. Ogni lamina ha un suo orientamento "teta" rispetto al sistema di riferimento del laminato (che è unico).
E qui arriviamo al problema:

Devo calcolarmi una matrice T (che mi consente di ruotare dal sistema di riferimento della singola lamina a quello del laminato) le cui componenti sono elementi del tipo cos(teta),sen(teta). Come faccio a creare un comando che, per dati "teta" mi calcoli tutte le matrici T?
Cioè, io gli comunico che ho

teta1=pi/2,
teta2=pi/6,
teta3=pi/8

e voglio che lui mi calcoli le tre matrici T calcolate per i rispettivi teta senza dovermi scrivere manualmente le tre matrici con i valori di teta. Questo per far si che,sia che io abbia 3 valori di teta o "n" valori di teta, io possa sempre ottenere le matrici dal comando.

Devo utilizzare un ciclo for? Io ho scritto:
" for teta=1:n
T=[(cos(teta))^2,(sin(teta))^2,-2*cos(teta)*sin(teta);(sin(teta))^2,(cos(teta))^2,2*cos(teta)*sin(teta);-cos(teta)*sin(teta),cos(teta)*sin(teta),((cos(teta))^2)-((sin(teta))^2)];
end

Ma lui mi calcola una sola matrice. Perché?

Non so se sono stato chiaro!

grazie a tutti in anticipo

3 Risposte

  • Re: MATLAB - ciclo for o cos'altro?

    Non devi confondere il "nome" di una variabile con il suo contenuto (valore).

    Quando definisci
    teta1=pi/2, 
    teta2=pi/6, 
    teta3=pi/8 
    definisci tre distinte variabili e le inizializzi, rispettivamente, con i valori "pi/2", "pi/6" e "pi/8".

    L'indice del ciclo "for" (la variabile "teta") è invece una "singola" variabile che assume, nel corso delle "n" iterazioni, i valori da "1" a "n".

    Prendendo in considerazione le prime 3 iterazioni (ammesso che "n" >= 3), la variabile "teta" assumerà i valori 1, 2, 3.

    Non c'è quindi nessuna relazione tra le variabili "teta1", "teta2" e "teta3" che hai definito e la vraibile "teta" che usi come indice del ciclo for.

    Se vuoi utilizzare i valori delle variabili "teta1", "teta2" e "teta3" in un ciclo for puoi definire un vettore che contenga i loro valori:
    
    teta1=pi/2 
    teta2=pi/6 
    teta3=pi/8
    vettore_teta=[teta1,teta2,teta3]
    
    o, direttamente
    
    vettore_teta=[pi/2,pi/6,pi/8]
    
    Nel ciclo for lo puoi usare:
    
    vettore_teta=[pi/2,pi/6,pi/8]
    for teta=1:3
    T=[(cos(vettore_teta(teta)))^2,(sin(vettore_teta(teta)))^2,-2*cos(vettore_teta(teta))*sin(vettore_teta(teta));(sin(vettore_teta(teta)))^2,(cos(vettore_teta(teta)))^2,2*cos(vettore_teta(teta))*sin(vettore_teta(teta));-cos(vettore_teta(teta))*sin(vettore_teta(teta)),cos(vettore_teta(teta))*sin(vettore_teta(teta)),((cos(vettore_teta(teta)))^2)-((sin(vettore_teta(teta)))^2)]
    end
    
    Da ultimo, il motico per il quale lui mi calcola una sola matrice. sta nel fatto che nel ciclo for che hai impostato, la matrice "T" viene sovrascritta ad ogni iterazione.

    Ci sono diversi modi in cui puoi modificare il codice; una potrebbe essere:
    
    vettore_teta=[pi/2,pi/6,pi/8]
    for teta=1:3
    T(:,:,teta)=[(cos(vettore_teta(teta)))^2,(sin(vettore_teta(teta)))^2,-2*cos(vettore_teta(teta))*sin(vettore_teta(teta));(sin(vettore_teta(teta)))^2,(cos(vettore_teta(teta)))^2,2*cos(vettore_teta(teta))*sin(vettore_teta(teta));-cos(vettore_teta(teta))*sin(vettore_teta(teta)),cos(vettore_teta(teta))*sin(vettore_teta(teta)),((cos(vettore_teta(teta)))^2)-((sin(vettore_teta(teta)))^2)]
    end
    
    Ti consiglio caldamente di cominciare dalle basi del linguaggio MatLab:

    http://uk.mathworks.com/help/matlab/getting-started-with-matlab.html
  • Re: MATLAB - ciclo for o cos'altro?

    Grazie mille della esaustiva risposta. Ci studio un po su
  • Re: MATLAB - ciclo for o cos'altro?

    Perfetto. Ho utilizzato ciò che mi hai detto. Il problema però era anche indicizzare le componenti del vettore teta. Ho risolto così, e funziona.

    teta=[teta1,teta2,teta3,teta4];
    n=4;
    for i=(1:n)
    T(:,:,i)=[(cos(teta(i)))^2,(sin(teta(i)))^2,-2*cos(teta(i))*sin(teta(i));(sin(teta(i)))^2,(cos(teta(i)))^2,2*cos(teta(i))*sin(teta(i));-cos(teta(i))*sin(teta(i)),cos(teta(i))*sin(teta(i)),((cos(teta(i)))^2)-((sin(teta(i)))^2)];
    end

    Lo riporto qualora servisse a qualcuno anche se non penso data l'elementarità della cosa. Grazie ancora ask_raf
Devi accedere o registrarti per scrivere nel forum
3 risposte