Loop con damp

di il
4 risposte

Loop con damp

Buongiorno a tutti,

ho un problema devo fermare il calcolo damp quando raggiungo un valore di z=0,08.
Ho scritto il seguente codice
[Wn,z] = damp(sys)
if z==0.08
c=2*z*sqrt(k*J)
else
c=1
end

e mi restituisce c=1.
Ho letto che sarebbe meglio usare while con break ma non capisco come impostare il contatore.
Ringrazio anticipatamente.
Saluti.

4 Risposte

  • Re: Loop con damp

    La domanda non è chiara.
    [*] in che senso vuoi "fermare" il calcolo?
    [*] per quale motivo vuoi impostare un ciclo "while"?
    [*] stai utilizzando, al momento un ciclo "for"? Se sì, dovresti pubblicare il codi ce completo o, almeno una parte significativa

    Considera che testare "if z==0.08" non ha molto senso per questioni di approssimazione numerica.
    Sarebbe meglio confrontare il valore di "z" con "0.08" nei confronti di una soglia (z > 00.8 - 1e-4 && z > 0.08 + 1e-4; scegli tu il valore ottimale)
  • Re: Loop con damp

    Ho un sistema motore-rid-albero elastico-carico.
    Mi viene chiesto di: calcolare le frequenze proprie del sistema (fatto) e calcolare un valore di smorzamento di smorzamento che dia z=0.08.
    quindi con damp mi calcolo "z" ma devo fare in modo di trovare lo smorzamento "c" quando ho z=0.08(ecco perché faccio if z==0.8 ).
    Al momento non sto usando ne "if" ne "while" perché dovrei impostare un contatore ma non so su quale base farlo, non so quante interazioni, devo solo fermare il calcolo "[Wn,z]=damp(A)" , A matrice dinamica quando mi trova uno z=0.08.
  • Re: Loop con damp

    Non capisco a cosa ti serva un "contatore".
    Devi usare in qualche altra parte del codice il suo valore finale?

    Da codice che hai pubblicato non si capisce se "c" sia un parametro del sistema; se così fosse dovresti inizializzarne il valore prima del loop.
    Scrivi di dover "trovare" il valore di "c" per il quale z == 0.8 però nel tuo codice, valuti "c" dopo la chiamata ala funzione "dump".

    Dove vengono settati (o valutati) "k" e "J".

    In sostanza, la porzione di codice che hai pubblicato non consente di capire quello ce stai cercando di fare.

    Si può impostare un ciclo "while infinito" il quale venga interrotto tramite il comando "break" al verificarsi della condizione desiderata.
    Qualcosa del tipo:
    
    while(1)
       ...
       [Wn,z] = damp(sys)
       if( z > 0.8 - 1e-4 && z < 0.8 + 1e-4)
          c=2*z*sqrt(k*J)
          break
       else
          c=1
       end
    end
    
    ma solo un'ipotesi.
    In questo caso il ciclo si interrompe quando viene verificata la condizione (z > 0.8 - 1e-4 && z < 0.8 + 1e-4).

    Insisto nel suggerirti di non verificare l'uguaglianza tra due numeri reali (if z==0..
  • Re: Loop con damp

    Ok grazie vedrò di ragionarci.
Devi accedere o registrarti per scrivere nel forum
4 risposte