Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.22 KB | None | 0 0
  1. import numpy as np
  2. from math import pi
  3. from math import cos
  4. from math import sqrt
  5. import matplotlib.pyplot as plt
  6.  
  7. a = 0
  8. b = 1.5
  9. h = 0.15
  10. countStep = int((b - a) / h + 1)
  11. eps = 10 ** (-6)
  12. arrX = np.arange(a, b + h, h)
  13.  
  14. #ТАБУЛИРОВАНИЕ
  15. def tab(x):
  16.     aN = x
  17.     sum = aN
  18.     i = 0
  19.     while (abs(aN) > eps):
  20.         aN *= - (((pi ** 2 ) * (4*i + 1) * (x**4)) / (4 * (2*i + 1) * (2*i + 2) * (4*i + 5)))
  21.         i += 1
  22.         sum += aN
  23.     return(sum)
  24.  
  25. f = [None] * int((b - a) / h + 1)
  26. for i in range(len(arrX)):
  27.     arrX[i] = round(arrX[i], 5)
  28.     f[i] = tab(arrX[i])
  29.  
  30. #ФУНКЦИЯ
  31.  
  32. def func(x):
  33.     return cos(pi * x ** 2 / 2)
  34.  
  35. #ЛЕВЫЕ
  36. print('Квадратурная формула левых прямоугольников')
  37. def Pr(x, n):
  38.     sum = 0
  39.     hN = (x - a) / n
  40.     i = 0
  41.     for j in range(n + 1):
  42.         sum += func(i) * hN
  43.         i += hN
  44.     return sum
  45.  
  46. for i in range(countStep):
  47.     n = 2
  48.     while True:
  49.         In = Pr(arrX[i], n)
  50.         I2n = Pr(arrX[i], 2*n)
  51.         n *= 2
  52.         if (abs(I2n - In) <= eps or n > 1024):
  53.             break
  54.     n = int(n / 2)
  55.     #if (abs(I2n - In) > eps):
  56.     print('{} {:<5} {:>10} {:<20} {:>5} {:<20} {:>15} {:<25} {:>15} {}'.format('x =', arrX[i], 'C(x) =', f[i], 'I =', Pr(arrX[i],n), 'Разность =', abs(f[i] - Pr(arrX[i], n)), 'n =', n))
  57.  
  58. print()
  59.  
  60. #ЦЕНТРАЛЬНЫХ
  61. print('Квадратурная формула центральных прямоугольников')  
  62. def Centr(x, n):
  63.     sum = 0
  64.     hN = (x - a) / n
  65.     i = hN
  66.     for j in range(n):
  67.         sum += func((2 * i - hN) / 2) * hN
  68.         i += hN
  69.     return sum
  70.  
  71. for i in range(countStep):
  72.     n = 2
  73.     while True:
  74.         In = Centr(arrX[i], n)
  75.         I2n = Centr(arrX[i], 2*n)
  76.         n *= 2
  77.         if (abs(I2n - In) <= eps or n > 1024):
  78.             break
  79.     n = int(n / 2)
  80.     print('{} {:<5} {:>10} {:<20} {:>5} {:<20} {:>15} {:<25} {:>15} {}'.format('x =', arrX[i], 'C(x) =', f[i], 'I =', Centr(arrX[i],n), 'Разность =', abs(f[i] - Centr(arrX[i], n)), 'n =', n))
  81.  
  82. print()
  83.  
  84. #ТРАПЕЦИЙ
  85. print('Квадратурная формула трапеций')
  86. def Trap(x,n):
  87.     sum = 0
  88.     hN = (x - a) / n
  89.     i = hN
  90.     for j in range(n):
  91.         sum += ((func(i) + func(i - hN)) * (hN / 2))
  92.         i += hN
  93.     return sum    
  94.  
  95. for i in range(countStep):
  96.     n = 2
  97.     while True:
  98.         In = Trap(arrX[i], n)
  99.         I2n = Trap(arrX[i], 2*n)
  100.         n *= 2
  101.         if (abs(I2n - In) <= eps or n > 1024):
  102.             break
  103.     n = int(n / 2)
  104.     print('{} {:<5} {:>10} {:<20} {:>5} {:<20} {:>15} {:<25} {:>15} {}'.format('x =', arrX[i], 'C(x) =', f[i], 'I =', Trap(arrX[i],n), 'Разность =', abs(f[i] - Trap(arrX[i], n)), 'n =', n))
  105.  
  106. print()
  107.  
  108. #СИМПСОНА
  109. print('Квадратурная формула Симпсона')
  110. def Simps(x,n):
  111.     sum = 0
  112.     hN = (x - a) / n
  113.     i = hN
  114.     for j in range(n):
  115.         sum += (func(i) + 4 * func((2 * i - hN) / 2) + func(i - hN)) * hN/6
  116.         i += hN
  117.     return sum    
  118.  
  119. for i in range(countStep):
  120.     n = 2
  121.     while True:
  122.         In = Simps(arrX[i], n)
  123.         I2n = Simps(arrX[i], 2*n)
  124.         n *= 2
  125.         if (abs(I2n - In) <= eps or n > 1024):
  126.             break
  127.     n = int(n / 2)
  128.     print('{} {:<5} {:>10} {:<20} {:>5} {:<20} {:>15} {:<25} {:>15} {}'.format('x =', arrX[i], 'C(x) =', f[i], 'I =', Simps(arrX[i],n), 'Разность =', abs(f[i] - Simps(arrX[i], n)), 'n =', n))
  129.  
  130. print()
  131.  
  132. #ГАУССА
  133. print('Квадратурная формула Гаусса')
  134. def Gaus(x,n):
  135.     sum = 0
  136.     hN = (x - a) / n
  137.     i = 0
  138.     for j in range(n):
  139.         sum += (func((i) + ((hN / 2) * (1 - 1 / sqrt(3)))) + func((i) + ((hN / 2) * (1 + 1 / sqrt(3))))) * hN / 2
  140.         i += hN
  141.     return sum    
  142.  
  143. for i in range(countStep):
  144.     n = 2
  145.     while True:
  146.         In = Gaus(arrX[i], n)
  147.         I2n = Gaus(arrX[i], 2*n)
  148.         n *= 2
  149.         if (abs(I2n - In) <= eps or n > 1024):
  150.             break
  151.     n = int(n / 2)
  152.     print('{} {:<5} {:>10} {:<20} {:>5} {:<20} {:>15} {:<25} {:>15} {}'.format('x =', arrX[i], 'C(x) =', f[i], 'I =', Gaus(arrX[i],n), 'Разность =', abs(f[i] - Gaus(arrX[i], n)), 'n =', n))
  153.  
  154. print()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement