Hinamarth

Euler Cromer integration method

Oct 2nd, 2012
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.48 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. main(){
  6.   double k, m, t, dt=0.01, i, x, v, vprova=0;
  7.   FILE *fp;
  8.   printf("Questo programma simulerà il moto di un oscillatore armonico utilizzando il metodo di integrazione di eulero, e ne stamperà poi il grafico.\n");
  9.   printf("Per iniziare, però, ho bisogno che tu inserisca il coefficiente elastico k>0 in kg*s^-2 e la massa dell'oggetto m>0 in kg.\n");
  10.   printf("Inserisci la costante elastica.\n k = ");
  11.   scanf("%lf", &k);
  12.   while(k<=0){
  13.     printf("Il valore di k è errato! Reinseriscilo!\n k = ");
  14.     scanf("%lf", &k);
  15.   }
  16.   printf("Inserisci la massa del corpo in movimento.\n m = ");
  17.   scanf("%lf", &m);
  18.   while(m<=0){
  19.     printf("Il valore di m è errato! Reinsericilo!\n m = ");
  20.     scanf("%lf", &m);
  21.   }
  22.   printf("Inserisci anche il tempo t>=0 in cui vuoi conoscere la posizione del corpo.\n t = ");
  23.   scanf("%lf", &t);
  24.   while(t<0){
  25.     printf("Il valore di t è errato! Reinsericilo!\n t = ");
  26.     scanf("%lf", &t);
  27.   }
  28.   if((fp=fopen("eulero_cromer.dat", "w"))==NULL){
  29.     printf("Errore nell'apertura del file eulero_cromer.dat.\n");
  30.     exit(EXIT_FAILURE);
  31.   }
  32.   printf("Inserisci la condizione inziale dello spazio.\n x = ");
  33.   scanf("%lf", &x);
  34.   printf("Inserisci la condizione iniziale della velocità.\n v = ");
  35.   scanf("%lf", &v);
  36.   fprintf(fp, "# t           x           v\n");
  37.   for(i=0.; i<t; i+=dt){
  38.     v-=(x*k*dt)/m;
  39.     x+=v*dt;
  40.     fprintf(fp, "%lf   %lf   %lf\n", i, x, v);
  41.   }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment