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..