Esercizio grafico matlab vibrazioni

di il
9 risposte

Esercizio grafico matlab vibrazioni

Ciao!
Sto usando da pochissimo Matlab causa esame all'università.
Devo graficare questa funzione exp(-zeta*omn*t(1,i)*[A*cos(oms*t(1,i)+B*sin(oms*t(1,i)]
per i valori di t=0, 2, 3, 5 e non so proprio come fare.
Vi lascio quello che ho incominciato a scrivere, e mi rendo ben conto che così serve a poco, infatti ho solo impostato le variabili

clear all;
clc;

m=0.65; %massa sistema [kg]
k=8e7; %rigidezza [N/m]
zeta=0.005; %rapporto di smorzamento
x0=0.05; %spostamento iniziale [m]
v0=-2.8; %velocità iniziale [m/s]
omn=sqrt(k/m)
oms=omn*sqrt(1-zeta^2)
A=x0 %costante di integrazione
B=(v0+zeta*omn*x0)/(oms) %costante di integrazione

t=[0 2 3 5]
x(1,i)=exp(-zeta*omn*t(1,i)*[A*cos(oms*t(1,i)+B*sin(oms*t(1,i)];

plot(t,x)
hold on

9 Risposte

  • Re: Esercizio grafico matlab vibrazioni

    Mancano delle parentesi nella definizione della funzione il che dovrebbe generarti un messaggio di errore.

    A parte questo, qual è il problema?

    La riga di codice (nella quale, comunque, mancano delle parentesi) sembra parte di un ciclo "for"
    
    x(1,i)=exp(-zeta*omn*t(1,i)*[A*cos(oms*t(1,i)+B*sin(oms*t(1,i)]
    
    ma non hai scritto (o, peggio, lo hai scritto ma non lo hai pubblicato) la parte iniziale e quella finale
    
    for i=length(t)
       ...
    end
    
    Dovresti pubblicare tutto il codice e, soprattutto, spiegare quale sia il problema soecifico.

    Nota che, se il tutto si riduce a calcolare i valori della funzione ed a plottarli, non c'è bisogno di un loop, basta sfruttare le proprietà di indexing di MatLab.
  • Re: Esercizio grafico matlab vibrazioni

    Inizialmente avevo scritto un ciclo for prendendo spunto da un codice che il prof aveva scritto per un altro esercizio, poi mi sono accorta che il ciclo for non andava bene perchè come dicevi tu bisogna calcolare solo i valori della funzione per quei dati t ma non so come si fa.
    Spero di aver spiegato bene il mio dubbio...
  • Re: Esercizio grafico matlab vibrazioni

    A parte il problema con le parentesi (vedi risposta precedente - nell'equazione che hai scritto, ne manca qualcuna), si può impostare il ciclo "for" come segue:
    
    clear all;
    clc;
    
    m=0.65; %massa sistema [kg]
    k=8e7; %rigidezza [N/m]
    zeta=0.005; %rapporto di smorzamento
    x0=0.05; %spostamento iniziale [m]
    v0=-2.8; %velocità iniziale [m/s]
    omn=sqrt(k/m)
    oms=omn*sqrt(1-zeta^2)
    A=x0 %costante di integrazione
    B=(v0+zeta*omn*x0)/(oms) %costante di integrazione
    
    t=[0 2 3 5]
    for i=1:length(t)
       x(1,i)=exp(-zeta*omn*t(1,i)*[A*cos(oms*t(1,i)+B*sin(oms*t(1,i)];
    end
    plot(t,x)
    hold on
    
    Il codice riportato sopra dovrebbe darti un messaggi di errore, in quanto come già detto, mancano delle parentesi in
    
    x(1,i)=exp(-zeta*omn*t(1,i)*[A*cos(oms*t(1,i)+B*sin(oms*t(1,i)];
    
    Controlla l'equazione e verifica dove aggiungerle.

    Volendo, si potrebbe ottenere lo stesso risultato senza usare il ciclo "for" sfruttando la proprietà di "indxing" di MatLab, ma, per cominciare, usare un ciclo "for" fa lo stesso.
  • Re: Esercizio grafico matlab vibrazioni

    Grazie mille! ho aggiustato la questione delle parentesi ma mi da questo messaggio di errore (me lo dava anche procedendo in un modo diverso che avevo fatto prima di leggere il tuo messaggio)

    Undefined function or variable 'esercizi'.

    ho chiamato esercizi 4b il nome del file, ho cercato su internet il senso di questo messaggio ma non riesco a capacitarmi, il programma è quello che ho riportato sopra con l'aggiunta del ciclo for che mi hai fatto vedere..
    Secondo te da cosa può dipendere?
  • Re: Esercizio grafico matlab vibrazioni

    Prova a cambiare il nome del file eliminando lo spazio bianco (e. s. "esercizi_4b.m").

    Verifica anche che il file sia in una cartella definita nel "path" di MatLab.
  • Re: Esercizio grafico matlab vibrazioni

    Scusami se ti disturbo ancora,
    come dovrei fare se volessi graficare quella funzione per ogni valore di t?
  • Re: Esercizio grafico matlab vibrazioni

    E' già nel codice inserito nella risposta precedente: plot(t,x)

    dopo il ciclo for
  • Re: Esercizio grafico matlab vibrazioni

    Ho sbagliato ad esprimermi.
    Se volessi impostare un altro ciclo for che abbia lo scopo di graficare quella funzione, ma per ogni valore di t, ottenendo il grafico di una funzione continua, come dovrei fare?
    spero di essermi spiegata bene..
    ho provato a prendere spunto da un esercizio che ha fatto il professore ma ovviamente si trattava di una cosa diversa e quindi non mi esce, te lo metto per farti capire cosa intendo

    deltat=TT/40;
    NN=1000;
    x=zeros(1,NN+1);
    t=zeros(1,NN+1);
    X=zeros(1,NN+1);

    for i=1:NN+1;
    t(1,i)=(i-1)*deltat;
    x(1,i)=X1*cos(om1*t(1,i)+fi01)+X2*cos(om2*t(1,i)+fi02);
    X(1,i)=sqrt(X1^2+X2^2+2*X1*X2*cos(deltaom*t(1,i)));
    end

    non capisco perchè abbia definito la t in questo modo, tenendo presente cge t rappresenta il tempo
  • Re: Esercizio grafico matlab vibrazioni

    Puoi provare a definire più punti per "t".

    Ad esempio, per un intervallo di "t" tra 1 e 5, puoi usare:
    
    t=1:0.01:5
    
    Che ti crea un vettore con valori da 1 a 5 con passo 0.01.

    Puoi impostare il loop come negli esempi precedenti:
    
    for i=1:length(t)
    ...
    end
    
    La funzione "length" ritorna la lunghezza del vetture in input (cioè il numero dei suoi elementi.

    Nell'esempio che hai pubblicato, "t" viene definita in modo simile:

    deltat rappresenta l'incremento che, ad ogni iterazione viene moltiplicato per l'indice del loop.

    Nell'esempio viene usato (i-1) semplicemente per far cominciare il loop da 0.
Devi accedere o registrarti per scrivere nel forum
9 risposte