Advertisement
dgorjup

pypinm-koda

Nov 23rd, 2017 (edited)
29,816
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.62 KB | None | 0 0
  1. # Funkcija Euler
  2. def euler(fun, x, y0, *args, **kwargs):
  3.     """
  4.    Eulerjeva metoda za reševanje navadnih diferencialnih enačb.
  5.  
  6.    :param fun: Funkcija prvega odvoda y'(x, y)
  7.    :param x: Neodvisna spremenljivka
  8.    :param y0: Začetne vrednosti odvisne spremenljivke y(x=0)
  9.    :return: y: vrednosti odvisne spremenljivke pri podanih vrednosti x
  10.    """
  11.     y = np.zeros((len(x), len(y0)))
  12.     y[0] = np.array(y0).copy()
  13.     for i, xi in enumerate(x[:-1]):
  14.         h = x[i+1] - x[i]
  15.         y[i+1] = y[i] + fun(xi, y[i], *args, **kwargs) * h
  16.     return y.T
  17.  
  18.  
  19. # Primer uporabe `scipy.integrate.solve_ivp` z dogodkom:
  20. def upward_cannon(t, y):
  21.     return [y[1], -0.5]
  22. def hit_ground(t, y):
  23.     return y[1]
  24. hit_ground.terminal = True
  25. hit_ground.direction = -1
  26. sol = solve_ivp(upward_cannon, [0, 100], [0, 10], events=hit_ground)
  27. print(sol.t_events)
  28.  
  29.  
  30. # Primer reševanje robnega problema (konzola, solve_bvp)
  31. # Podatki:
  32. E = 2.1e5 # N/mm2
  33. I = 5.0e6 # mm^4
  34. l = 1300  # mm
  35. q = 150   # kg/mm
  36.  
  37. # Funkcija porazdeljene obtežbe:
  38. def obremenitev(x, q=q):
  39.     return np.ones_like(x) * q
  40.  
  41. # Funkcija prvih odvodov novih spremenljivk - definicija d. e.:
  42. def nosilec(x, y, E=E, I=I, q=q):
  43.     return np.array([y[1], y[2], y[3], obremenitev(x)/E/I])
  44.  
  45. # Robni preostanki - definicija robnih pogojev:
  46. def robni_preostanki(y_A, y_B):
  47.     return np.array([y_A[0], y_A[1], y_B[0], y_B[2]])
  48.  
  49. # Neodvisna spremenljivka in začetni približki:
  50. x = np.linspace(0, l, 500)
  51. y0 = np.zeros((4, x.size), dtype=float)
  52.  
  53. # Rešitev - izračun vpeljanih novih spremeljivk:
  54. rešitev = solve_bvp(nosilec, robni_preostanki, x, y0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement