Урок 3

Численное решение уравнений

На этом уроке мы научимся численному решению уравнений.

Сначала поясним, зачем нужны численные методы решения уравнений. Причина в том, что большинство уравнений, встречающихся на практике не имеют аналитических решений (в виде формулы) и единственный способ найти решение таких уравнений – это прибегнуть к численным методам. Но даже если решения уравнения существуют в виде формулы, численный метод решения – более быстрый и не требует глубокой теоретической подготовки.

В качестве примера возьмем уравнение 3- степени: 0.1 * X^3 - 0.5 * X^2 – X + 2 = 0. Построим график функции Y = 0.1 * X^3 - 0.5 * X^2 – X + 2.

Численное решение уравнений

Значения X, при которых график пересекает ось X и будут решениями (корнями) уравнения. Из графика видно, что уравнение имеет 3 корня. Будем искать второй корень.

Для решения уравнения воспользуемся методом деления отрезка пополам. Сначала нужно установить интервал значений X, в котором находится корень. Воспользовавшись графиком, можем установить начальный интервал X1=0, X2=4. Можно было бы установить и более узкий интервал, но нам важно понять алгоритм поиска, для этого берём интервал пошире.

Для успешного применения метода важны два условия: в выбранном интервале функция непрерывна и меняет знак.

* Отступление: До сих пор для рисования на полотне мы использовали чёрное перо. Теперь мы для наглядности будем менять цвет пера. Для этого нам понадобится функция SetPenParameters. Первый параметр функции – толщина пера, пусть будет равна 2. Второй параметр – цвет. В программе есть набор констант цвета. Пока мы воспользуемся только двумя: clLime и clRed, которые соответствуют ярко зелёному и красному цвету.*

Начнём с вычисления значения функции в 3-х точках: на краях диапазона и посередине. На графике визуализируем значения функции цветными вертикальными отрезками.

X1=0
X2=4
X3=(X1+X2)/2
Y1=F(X1)
Y2=F(X2)
Y3=F(X3)

SetPenParameters(1,clLime)
MoveTo(X1,0)
LineTo(X1,Y1)     # зелёная вертикальная линия на левом краю интервала

MoveTo(X2,0)
LineTo(X2,Y2)     # зелёная вертикальная линия на правом краю интервала

SetPenParameters(1,clRed)
MoveTo(X3,0)
LineTo(X3,Y3)     # красная вертикальная линия на середине интервала

Вставьте этот фрагмент скрипта с 15-строки, перейдите в рабочий режим, кликните по 15-й строке и пройдите до конца в шаговом режиме.

Численное решение уравнений

Из графика мы видим, что корень лежит в левой половине интервала (X1,X2). Но как это определить с помощью скрипта? Если значения функции на левом конце интервала и в центре имеют разные знаки, то корень функции лежит на левой половине интервала, иначе – на правой. Таким простые соображения позволяют в 2 раза сузить интервал, в котором лежит корень уравнения. Повторив в цикле repeat эти действия несколько раз, получим решение уравнения (X3) с требуемой точностью. Условие выхода из цикла может быть таким: ширина интервала – меньше 0.01.

X1=0
X2=4
repeat
  X3=(X1+X2)/2
  Y1=F(X1)
  Y2=F(X2)
  Y3=F(X3)

  SetPenParameters(1,clLime)
  MoveTo(X1,0)
  LineTo(X1,Y1)     # зелёная вертикальная линия на левом краю интервала

  MoveTo(X2,0)
  LineTo(X2,Y2)     # зелёная вертикальная линия на правом краю интервала

  SetPenParameters(1,clRed)
  MoveTo(X3,0)
  LineTo(X3,Y3)     # красная вертикальная линия на середине интервала
  
  if Y1*Y3 < 0
    X2=X3      # выбрали левую половину интервала
  else
    X1=X3      # выбрали правую половину интервала
  
  Breakif (X2-X1) < 0.01 # завершение цикла, если точность решения менее 0.01

Внесите в скрипт соответствуюшие исправления и перейдите в режим работы. Теперь научимся пользоваться точками остановки. Кликните мышкой по цифре 15, как показано на скриншоте.(рисунке). Справа от цифры появится красный кружок. Это и есть точка остановки. Стартуйте скрипт. На полотне будет нарисован график, и выполнение скрипта прекратится на строке 15. Чтобы продолжить выполнение скрипта начиная с этой строки, можно кликнуть по команде «Продолжить» (в автоматическом режиме), или по команде «Шаг» для выполнения одной строки скрипта.

Для проверки алгоритма пройдите тело цикла несколько раз в шаговом режиме. Следите за тем, как меняется интервал поиска корня. Когда вам надоест ходить в шаговом режиме, выполните команду «Продолжить». Приблизительное значение корня смотрите в таблице переменных в строке X3.

Численное решение уравнений

В качестве самостоятельной работы, найдите два других корня уравнения.