Advertisement
Pug_coder

Untitled

May 30th, 2023
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. import math
  2. import numpy as np
  3.  
  4.  
  5. def progonka(a, b, c, d, n):
  6. # print(n)
  7. n = len(b)
  8. al = [0]*n
  9. bet = [0]*n
  10. x = [0]*n
  11. # al[0] = -c[0] / b[0]
  12. # bet[0] = d[0] / b[0]
  13. for i in range(n-1):
  14. al[i+1] = -c[i]/(a[i]*al[i]+b[i])
  15. bet[i+1] = (d[i]-a[i]*bet[i])/(a[i]*al[i]+b[i])
  16. # print("alpha: ", al, "beta: ", bet)
  17.  
  18. x[-1] = (d[-1]-a[-1]*bet[-1])/(a[-1]*al[-1]+b[-1])
  19. # print(x[n-1])
  20. for i in range(n-1, 0, -1):
  21. x[i-1] = al[i]*x[i]+bet[i]
  22. # print(x)
  23. return (x)
  24.  
  25.  
  26. def f(x):
  27. return math.exp(x)
  28. #return math.sin(x)
  29.  
  30.  
  31. def diff(x):
  32. return math.exp(x)
  33. #return math.sin(2*x) / 3 + math.cos(2*x) + math.sin(x) / 3
  34.  
  35.  
  36. def main():
  37. p = 1 # 0
  38. q = -1 # 4
  39.  
  40. n = 10 # -> 9й порядок
  41. a = diff(0)
  42. b = diff(1)
  43. # print("a ", a, "b ", b)
  44. h = 1/n
  45. x = [0]*(n+1)
  46. for i in range(n+1):
  47. x[i] = round(i*h, 2)
  48.  
  49. a_matrix = [1 - h/2 * p]*(n-2)
  50. b_matrix = [h**2 * q - 2]*(n-1)
  51. c_matrix = [1 + h/2 * p]*(n-2)
  52. d_matrix = [0]*(n-1)
  53. for i in range(n-1):
  54. d_matrix[i] = h**2 * f(x[i+1])
  55. d_matrix[0] -= a_matrix[0] * a
  56. d_matrix[-1] -= c_matrix[0] * b
  57. # print("a_matrix: ", a_matrix)
  58. # print("b_matrix: ", b_matrix)
  59. # print("c_matrix: ", c_matrix)
  60. # print("d_matrix: ", d_matrix)
  61.  
  62. y = progonka(a_matrix, b_matrix, c_matrix, d_matrix, n-1)
  63. y = np.concatenate(([a], y[:], [b]))
  64. # y[0] = a
  65. # y[-1] = b
  66. # print("y: ", y)
  67. e = [0]*(n+1)
  68. for i in range(n+1):
  69. e[i] = abs(diff(x[i]) - y[i])
  70. # print("xi", x[i], "yi_", y[i], "yi", diff(x[i]), "e", e[i])
  71. print("max error1", max(e))
  72.  
  73. y0 = [1]*(n+1)
  74. yi = [0]*(n+1)
  75. # y0[1] = 1
  76. yi[1] = h
  77. for i in range(1, n):
  78. y0[i+1] = (f(x[i])*h**2 + (2-q*h**2)*y0[i] -
  79. (1-p*h/2)*y0[i-1])/(1+p*h/2)
  80. yi[i+1] = ((2-q*h**2)*yi[i] - (1-p*h/2)*yi[i-1])/(1+p*h/2)
  81.  
  82. c1 = (b - y0[-1])/yi[-1]
  83. yy = [0]*(n+1)
  84. for i in range(n+1):
  85. yy[i] = y0[i]+c1*yi[i]
  86. # print(yy)
  87.  
  88. e2 = [0]*(n+1)
  89. for i in range(n+1):
  90. e2[i] = abs(diff(x[i]) - yy[i])
  91. print("xi", x[i], "yi_", yy[i], "yi", diff(x[i]), "e", e2[i])
  92. print("max error2", max(e2))
  93.  
  94.  
  95. main()
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement