Correzione esercizio in Octave

di il
1 risposte

Correzione esercizio in Octave

Sono inesperto del linguaggio di programmazione di octave, mi servirebbe un aiuto.
Questo è un codice octave volutamente errato, e da correggere e mostrare i grafici per esercizio:

clear
theta = -2*pi:0.1:2*pi;
F1 = sin(theta^2+1);
F2 = cos(theta^2+2);
F3 = F1*F2;
semylogy(phi,F2, 'r');
hold on
semylogy(phi,F2, 'g');

Ci sono vari errori di sintassi ed errori nelle operazioni, e ne ho notati abbastanza, ma non so se F3 debba essere un vettore (F3 = F1.*F2) oppure una variabile (F3 = F1*F2').
E poi non capisco cosa dovrebbero graficare i due semilogy...
Come dovrebbe essere corretto questo codice? e cosa dovrebbe fare?
Grazie

1 Risposte

  • Re: Correzione esercizio in Octave

    Ci sono diversi errori nello script:
    F1 = sin(theta^2+1);
    F1 = cos(theta^2+1);
    devi inserire un "." affinchè l'operatore "^" venga eseguito su ogni elemento del vettore "theta".
    F1 = sin(theta.^2+1);
    F1 = cos(theta.^2+1);
    Se non aggiungi l'operatore "." l'interprete assume che tu voglia calcolare il quadrato di una matrice, ma trattandosi di un vettore (1 x 126) questo risulta impossibile, da qui il messaggio di errore.

    Lo stesso errore in
    F3 = F1*F2;
    
    che deve essere
    F3 = F1.*F2;
    
    Senza il "." si assume che tu voglia effettuare una moltiplicazione tra matrici, ma F1 e F2 sono due vettori (1 x 126) mentre per moltiplicarli tra loro dovrebbero avere dimensioni (1 x 126) e (126 x 1).

    Potresti scrivere
    F3 = F1*F2';
    
    dove l'apice che segue "F2" è l'operatore "trasposizione"; in questo caso le dimensioni dei due vettori F1 e F2 sarebbero consistenti con l'operazione "moltiplicatione tra matrici" (righe x colonne), ma, essendo i due fattori dei vettori otterresti come risultato uno scalare i che non avrebbe senso con le istruzioni successive che plottano delle curve.

    Proseguendo, la funzione "semylogy" non esiste, il nome corretto è "semilogy".

    Detto questo, il primo parametro "phi" non è definito nello script, da qui un altro messaggio di errore.
    Dal momento che, all'inizio dello script hai definito il vettore "theta" è probabile che il primo parametro da passare alla funzione "semilogy" sia "theta"
    Sulle funzioni per il plottaggio si possono fare altre Un'altra considerazioni di tipo "logico" visto che dal punto di vista sintattico non si tratta di errori.

    Le due istruzioni (una volta corretti gli errori sopra descritti), plottano gli stessi valori (F2 in funzione di theta"): Dal momento che nello script hai calcolato anche F1 che F3 è probabile che, in una delle due si debba inserire come secondo parametro F1 o F3

    F1, F2 e F3 assumono anche valori negativi; dal momento che la funzione "semilogy" plotta il logaritmo dei valori delle ordinate, otterrai dei valori immaginari che non potranno essere rappresentati nel grafico per cui verrà generato un "warning"

    Una soluzione potrebbe essere quella di passare come parametro il valore assoluto di "F1" o "F2" o "F3".

    Una possibile versione dello script potrebbe essere:
    theta = -2*pi:0.1:2*pi;
    F1 = sin(theta.^2+1);
    F2 = cos(theta.^2+2);
    F3 = F1.*F2;
    semilogy(theta,abs(F1), 'r');
    hold on
    semilogy(theta,abs(F2), 'g');
    semilogy(theta,abs(F3), 'b');

    GRAFICO_SEMILOGY.JPG
    GRAFICO_SEMILOGY.JPG

Devi accedere o registrarti per scrivere nel forum
1 risposte