Advertisement
Guest User

Untitled

a guest
Dec 6th, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 5.67 KB | None | 0 0
  1. // Projektna naloga - Binarna zvezda
  2. clear
  3. // Vhodni podatki
  4.  
  5.     // Parametri simulacije
  6. tMax = 200;             // Čas simuliranja [yr]
  7. dt = 0.01;              // Časovni korak [yr]
  8. n = tMax / dt + 1;      // Število korakov
  9. epsilon = 5e-03;
  10.  
  11.     // Konstante
  12. G0 = 6.67e-11;          // Gravitacijska konstanta [N m^2 / kg^2]
  13. M0 = 1.98892e30;        // Enota za maso sonca [kg]
  14. au = 149597870700;      // Astronomska enota [m]
  15. yr = 365.25 * 24 * 3600 // Leto [s]
  16.  
  17.     // Pretvorba gravitacijske konstante
  18. G = G0 * M0 * yr ^ 2 / au ^ 3 // [au^3 / M yr^2]
  19.  
  20.     // Zvezda 1
  21. r1 = zeros(2);          // Položaj zvezde 1 [au]
  22. r1(1) = 0;
  23. r1(2) = 0;
  24. v1 = zeros(2);          // Hitrost zvezde 1 [au/yr]
  25. v1(1) = 1.857;
  26. v1(2) = 0.058;
  27. m1 = 2.063;             // Masa zvezde 1 [M0]
  28. F1 = zeros(2);          // Sila na zvezdo 1 [M0 au / yr^2]
  29. a1 = zeros(2);          // Pospešek zvezde 1 [au / yr^2]
  30. v1abs = zeros(n + 1)    // Absolutna hitrost zvezde 1 [au / yr]
  31.  
  32.     // Zvezda 2
  33. r2 = zeros(2);          // Položaj zvezde 2 [au]
  34. r2(1) = 7.48;
  35. r2(2) = 5.46;
  36. v2 = zeros(2);          // Hitrost zvezde 2 [au/yr]
  37. v2(1) = -2.216;
  38. v2(2) = -0.1175;
  39. m2 = 1.018;             // Masa zvezde 2 [M0]
  40. F2 = zeros(2);          // Sila na zvezdo 2 [M0 au / yr^2]
  41. a2 = zeros(2);          // Pospešek zvezde 2 [au / yr^2]
  42. v2abs = zeros(n + 1)    // Absolutna hitrost zvezde 2 [au / yr]
  43.  
  44. u = zeros(2);           // Smerni vektor od zvezde 1 do zvezde 2
  45. e = zeros(2);           // Enotski vektor
  46.  
  47.  
  48.  
  49. // Izpis
  50.  
  51. i = 0                   // Števec
  52. counter = 0             // Števec
  53. F1x = zeros(n);
  54. F1y = zeros(n);
  55. F2x = zeros(n);
  56. F2y = zeros(n);
  57.  
  58. a1x = zeros(n);
  59. a1y = zeros(n);
  60. a2x = zeros(n);
  61. a2y = zeros(n);
  62.  
  63. v1x = zeros(n);
  64. v1y = zeros(n);
  65. v2x = zeros(n);
  66. v2y = zeros(n);
  67. v1x(1) = v1(1);
  68. v1y(1) = v1(2);
  69. v2x(1) = v2(1);
  70. v2y(1) = v2(2);
  71.  
  72. r1x = zeros(n);
  73. r1y = zeros(n);
  74. r2x = zeros(n);
  75. r2y = zeros(n);
  76. r1x(1) = r1(1);
  77. r1y(1) = r1(2);
  78. r2x(1) = r2(1);
  79. r2y(1) = r2(2);
  80. rRelx = zeros(n);
  81. rRely = zeros(n);
  82. rRelx(1) = r2x(1) - r1x(1);
  83. rRely(1) = r2y(1) - r1y(1);
  84.  
  85. ts = zeros(n + 1)       // Čas
  86. v1abs(1) = sqrt(v1(1) ^ 2 + v1(2) ^ 2);
  87. v2abs(1) = sqrt(v2(1) ^ 2 + v2(2) ^ 2);
  88.  
  89. p1 = zeros(1, 3)
  90. p2 = zeros(1, 3)
  91.  
  92. function odvod = izracunOdvoda(x, y, q)
  93.     odvod = (y(q) - y(q - 1))/(x(q) - x(q - 1));
  94. endfunction
  95.  
  96. function r = izracunRazdalje (r1, r2)
  97.     x = r2(1) - r1(1);
  98.     y = r2(2) - r1(2);
  99.     r = sqrt(x ^ 2 + y ^ 2);
  100. endfunction
  101.  
  102. function F1 = izracunSile(e, r)
  103.     F1(1) = G * m1 * m2 * e(1) / r^2;
  104.     F1(2) = G * m1 * m2 * e(2) / r^2;
  105. endfunction
  106.  
  107.  
  108. // Program
  109.  
  110. for t = 0 : dt : tMax
  111.    
  112.     i = i + 1
  113.     ts(i) = t;
  114.     // Smerni vektor
  115.     u(1) = r2(1) - r1(1);
  116.     u(2) = r2(2) - r1(2);
  117.    
  118.     // Razdalja med zvezdama
  119.     r = izracunRazdalje(r1, r2);
  120.    
  121.     // Enotski vektor
  122.     e(1) = u(1) / r;
  123.     e(2) = u(2) / r;
  124.    
  125.     // Izračun sile
  126.     F1 = izracunSile(e, r);
  127.     F2(1) = -F1(1);
  128.     F2(2) = -F1(2);
  129.    
  130.     // Izračun pospeška
  131.     a1(1) = F1(1) / m1;
  132.     a1(2) = F1(2) / m1;
  133.     a2(1) = F2(1) / m2;
  134.     a2(2) = F2(2) / m2;
  135.    
  136.     // Hitrost in lega imata podane začetne vrednosti
  137.     if(i > 1) then
  138.     // Izračun hitrosti
  139.     v1(1) = v1x(i - 1) + a1(1) * dt;
  140.     v1(2) = v1y(i - 1) + a1(2) * dt;
  141.     v2(1) = v2x(i - 1) + a2(1) * dt;
  142.     v2(2) = v2y(i - 1) + a2(2) * dt;
  143.     v1abs(i) = sqrt(v1(1) ^ 2 + v1(2) ^ 2);
  144.     v2abs(i) = sqrt(v2(1) ^ 2 + v2(2) ^ 2);
  145.     // Izračun lege
  146.     r1(1) = r1x(i - 1) + v1(1) * dt;
  147.     r1(2) = r1y(i - 1) + v1(2) * dt;
  148.     r2(1) = r2x(i - 1) + v2(1) * dt;
  149.     r2(2) = r2y(i - 1) + v2(2) * dt;
  150.    
  151.    
  152.     end
  153.    
  154.     // Zapis podatkov za graf
  155.     F1x(i) = F1(1);
  156.     F1y(i) = F1(2);
  157.     F2x(i) = F2(1);
  158.     F2y(i) = F2(2);
  159.    
  160.     a1x(i) = a1(1);
  161.     a1y(i) = a1(2);
  162.     a2x(i) = a2(1);
  163.     a2y(i) = a2(2);
  164.    
  165.     if(i > 1) then
  166.     // Izračun hitrosti
  167.     v1x(i) = v1(1);
  168.     v1y(i) = v1(2);
  169.     v2x(i) = v2(1);
  170.     v2y(i) = v2(2);
  171.    
  172.     // Izračun lege
  173.     r1x(i) = r1x(i - 1) + v1(1) * dt;
  174.     r1y(i) = r1y(i - 1) + v1(2) * dt;
  175.     r2x(i) = r2x(i - 1) + v2(1) * dt;
  176.     r2y(i) = r2y(i - 1) + v2(2) * dt;
  177.    
  178.     rRelx(i) = r2x(i) - r1x(i);
  179.     rRely(i) = r2y(i) - r1y(i);
  180.     end
  181.     R1x = r1x(i);
  182.     R1y = r1y(i);
  183.    
  184.     R2x = r2x(i);
  185.     R2y = r2y(i);
  186.    
  187.     //plot(t, R1x)
  188. end
  189.  
  190.     // Izračun periode
  191. q = 2
  192. odvod = 100;
  193. while (q < n)
  194.     odvod = izracunOdvoda(r1x, r1y, q);    
  195.     if(abs(odvod) < epsilon) then
  196.         counter = counter + 1;
  197.         p1(counter, 1) = r1y(q);
  198.         p1(counter, 2) = q;
  199.         p1(counter, 3) = r1x(q);
  200.         q = q + 20;
  201.      else
  202.         q = q + 1;
  203.      end
  204. end
  205. vsota = 0;
  206. velikost = size(p1);
  207. velikost = velikost(1);
  208. for i = 3 : velikost
  209.     vsota = vsota + p1(i, 3) - p1(i - 2, 3);
  210. end
  211. perioda = vsota / (velikost - 2);
  212. disp(perioda);
  213.  
  214. // Izris grafov
  215. f1 = figure(1);
  216. plot(r1x, r1y, 'r');
  217. plot(r2x, r2y, 'b');
  218. xlabel("x [au]","fontsize",4,"color","white");
  219. ylabel("y [au]","fontsize",4,"color","white");
  220. title("Lega zvezd","fontsize",4,"color","white");
  221. legend("Zvezda 1", "Zvezda 2");
  222. colordef('black')
  223. f1.background = 0;
  224. /*
  225. f2 = figure(2);
  226. plot(ts, v1abs, 'r');
  227. plot(ts, v2abs, 'b');
  228. xlabel("v [au/yr]","fontsize",4,"color","white");
  229. ylabel("t [yr]","fontsize",4,"color","white");
  230. title("Hitrost zvezd","fontsize",4,"color","white");
  231. legend("Zvezda 1", "Zvezda 2");
  232. colordef('black')
  233. f2.background = 0;
  234.  
  235. f3 = figure(3);
  236. plot(rRelx, rRely);
  237. xlabel("$\Delta x [yr]$","fontsize",4,"color","white");
  238. ylabel("$\Delta y [yr]$","fontsize",4,"color","white");
  239. title("Relativna lega zvezd","fontsize",4,"color","white");
  240. colordef('black')
  241. f3.background = 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement