Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. from math import *
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4.  
  5. #Диф.уравнение
  6. def difur (x,y):
  7. return (x*(y**2)-y)
  8.  
  9. #Метод Эйлера
  10. def fx (du, x_0,y_0,x_k,n_1):
  11. h= (x_k-x_0) /n_1
  12. xlist, ylist=[],[]
  13. for i in range (0,n_1):
  14. y1=y_0+h*du (x_0,y_0)
  15. x1=x_0+h
  16. x_0=x1
  17. y_0=y1
  18. xlist.append(x_0)
  19. ylist.append(y_0)
  20. return xlist, ylist
  21.  
  22. # метод рунге-кутта
  23. def rk (du, x_0,y_0,x_k,n_1):
  24. h= (x_k-x_0) /n_1
  25. xlist, ylist=[],[]
  26. for i in range (0,n_1):
  27. k1=h*du (x_0,y_0)
  28. k2=h*du (x_0+h/2,y_0+k1/2)
  29. k3=h*du (x_0+h/2,y_0+k2/2)
  30. k4=h*du (x_0+h,y_0+k3)
  31. y1=y_0+ (k1+2*k2+2*k3+k4) /6
  32. x_0=x_0+h
  33. y_0=y1
  34. xlist.append(x_0)
  35. ylist.append(y_0)
  36. return xlist, ylist
  37.  
  38. def TochnoeReshenie(f,a,y0,b,n):
  39. res=[]
  40. h=(b-a)/n
  41. ilist = np.arange(0, n, 1)
  42. xlist = [(a+h*i) for i in ilist]
  43. for x in xlist:
  44. func = 1/(exp(x)+x+1)
  45. res.append(func)
  46. return res
  47.  
  48. def calc_y1 (du, x0, y0, xk, n):
  49. try:
  50. rx, ry = rk(du,x0,y0,xk,n)
  51. ex, ey = fx(du,x0,y0,xk,n)
  52. plt.plot(ex, ey, rx, ry)
  53. plt.xlabel('t')
  54. plt.ylabel('y')
  55. plt.legend(('метод Эйлера','метод Рунге-Кутта 4-го порядка'), loc=2)
  56. plt.grid(True)
  57. plt.show()
  58. except:
  59. print('Неверно заданы значения')
  60.  
  61. #x0 - величина начального значения числа X
  62. #y0 - величина начального значения числа Y
  63. #xk - величина конечной точки
  64. #n - точность интегрирования
  65. x0, y0, xk, n = 0, 1, 2, 30
  66. calc_y1(difur, x0, y0, xk, n)
  67. plt.plot(TochnoeReshenie(difur, x0, y0, xk, n), "r-", label="точное решение")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement