Advertisement
PrincePepper

Untitled

Dec 21st, 2021
860
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.36 KB | None | 0 0
  1. import math
  2.  
  3.  
  4. # def RK4_step(f, y, t, dt, N):
  5. #     dt /= N
  6. #     for k in range(N):
  7. #         k1 = f(y, t) * dt
  8. #         k2 = f(y + k1 / 2, t + dt / 2) * dt
  9. #         k3 = f(y + k2 / 2, t + dt / 2) * dt
  10. #         k4 = f(y + k3, t + dt) * dt
  11. #         y, t = y + (k1 + 2 * (k2 + k3) + k4) / 6, t + dt
  12. #     return y
  13.  
  14. def RK4_step(f, y, t, dt, N):
  15.     temp_y = [y]
  16.     temp_t = [t]
  17.     for k in range(N):
  18.         k1 = f(y, t) * dt
  19.         k2 = f(y + k1 / 2, t + dt / 2) * dt
  20.         k3 = f(y + k2 / 2, t + dt / 2) * dt
  21.         k4 = f(y + k3, t + dt) * dt
  22.         y, t = y + (k1 + 2 * (k2 + k3) + k4) / 6, t + dt
  23.         temp_y.append(y + (k1 + 2 * (k2 + k3) + k4) / 6)
  24.         temp_t.append(t + dt)
  25.     return temp_y, temp_t
  26.  
  27.  
  28. def AB_3(mass_y, mass_t, f, h, N):
  29.     y = 0
  30.     while mass_y[-1] >= 40.0:
  31.         y = mass_y[-1] + h * (23 / 12 * f(mass_y[-1], mass_t[-1]) - 4 / 3 * f(mass_y[-2], mass_t[
  32.             -2]) + 5 / 12 * f(mass_y[-3], mass_t[-3]))
  33.         mass_y.append(y)
  34.         mass_t.append(mass_t[-1] + h)
  35.     return mass_t[-1]
  36.  
  37.  
  38. def AB_4(mass_y, mass_t, f, h, N):
  39.     y = 0
  40.     while mass_y[-1] >= 40.0:
  41.         y = mass_y[-1] + h * (55 / 24 * f(mass_y[-1], mass_t[-1]) - 59 / 24 * f(mass_y[-2], mass_t[
  42.             -2]) + 37 / 24 * f(mass_y[-3], mass_t[-3]) - 3 / 8 * f(mass_y[-4], mass_t[-4]))
  43.         mass_y.append(y)
  44.         mass_t.append(mass_t[-1] + h)
  45.     return mass_t[-1]
  46.  
  47.  
  48. def AB_5(mass_y, mass_t, f, h, N):
  49.     y = 0
  50.     while mass_y[-1] >= 40.0:
  51.         y = mass_y[-1] + h * (
  52.                 1901 / 720 * f(mass_y[-1], mass_t[-1]) - 1387 / 360 * f(mass_y[-2], mass_t[
  53.             -2]) + 109 / 30 * f(mass_y[-3], mass_t[-3]) - 637 / 360 * f(mass_y[-4], mass_t[
  54.             -4]) + 251 / 720 * f(mass_y[-5], mass_t[-5]))
  55.         mass_y.append(y)
  56.         mass_t.append(mass_t[-1] + h)
  57.     return mass_t[-1]
  58.  
  59.  
  60. def euler(f, y0, a, b, h):
  61.     t, y = a, y0
  62.     while t <= b:
  63.         print(t, y)
  64.         t += h
  65.         y += h * f(t, y)
  66.  
  67.  
  68. def func(T, time):
  69.     return -1 / 10 * math.log(3) * (T - 25)
  70.  
  71.  
  72. # euler(func, 70, 0, 10, 0.000001)
  73. mass_y, mass_t = RK4_step(func, 70, 0, 0.001, 2)
  74. print(AB_3(mass_y, mass_t, func, 0.001, 10))
  75.  
  76. mass_y, mass_t = RK4_step(func, 70, 0, 0.001, 3)
  77. print(AB_4(mass_y, mass_t, func, 0.001, 10))
  78.  
  79. mass_y, mass_t = RK4_step(func, 70, 0, 0.001, 4)
  80. print(AB_5(mass_y, mass_t, func, 0.001, 10))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement