Отделить любой корень уравнения f(x)=0 и вычислить методом простых итераций

Отделяем корень.

Представим функцию f(x) в виде суммы двух функций f(x) = g(x) + q(x).

Рассмотрим функцию g(x) = e

x

- 3. Функция непрерывная и возрастающая на всей действительной оси, и имеет один корень x = ln(3) ≈ 1.09861. Заметим, что на интервале [0; 2] g(x) возрастает.

Рассморим функцию q(x) = -cos(x). Функция периодическая и непрерывная на всей действительной оси. На интервале [0; 2] эта функция возрастает, и в районе корня g(x) имеет значение q(1.09861) ≈ -0.45483, из чего можно сделать вывод, что (единственный) корень функции f(x) = g(x) + q(x) будет примерно там же, где и корень функции g(x).

Проверяем значения f(x) на границах интервала [0; 2]. f(0) = -3, f(2) ≈ 4.8052. Значения функции на границах интервала имеют разные знаки, функция на интервале непрерывная и возрстающая. Следовательно, f(x) на интервале [0; 2] имеет ровно один корень. Корень отделён.

Определим примерное значение λ0.

Скорость роста функций f(x) и g(x) в районе корня f(x) примерно одинакова, для упрощения вместо f(x) для определения λ

0

используем g(x). Производная функции g(x) в её корне равна g'(1.09861) = e

1.09861

= 3.

Принимаем λ

0

= 1 / 3

Получаем итерационную формулу

x

n

= x

n-1

- λ

0

f(x

n-1

) = x

n-1

- (e

xn-1

- 3 - cos(x

n-1

)) / 3.

В качестве первого приближения выберем середину интервала [0; 2], то есть, примем x

0

= 1.

Пишем программу.

PascalВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13

const
  E = 1e-4;
var
  x, x1: real;
begin
  x := 1;
  repeat
    x1 := x;
    x := x - (exp(x) - 3 - cos(x)) / 3
  until abs(x1 - x) < E;
  writeln('x = ', x:0:4);
  readln
end.

Материал по теме:

Википедия - Метод простой итерации