jukaukor

Pallon_lentorata_odeint.py

Oct 24th, 2021
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. # pallon lento, mukana ilmanvastus riippuvuuksineen
  2. import numpy as np
  3. from scipy.integrate import odeint
  4. import matplotlib.pyplot as plt
  5.  
  6. # Pallon lennon parametrit (otettu baseballista)
  7. g = 9.80665 # Painovoiman putouskiihtyvyys (m/s^2)
  8. rho = 1.225 # Ilman tiheys (kg/m^3), ICAO, 0m +15C, 0m korkeus
  9. m = 0.145 # Pallon massa (kg)
  10. Cd = 0.3 # Pallon muotokerroin
  11. A = 0.004185 # pallon poikkinleikkauksen pinta-ala m²
  12. k1 = (Cd*A)/(2*m) #ilmanvastuskertoimen vakio-osa
  13.  
  14. # Lähtöpaikka, lähtönopeuden komponentit
  15. x0, y0 = 0.0, 0.0 # paikan alkuarvot
  16. v0 = 300 # Lähtönopeus (m/s)
  17. alfa = np.radians(30) # lähtökulma
  18. vx0, vy0 = v0 * np.cos(alfa), v0 * np.sin(alfa) # nopeuskomponentit x,y-suunnassa
  19.  
  20. def model(U,t):
  21. x,y,vx,vy = U # mallin tilamuuttujat, joiden derivaatat palautetaan
  22. v = np.sqrt(vx**2+vy**2) # nopeus
  23. k = rho*(288.15/(288.15-0.0065*y))**(-4.25578597)*k1 # ilmanvastuskerroin, mukana lämpötila
  24. dx = vx # x' eli x:n derivaatta, vaakanopeus
  25. dy = vy # y' eli y:n derivaatta, pystynopeus
  26. dvx = -k*v*vx # kiihtyvyys x-suunnassa, vx/dt
  27. dvy = -g - k*v*vy # kiihtyvyys y-suunnassa, vy/dt
  28. # mukana ilmanpaineen lampötilariippuvuus
  29. # palauttaa derivaatat vx,vy,vx/dt,vy/dt
  30. return[dx,dy,dvx,dvy]
  31. U0 = [0,0,vx0,vy0] # paikan ja lähtönopeuden alkuarvot
  32. ts = np.linspace(0,11,1000) # laskennan aikaväli 0-11s, 1000 näytettä
  33. Us = odeint(model, U0, ts)
  34. # Pallon lentorata graafisesti
  35. x = Us[:,0]
  36. y = Us[:,1]
  37. vx = Us[:,2]
  38. vy = Us[:,3]
  39. maksimikorkeus = np.amax(y)
  40. print("maksimikorkeus = ",maksimikorkeus)
  41. maksimikohta = np.where(y>=maksimikorkeus)
  42. print("lentoaika maksimikorkeuteen= ",ts[maksimikohta][0])
  43. print("vaakanopeus maksimikorkeudessa = ",vx[maksimikohta][0])
  44. maahantulokohta = np.where(y<0)
  45. print("kantama = ",x[maahantulokohta][0], " m")
  46. print("lentoaika = ",ts[maahantulokohta][0]," s")
  47. vxmaa = Us[:,2][maahantulokohta][0]
  48. vymaa = Us[:,3][maahantulokohta][0]
  49. print("tulokulma = ",np.degrees(np.arctan(abs(vymaa/vxmaa))))
  50. fig, ax = plt.subplots()
  51. ax.plot(x, y, "r-", label="Pallon lentorata")
  52. ax.set_title(r"rho(0m,15C)=1.225, m=0.145 kg,r=0.0365 m, alfa=30,v0=300 m/s")
  53. ax.set_aspect("equal")
  54. ax.grid(b=True)
  55. ax.legend()
  56. ax.set_xlabel("$x$ (m)")
  57. ax.set_ylabel("$y$ (m)")
  58. plt.show()
  59.  
  60. #plt.plot(x,y)
  61. #plt.show()
  62.  
  63.  
  64.  
  65.  
  66.  
Advertisement
Add Comment
Please, Sign In to add comment