ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 19.06.2025
Просмотров: 1078
Скачиваний: 1
18
y
B(b, f(b))
f(b)
α |
|||
0 |
x |
ξ |
β x |
f(a)
A(a, f(a))
Рис. 7. Геометрическая интерпретация метода хорд
Уравнение хорды определяем как уравнение прямой, проходящей через точки A(a, f(a)) и B(b, f(b)),
имеющее вид
x − a |
= |
y − f ( a ) |
. |
||
b − a |
f ( b ) − f ( a ) |
||||
(19)
Если x = x , то y = 0, тогда из (19) следует
x − a |
= − |
f ( a ) |
, |
||
b − a |
f ( b ) − f ( a ) |
||||
откуда находим приближенное значение корня
x = a – |
f (a) |
(b – a). |
(20) |
f (b) − f (a) |
Для нахождения последующих приближений определяется отрезок, на концах которого функция имеет разные знаки. Если sgn f(a) = sgn f( x ), то полагается a = x , иначе b = x и повторяются вычисления по формуле (20).
Замечание. Вычисление приближенного значения x корня ξ уравнения (1) выполняется с недостатком, т. е. x – ξ < 0, если на отрезке [a; b] имеют места неравенства:
§f ′(x) > 0 и f ′′(x) > 0 – функция f(x) возрастающая, график f(x) вогнутый;
§f ′(x) < 0 и f ′′(x) < 0 – функция f(x) убывающая, график f(x) выпуклый.
Вычисление приближенного значения x корня ξ уравнения (1) выполняется с избытком, т. е. x – ξ > 0, если на отрезке [a; b] имеют место неравенства:
§f ′(x) > 0 и f ′′(x) < 0 – функция f(x) возрастающая, график f(x) выпуклый;
§f ′(x) < 0 и f ′′(x) > 0 –функция f(x) убывающая, график f(x) вогнутый. Следовательно, сужение интервала изоляции корня возможно изменением
только одной из его границ, а именно, если приближенное значение x корня ξ выполнено с недостатком, то принять a = x , иначе b = x .
Оценить погрешность результата можно, используя следующее соотношение:
m ε, M − m
где m = min |
|f ′(x)|, M = |
max |f ′(x)|. |
x [α; |
β] |
x [α;β] |
1.2.6.1Алгоритм метода хорд
1.Установить значения α, β, ε – границы отрезка отделения корня и принятую точность приближения.
19
2.Выполнить проверку применимости метода: если sgn f(a)= sgn f(b), то метод не применим, конец вычислений. Иначе
3.Установить вариант сужения интервала изоляции корня:
если sgn f '(a)= sgn f ''(a), то v = 1 – вариант с недостатком |
||
иначе v = 2 – вариант с избытком. |
||
4. |
Вычислить m = min |f ′(x)|; M = |
max |f ′(x)|. |
x [α; β] |
x [α; β] |
|
5. |
Начать цикл уточнения корня. |
|
f(a)
5.1.Вычислить очередное приближение x = a – f (b) − f (a) (b – a).
5.2.Вычислить оценку для приближения и выполнить сужение интервала изоляции корня:
если v = 1, то d = x – a; a = x, иначе d = b – x; b = x.
6. Конец цикла, если d < |
m |
ε . |
M − m |
7.Вывод результата x.
8.Конец алгоритма.
1.2.7Комбинированный метод
Пусть на отрезке [α; β] отделен корень уравнения (1), функция f(x) дважды дифференцируема, а f ′(x) и f ′′(x) сохраняют постоянные знаки на указанном интервале.
Комбинированный метод соединяет в себе метод хорд и метод Ньютона и позволяет на каждом этапе находить значения по недостатку x1 и значения по из-
бытку x2 точного корня ξ уравнения (1). Тогда сужение отрезка изоляции корня можно выполнять, принимая α = x1, β = x2 . Если:
1) f ′(x) > 0 и f ′′(x) > 0 – функция f(x) возрастающая, график f(x) вогнутый или f ′(x) < 0 и f ′′(x) < 0 – функция f(x) убывающая, график f(x) выпуклый, то x1 вычисляется по методу хорд (20), а x2 – по методу Ньютона (18);
2) f ′(x) > 0 и f ′′(x) < 0 – функция f(x) возрастающая, график f(x) выпуклый или f ′(x) < 0 и f ′′(x) > 0 – функция f(x) убывающая, график f(x) вогнутый, то x1 вычисляется по методу Ньютона (18), а x2 – по методу хорд (20).
Погрешность комбинированного метода на n-ом шаге определяется неравенством
|ξ – x | < βn – αn,
где x = 12 (αn + βn).
1.2.7.1 Алгоритм комбинированного метода
1. Установить значения α, β, ε – границы отрезка отделения корня и принятую точность приближения.
20
2.Выполнить проверку применимости метода: если sgn f(a)= sgn f(b), то метод не применим, конец вычислений. Иначе
3.Установить вариант расчета:
если sgn f ′(a)= sgn f ′′(a), то v = 1
иначе v = 2.
4.Начать цикл уточнения корня.
4.1.Выполнить сужение интервала изоляции корня: если v = 1, то
a = a – |
f (a) |
(b – a); b = b – |
f (b) |
, |
|||||
f (b) − f (a) |
f '(b) |
||||||||
иначе |
f (b) |
f (a) |
|||||||
b = b – |
(b – a); a = a – |
. |
|||||||
f (b) − f (a) |
f '(a) |
||||||||
5.Конец цикла, если b – a < ε .
6.Вывод результата x = a +2 b .
7.Конец алгоритма.
1.2.8Программы уточнения корней уравнений
уточне-
Пример. Составить программу на языке BP Pascal 7.0 уточнения корня уравнения
5x − 6x − 3 = 0 |
(7) |
с точностью ε = 10–7, если корни уравнения отделены на отрезках [–1; 0] и [1; 2].
1.2.8.1 Метод половинного деления
program Pdihotomii; uses crt;
const e = 0.0000001; function f(x:real):real;
begin f:=exp(x*ln(5))-6*x-3; end; function sgn(z:real):integer;
begin if z=0 then sgn:=0 else if z>0 then sgn:=1 else sgn:=-1; end; var
a,b,sgna,sgnx,x:real; begin
clrscr;
writeln('Корни отделены на отрезках [-1;0], [1;2]. Введите значения a,b');
21
Readln(a,b); sgna:=sgn(f(a)); if sgna*sgn(f(b))<0 then begin
repeat
x:=(a+b)/2; sgnx:=sgn(f(x));
if sgnx=0 then break else if sgna=sgnx then a:=x else b:=x; until (b-a)<e;
writeln('x=',x:12:8); end
else writeln('Метод не применим'); readkey;
end.
1.2.8.2 Метод итераций
program Pitr; uses crt;
const e=0.0000001; {точность приближения} function f(x:real):real; {функция f(x)}
begin f:=exp(x*ln(5))-6*x-3; end;
function f1(x:real):real; {производная функции f(x)} begin f1:=ln(5)*exp(x*ln(5))-6; end;
function sgn(z:real):integer; {функция вычисления знака}
begin if z=0 then sgn:=0 else if z>0 then sgn:=1 else sgn:=-1; end; {основная программа}
var a,b,x0,x1,x,L,dx,M,d,p:real; begin
clrscr;
writeln('Корни отделены на отрезках [-1;0], [1;2]. Введите значения a,b'); Readln(a,b);
{Найти наибольшее значение модуля производной } M:=(f1(a)); x:=a; dx:=0.01;
repeat x:=x+dx; p:=f1(x); if abs (p) > abs (M) then M:=p; until x>b; L := sgn (M)*2/abs(M); {Определить параметр}
{Начать процесс итераций} x0:= a;
repeat x1:=x0 - L*f(x0); d:=abs(x1-x0); x0:=x1; until d<e; writeln('Корень x = ', x1:12:7); readkey;
end.
1.2.8.3 Метод Ньютона
program PNtn; uses crt;
const e=0.0000001; {точность приближения}
22
function f(x:real):real; {функция f(x)} begin f:=exp(x*ln(5))-6*x-3; end;
function f1(x:real):real; {производная функции f(x)} begin f1:=ln(5)*exp(x*ln(5))-6; end;
function f2(x:real):real; {вторая производная функции f(x)} begin f2:=sqr(ln(5))*exp(x*ln(5)); end;
function sgn(z:real):integer; {функция вычисления знака}
begin if z=0 then sgn:=0 else if z>0 then sgn:=1 else sgn:=-1; end; {основная программа}
var a,b,x0,x1,x,L,dx,M2,m1,d,p:real; begin
clrscr;
writeln('Корни отделены на отрезках [-1;0], [1;2]. Введите значения a,b'); Readln(a,b);
{Найти наибольшее значение модуля второй производной} M2:=f2(a); x:=a; dx:=0.01;
repeat x:=x+dx; p:=f2(x); if abs (p) > abs (M2) then M2:=p; until x>b; {Найти наименьшее значение модуля производной} m1:=abs(f1(a)); x:=a; dx:=0.01;
repeat x:=x+dx; p:=abs(f1(x)); if p < m1 then m1:=p; until x>b; {Определить начальное приближение корня}
if sgn (M2) = sgn (f(a)) then x0 := a else x0 := b; {Начать процесс итераций}
repeat x1:=x0 - f(x0)/f1(x0); d:=sqr(x1-x0); x0:=x1; until d<2*m1*e/abs(M2); writeln('Корень x = ', x1:12:7); readkey;
end.
1.2.8.4 Метод хорд
program Phorda; uses crt;
const e = 0.0000001;
function f(x:real):real; {функция, для которой вычисляется нуль}
begin |
f:=exp(x*ln(5))-6*x-3; end; |
function f1(x:real):real; {производная функции f(x)} |
|
begin |
f1:=ln(5)*exp(x*ln(5))-6; end; |
function f2(x:real):real; {вторая производная функции f(x)} |
|
begin |
f2:=sqr(ln(5))*exp(x*ln(5)); end; |
function sgn(z:real):integer; {функция вычисления знака} |
|
begin |
if z=0 then sgn:=0 else if z>0 then sgn:=1 else sgn:=-1; end; |
var {основная программа}
a, b, dx, fx, x, M, m1, p, v, d : real; begin
clrscr;
writeln('Корни отделены на отрезках [-1;0], [1;2]. Введите значения a,b');