Advertisement
Teammasik

laba_6_vm

Mar 5th, 2023
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.46 KB | None | 0 0
  1. import math as m
  2. import random
  3. n = 1000
  4. # eto pobeda
  5.  
  6.  
  7. def func(x):
  8.     return x / (6*x - x**2)**0.5
  9.  
  10.  
  11. def derivative(x):
  12.     return (6*x - x**2)**0.5 / (6 - x)
  13.  
  14.  
  15. def antider(x):
  16.     return -(6*x - x**2)**0.5 + 3*m.asin((x-3)/3)
  17.     # из варианта
  18.  
  19.  
  20. def task1_2():
  21.     a = 3.1
  22.     b = 3.8
  23.  
  24.     d = (b - a) / n
  25.  
  26.     x = a
  27.     sl = 0
  28.     while x < b - d / 2:
  29.         sl += func(x) * d
  30.         x += d
  31.     x = a + d
  32.     sr = 0
  33.     while x < b + d / 2:
  34.         sr += func(x) * d
  35.         x += d
  36.  
  37.     f = antider(b) - antider(a)
  38.     print("Точное значение:\t\t", f)
  39.     print("Левые прямоугольники:\t\t", sl, "Погрешность: ", abs(1 - sl / f))
  40.     print("Правые прямоугольники:\t\t", sr, "Погрешность: ", abs(1 - sr / f))
  41.  
  42.  
  43. # task1_2()
  44.  
  45.  
  46. def task3():
  47.     a = 3.1
  48.     b = 3.8
  49.  
  50.     d = (b - a) / n
  51.  
  52.     x = a
  53.     s = 0
  54.     while x < b - d / 2:
  55.         s += func((x + (x + d)) / 2) * d
  56.         x += d
  57.  
  58.     f = antider(b) - antider(a)
  59.     print("Точное значение:\t\t", f)
  60.     print("Метод средних:\t\t", s, "\tПогрешность: ", abs(1 - s / f))
  61.  
  62.  
  63. # task3()
  64.  
  65.  
  66. def task4():
  67.     a = 3.1
  68.     b = 3.8
  69.  
  70.     d = (b - a) / n
  71.  
  72.     x = a
  73.     s = 0
  74.     while x < b - d / 2:
  75.         s += d * (func(x) + func(x + d)) / 2
  76.         x += d
  77.     f = antider(b) - antider(a)
  78.     print("Точное значение:\t", f)
  79.     print("Метод трапеций:\t\t", s, "\tПогрешность: ", abs(1 - s / f))
  80.  
  81.  
  82. # task4()
  83.  
  84.  
  85. def task5():
  86.     a = 3.1
  87.     b = 3.8
  88.  
  89.     d = (b - a) / n
  90.  
  91.     x = a
  92.     s = 0
  93.  
  94.     while x < b - d / 2:
  95.         s += d * (func(x) + func(x + d)) / 2
  96.         x += d
  97.  
  98.     s += (d ** 2) * (derivative(a) - derivative(b)) / 12
  99.  
  100.     f = antider(b) - antider(a)
  101.     print("Точное значение:\t", f)
  102.     print("Метод Эйлера:\t", s,  "\tПогрешность: ", abs(1 - s / f))
  103.  
  104.  
  105. task5()
  106.  
  107.  
  108. def task6():
  109.     a = 3.1
  110.     b = 3.8
  111.  
  112.     d = (b - a) / n / 2
  113.  
  114.     x = a
  115.     s = 0
  116.     while x < b - d:
  117.         s += (d / 3) * (func(x) + 4 * func(x + d) + func(x + 2 * d))
  118.         x += 2 * d
  119.  
  120.     f = antider(b) - antider(a)
  121.     print("Точное значение:\t", f)
  122.     print("Метод Симпсона:\t", s, "\tПогрешность: ", abs(1 - s / f))
  123.  
  124.  
  125. # task6()
  126.  
  127.  
  128. def task7():
  129.     a = 3.1
  130.     b = 3.8
  131.  
  132.     h = (b - a) / n
  133.  
  134.     s = 0
  135.     for i in range(n):
  136.         s += func(a + (b - a) * random.random()) * h
  137.  
  138.     f = antider(b) - antider(a)
  139.     print("Точное значение:\t", f)
  140.     print("Метод Монте-Карло:\t", s, "\tПогрешность: ", abs(1 - s / f))
  141.  
  142.  
  143. # task7()
  144.  
  145.  
  146. def task8():
  147.     a = 3.1
  148.     b = 3.8
  149.  
  150.     d = (b - a) / n
  151.     H = [[1 / 2, 1 / 2],
  152.          [1 / 6, 2 / 3, 1 / 6],
  153.          [1 / 8, 3 / 8, 3 / 8, 1 / 8],
  154.          [7 / 90, 16 / 45, 2 / 15, 16 / 45, 7 / 90],
  155.          [19 / 288, 25 / 96, 25 / 144, 25 / 144, 25 / 96, 19 / 288]]
  156.  
  157.     f = antider(b) - antider(a)
  158.     print("Точное значение:\t", f)
  159.     print("Метод Ньютона-Котеса")
  160.  
  161.     for k in range(2, 6):
  162.         s = 0
  163.         x = a
  164.         while x < b - d / 2:
  165.             for i in range(1, k + 2):
  166.                 s += func(x + (i - 1) * d / k) * d * H[k - 1][i - 1]
  167.             x += d
  168.         print(k, "порядка:\t", s, "    Погрешность: ", abs(1 - s / f))
  169.  
  170.  
  171. # task8()
  172.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement