Advertisement
Guest User

parab

a guest
Dec 12th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.31 KB | None | 0 0
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import math
  4.  
  5.  
  6. def f(x):
  7.     return (2*x - 5) / (x ** 2 + 3) ** 0.5
  8.  
  9.  
  10.  
  11.  
  12. def parabola_method(x1, x3, e=0.01):
  13.     x2 = -1
  14.     x_i = 0
  15.     while True:
  16.         if f(x1) >= f(x2) <= f(x3):  # проверка условия
  17.             print('True')
  18.         else:
  19.             print('False')
  20.         matrix_a = np.array(
  21.             [[1, 0, 0], [1, x2 - x1, 0], [1, x3 - x1, (x3 - x1) * (x3 - x2)]])  # задаем матрицу значений
  22.         matrix_b = np.array([f(x1), f(x2), f(x3)])  # матрица а умноженная на x
  23.         a0, a1, a2 = np.linalg.solve(matrix_a, matrix_b)
  24.         x_ = (x1 + x2 - a1 / a2) / 2
  25.         if f(x_) <= f(x2):  # найденный х подставляем в функцию и проверяем условия
  26.             if x_ < x2:
  27.                 x3 = x2
  28.                 x2 = x_
  29.             else:
  30.                 x1 = x2
  31.                 x2 = x_
  32.         else:
  33.             if x2 < x_:
  34.                 x3 = x_
  35.             else:
  36.                 x1 = x_
  37.         if abs(x_i - x_) < e:  # проверка погрешности
  38.             break
  39.         x_i = x_
  40.     return x_
  41.  
  42.  
  43. f_min = parabola_method(-2, 0)
  44. print('Метод парабол')
  45. print('x =', f_min)
  46. print('f(x) =', f(f_min))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement