Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import matplotlib.pyplot as plt
- import numpy as np
- import math
- def f(x):
- return (2*x - 5) / (x ** 2 + 3) ** 0.5
- def parabola_method(x1, x3, e=0.01):
- x2 = -1
- x_i = 0
- while True:
- if f(x1) >= f(x2) <= f(x3): # проверка условия
- print('True')
- else:
- print('False')
- matrix_a = np.array(
- [[1, 0, 0], [1, x2 - x1, 0], [1, x3 - x1, (x3 - x1) * (x3 - x2)]]) # задаем матрицу значений
- matrix_b = np.array([f(x1), f(x2), f(x3)]) # матрица а умноженная на x
- a0, a1, a2 = np.linalg.solve(matrix_a, matrix_b)
- x_ = (x1 + x2 - a1 / a2) / 2
- if f(x_) <= f(x2): # найденный х подставляем в функцию и проверяем условия
- if x_ < x2:
- x3 = x2
- x2 = x_
- else:
- x1 = x2
- x2 = x_
- else:
- if x2 < x_:
- x3 = x_
- else:
- x1 = x_
- if abs(x_i - x_) < e: # проверка погрешности
- break
- x_i = x_
- return x_
- f_min = parabola_method(-2, 0)
- print('Метод парабол')
- print('x =', f_min)
- print('f(x) =', f(f_min))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement