View difference between Paste ID: a0SRm6W9 and 5yJJKyYt
SHOW: | | - or go back to the newest paste.
1
// método de euler para EDOs:
2
// f(x+dx) = f(x) + dxF(f,x) (+ condição inicial)
3
4-
// particula livre 1D
4+
// EDO Colisão unidimensional
5-
// colisão elástica (v=-v) na parede em x=5;
5+
6
#include <stdio.h>
7-
#define x0 0
7+
8-
#define v0 1
8+
#define dt 0.00001
9-
#define dt 0.01
9+
#define v01 30
10
#define v02 10
11
#define m1 5
12
#define m2 8
13
14
int main(void)
15-
  int i=0;
15+
16-
  double x,v,t;
16+
  int i;
17
  double v1,v2,t,x1,x2;
18-
  // v(t+dt)=v(t) cte
18+
19-
  // x(t+dt)=x(t)+dt*v(t)
19+
  x1=-10;
20
  x2=5;
21-
  v=v0;
21+
  
22
  for (i=0;i<2e5;i++)
23-
  for (i=0;i<10000;i++)
23+
24
      v1=v01;
25
      v2=v02;
26-
      x=x+dt*v;
26+
27
      t=++i*dt;
28-
      if (x>=5)
28+
29
      x1+=v1*dt;
30-
	  v=-v;
30+
      x2+=v2*dt;
31
32
      if (x1==x2 || (x1-x2)<=1)
33-
      printf("%lf %lf\n",x,t);
33+
34
	  v1=((m1-m2)/(m1+m2))*v01+ ((2*m2)/(m1+m2))*v02;
35-
      
35+
	  v2=((2*m1)/(m1+m2))*v01-((m1-m2)/(m1+m2))*v02;
36
	}
37
      printf("%lf\t %lf\t %lf\t %lf\t %lf\n",t,x1,x2,v1,v2);
38
    }
39
40
  return 0;
41
}