Метод Ньютона (метод Ньютона-Рафсона, метод касательных) требует для нахождения корня нелинейного уравнения выполнения достаточно большого количества условий. В качестве компенсации он (в общем случае) сходится быстрее любого другого численного метода нахождения корня уравнения F(x)=0.
Для функции F(x) должен быть определен интервал изоляции корня [a;b], такой что на нем:
а) F(a) и F(b) имеют разные знаки;
б) F(x) определена и непрерывна;
в) F'(x) ≠ 0
г) F"(x) определена всюду и имеет постоянный знак
1. Перепишем уравнение в более привычном виде и сделаем преобразования, необходимые для нахождения интервала изоляции корня [a;b], а также проверки выполнения на нем условий а) - г)
Степенная функция при натуральном основании и вещественном показателе степени всюду положительна, является непрерывной и монотонно возрастающей. Комбинация показательных функций будет также обладать этими свойствами.
При х=0 (считать удобно) F(x) = 11+3-0.9 = 13.1
При х=-1 (тоже удобно) F(x) = 11/20 +3/5 - 9/10 = 1/4 (почти ноль!)
При х=-2 F(x) = 11/400 + 3/25 - 9/10 = -301/400 ≈ - 0.7525
Условие а) выполнено, интервал изоляции корня найден, a=-2, b=-1.
Прочие условия на этом интервале также выполняется в соответствии с написанным выше.
2. В качестве начального приближения выберем точку, находящуюся в середине интервала изоляции. х₀ = -1.5
3. Зададимся максимальной погрешностью решения, равной 10⁻⁶
4. Определим условие завершения поиска корня.
В соответствии с известной формулой (например, см. стр. 41 в книге Гловацкая А.П. Методы и алгоритмы вычислительной математики. Учеб. пособие для вузов. - М.: Радио и связь, 1999), длина интервала изоляции корня связана с погрешностью следующим образом:
F'(a) = 11/400*ln(20)+3/25*ln(5) ≈ 0.275515187014827;
F"(b) = 11/20*ln(20)²+3/5*ln(5)² ≈ 6.49010075653527
Величина интервала для х при ε=10⁻⁶ будет составлять приблизительно 0.0002914.
5. Составим программу на языке программирования PascalABC.NET 3.3. и найдем корень уравнения.
// PascalABC.NET 3.3, сборка 1579 от 18.11.2017
// Внимание! Если программа не работает, обновите версию!
begin
var f:real->real:=x->11*Power(20,x)+3*Power(5,x)-0.9;
var f1:real->real:=x->11*Power(20,x)*Ln(20)+3*Power(5,x)*Ln(5);
var f2:real->real:=x->11*Power(20,x)*Sqr(Ln(20))+3*Power(5,x)*Sqr(Ln(5));
var (a,b,eps):=(-2.0,-1.0,1e-6);
var d:=Sqrt(2*f1(a)*eps/f2(b));
var xn1:=(a+b)/2;
var xn:real;
repeat
(xn,xn1):=(xn1,xn-f(xn)/f1(xn));
until Abs(xn-xn1)<=d;<br> Writeln(xn1:0:6);
end.
Результат:
-1.109118