Численный метод решения уравнения
Создание: 27.02.2013
Необходимо написать программу для решения уравнения, например, этого:

Геометрический смысл решения любого уравнения - найти точку пересечения графика функции с осью x.


график исследуемой функции, построенный в MS Excel, на интервале [-15; 10]

В случае если функция на выбранном интервале [a,b]: непрерывна (имеет значения в любой точке) и имеет только одно решение, возможно использовать численный метод решения уравнения методом деления отрезков пополам.

Так  как наша функция удовлетворяет двум условиям, то на интервале [a,b] в единственной точке она пересекает ось x. Эту точку нам нужно найти. Замечаем, что f(a) и f(b) всегда для такой функции имеют противоположный знак. В нашем примере f(-15) отрицательно, f(10) - положительно. Произведение f(a)*f(b) будет отрицательным всегда если искомая точка находится где-то между a и b. Из этого следует простой алгоритм:

  1. находим центральную точку c = (b+a)/2;
  2. находим значение функции f(c);
  3. находим произведение f(a)*f(c). Если произведение положительное, значит искомой точки на интервале [a,c] нет. Значит, искомая точка находится на интервале [c,b];
  4. В зависимости от знака произведения, переопределяем отрезок [a,b] -> [a,c] или [a,b] -> [c,b], т.е. всякий раз наш отрезок вдвое уменьшается, стремясь к искомой точке x - решению нашего уравнения;
  5. Повторяем действия 1-4 до тех пор, пока расстояние между точками [a,b] не станет меньше заданной точности h.

Искомое значение x найдено с заданной точностью, находится на интервале [a,b], равно: x = (b+a)/2;

Программный код на языке Pascal:

program segment;
var a,b,c,h: real;

function f(x:real):real;
begin
  f:=0.1*x*x*x + 0.5*x*x - 4*x + 25;
end;

begin
  write('Введите крайнюю правую точку отрезка: '); read(a);
  write('Введите крайнюю левую точку отрезка: '); read(b);
  write('Введите точность вычисления: '); read(h);

  while ( b-a > h ) do
  begin
    c := (b+a)/2;
    if( f(a)*f(c) > 0)then a:=c else b:=c;
  end;
  c := (b+a)/2;
  write('решение уравнения с заданной точностью: ', c);
end.

Искомое значение:

Скриншот программы, реализующий метод решения уравнения методом половинного деления,
запущенной в среде программирования Pascal ABC.


P.S.

  1. Статья знакомит учеников с новым методом решения уравнения. Подчеркивается, что это приблизительный метод, но он позволяет решить ЛЮБОЕ уравнение, удовлетворяющее нашим требование с ЛЮБОЙ заданной точностью
  2. Описанный метод позволяет ученикам 9-10 классов повторить цикл «пока». Количество действий, выполняемых компьютером зависит от необходимой точности вычисления.
  3. Время работы, включая построение графика для нахождения начального отрезка [a,b], написание программного кода - одно занятие.
  4. В качестве закрепления предложить ученикам решить несколько уравнений, в том числе и тех функций, которые не удовлетворяют заявленным требованиям, например, имеющих несколько решений.