Метод половинных делений.

Поделиться
HTML-код
  • Опубликовано: 1 фев 2025

Комментарии • 2

  • @OnTheWayToTheDirection
    @OnTheWayToTheDirection  7 месяцев назад

    Код python, библиотека manim:
    from manim import *
    import numpy as np
    class HalfIntervalMethod(MovingCameraScene):
    def construct(self):
    # Определение уравнения
    def f(x):
    return x**3 - 3*x**2 - 4
    # Начальные границы интервала
    a = -5
    b = 5
    # Создание осей
    self.axes = Axes(
    x_range=[-5, 5, 1],
    y_range=[-50, 50, 10],
    x_length=10,
    y_length=10,
    x_axis_config={"numbers_to_include": np.arange(-5, 5, 1)},
    y_axis_config={"numbers_to_include": np.arange(-50, 50, 10)},
    tips=True,
    ).move_to(DOWN).scale(0.55)
    # Добавление подписей осей
    x_label = self.axes.get_x_axis_label("x").scale(0.6)
    y_label = self.axes.get_y_axis_label("f(x)").scale(0.6)
    # Добавление текста с постановкой задачи
    task_text = VGroup(
    MathTex("f(x) = x^3 - 3x^2 - 4"),
    MathTex("f(x) = 0").move_to(DOWN),
    MathTex("x = ?").move_to(DOWN*2)
    ).scale(0.75)
    self.play(Write(task_text))
    self.wait(2)
    self.play(task_text.animate.scale(0.6).to_corner(UL))
    # Построение графика функции
    graph = self.axes.plot(f, color=BLUE)
    self.play(Create(self.axes), run_time=2)
    self.play(Create(x_label), Create(y_label))
    self.play(Create(graph))
    # Вычисление решения методом половинного деления
    iterations = 0
    tolerance = 0.4

    • @OnTheWayToTheDirection
      @OnTheWayToTheDirection  7 месяцев назад

      while abs(b - a) > tolerance:
      """
      # Показываем вычисления:
      f1 = Text(f"a = {a}")
      f2 = Text(f"b = {b}").next_to(f1, direction=DOWN/2)
      f3 = Text(f"f(a) = {f(a)}").next_to(f2, direction=DOWN/2)
      f4 = Text(f"b = {b}").next_to(f3, direction=DOWN/2)
      f5 = Text(f"f(b) = {f(b)}").next_to(f4, direction=DOWN/2)
      f6 = MathTex("c = \\frac{|b-a|}{2}").next_to(f5, direction=DOWN/2)
      f7 = Text(f"f(c) = {f((abs(b-a)/2))}").next_to(f6, direction=DOWN/2)
      g = VGroup(f1,f2,f3,f4,f5,f6,f7).scale(0.4).to_corner(DR)
      self.play(Create(g))
      """
      # Находим среднее:
      c = (a + b) / 2
      if iterations == 0:
      a_Dot = self.createDot("a", a, 0, RED)
      b_Dot = self.createDot("b", b, 0, RED)
      self.play(Create(a_Dot))
      self.play(Create(b_Dot))

      c_Dot = self.createDot("c", c, 0, GREEN)
      self.play(Create(c_Dot))
      # Скрываем вычисления:
      # self.play(FadeOut(g))
      # Двигаем камеру и приближаем:
      self.camera.frame.save_state()
      self.play(
      self.camera.frame.animate.move_to(self.axes.coords_to_point(c, f(c))).set(width=12-iterations*2)
      )
      self.wait(1)
      # Показываем точность:
      if (iterations