Untitled
unknown
python
a month ago
2.8 kB
4
Indexable
import numpy as np import matplotlib.pyplot as plt from matplotlib.widgets import Slider # Определение отображения T(x) def T(x, t): result = np.zeros_like(t) for i, ti in enumerate(t): if 0 <= ti <= 1/5: result[i] = x[int(ti * 5 * (len(x) - 1))] / 2 elif 1/5 < ti <= 2/5: result[i] = -(x[int((5 * ti - 1) * (len(x) - 1))] - x[0] - x[-1]) / 2 elif 2/5 < ti <= 3/5: result[i] = 9 * (np.exp(-np.abs(ti - 1/2)) - np.exp(-1/10)) + x[0] / 2 elif 3/5 < ti <= 4/5: result[i] = -(x[int((4 - 5 * ti) * (len(x) - 1))] - x[-1] - x[0]) / 2 elif 4/5 < ti <= 1: result[i] = x[int((5 - 5 * ti) * (len(x) - 1))] / 2 return result # Метод сжимающих отображений def fixed_point_iteration(T, f0, max_iterations): t = np.linspace(0, 1, 1000) # Сетка для вычислений f = f0(t) # Начальное приближение как массив значений history = [f.copy()] # Сохраняем историю итераций for i in range(max_iterations): f_new = T(f, t) # Применяем T к текущей функции f = f_new # Обновляем текущую функцию history.append(f.copy()) # Сохраняем текущее состояние return history # Начальное приближение f0 = lambda t: t # Например, f0(t) = t # Максимальное число итераций max_iterations = 50 # Вычисляем историю итераций history = fixed_point_iteration(T, f0, max_iterations) # Создаем график fig, ax = plt.subplots(figsize=(10, 6)) plt.subplots_adjust(left=0.1, bottom=0.25) # Оставляем место для ползунка # Начальный график (нулевая итерация) t = np.linspace(0, 1, 1000) line, = plt.plot(t, history[0], label="Приближение") plt.plot(t, f0(t), label="Начальное приближение", linestyle="--") plt.legend() plt.xlabel("t") plt.ylabel("f(t)") plt.title("Метод сжимающих отображений") # Создаем ось для ползунка ax_slider = plt.axes([0.2, 0.1, 0.6, 0.03], facecolor="lightgoldenrodyellow") slider = Slider(ax_slider, "Итерация", 0, max_iterations, valinit=0, valstep=1) # Функция обновления графика при изменении ползунка def update(val): iteration = int(slider.val) line.set_ydata(history[iteration]) fig.canvas.draw_idle() # Привязываем функцию обновления к ползунку slider.on_changed(update) plt.show()
Editor is loading...
Leave a Comment