Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. double sigma = 10.0;
  4. double rho = 28.0;
  5. double beta = 8./3.;
  6.  
  7. double fx(const double x, const double y, const double z) {
  8. return sigma*(y-x);
  9. }
  10.  
  11. double fy(const double x, const double y, const double z) {
  12. return x*(rho-z)-y;
  13. }
  14.  
  15. double fz(const double x, const double y, const double z) {
  16. return x*y-beta*z;
  17. }
  18.  
  19. int main() {
  20. double tmax = 50.0;
  21. double dt = 0.001;
  22. int N = tmax/dt;
  23.  
  24. double x,y,z,t;
  25.  
  26. //initial conditions, i.e. x(0),y(0),z(0)
  27. x = 0.0;
  28. y = 2.0;
  29. z = 20.0;
  30.  
  31. // open file
  32. // this file would contain 3 columns
  33. // t, x, y, z
  34. FILE *fp = fopen("butterfly.txt","w");
  35.  
  36. // required for RK4
  37. // see the iteration rule
  38. double k1,k2,k3,k4;
  39. double m1,m2,m3,m4;
  40. double n1,n2,n3,n4;
  41.  
  42. for(int i=0; i<N-1; i++) {
  43.  
  44. t = i*dt;
  45.  
  46. //write to file
  47. fprintf(fp,"%f %f %f %f\n",t,x,y,z);
  48.  
  49.  
  50. k1 = dt*fx(x,y,z);
  51. m1 = dt*fy(x,y,z);
  52. n1 = dt*fz(x,y,z);
  53.  
  54. k2 = dt*fx(x+k1/2, y+m1/2, z+n1/2);
  55. m2 = dt*fy(x+k1/2, y+m1/2, z+n1/2);
  56. n2 = dt*fz(x+k1/2, y+m1/2, z+n1/2);
  57.  
  58. k3 = dt*fx(x+k2/2, y+m2/2, z+n1/2);
  59. m3 = dt*fy(x+k2/2, y+m2/2, z+n2/2);
  60. n3 = dt*fz(x+k2/2, y+m2/2, z+n2/2);
  61.  
  62. k4 = dt*fx(x+k3, y+m3, z+n1);
  63. m4 = dt*fy(x+k3, y+m3, z+n3);
  64. n4 = dt*fz(x+k3, y+m3, z+n3);
  65.  
  66. x = x + (k1+(k2*2)+(k3*2)+k4)/6.0;
  67. y = y + (m1+(m2*2)+(m3*2)+m4)/6.0;
  68. z = z + (n1+(n2*2)+(n3*2)+n4)/6.0;
  69.  
  70. }
  71.  
  72.  
  73. return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement