Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB3bak.DOC
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
367.62 Кб
Скачать

Метод секущих

Один из недостатков метода Ньютона состоит в том, что, пользуясь им, приходится дифференцировать функцию f(x). Если нахождение производной затруднено, то можно воспользоваться некоторым приближением, которое и составляет основу метода секущих. Заменив производную f'(x), используемую в методе Ньютона

,

разностью последовательных значений функции, отнесенной к разности значений аргумента

F‘(xn)= ,

получим следующую итерационную формулу:

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

Метод простой итерации

Для применения этого метода уравнение f(x) =0 обязательно приводится к следующему виду:

x = g(x).

Практически к такому виду можно привести любое уравнение. Тогда, соответствующая итерационная формула имеет вид

xп+1 = g(xn).

Б лок-схема алгоритма метода представлена на рис. 7. Простота метода простой итерации делает его привлекательным, однако не следует забывать, что и этому методу присущи недостатки, так как он не всегда обеспечивает сходимость. Поэтому для любой программы, в которой используется этот алгоритм, необходимо предусматривать контроль сходимости и прекращать счет, если сходимость не обеспечивается.

Пример решения уравнения

Предстоит решить уравнение

x-tgx=0

воспользовавшись рассмотренными выше методами.

1. Перед решением необходимо:

Определить интервалы, в которых находятся корни уравнения. Это необходимо сделать, чтобы выбрать начальное значение х. Здесь можно, например, изобразить график зависимости tgx и х, из которого следует, что значение первого ненулевого корня уравнения заключено между 3 и 2. Поэтому примем значение х=4.5.

2. Уточнить значение корня, решением уравнения используя рассмотренные методы (Внимание! Используемые методы сами не находят корни уравнения, а лишь уточняют их значение.). Поэтому, очень важен пункт 1, в котором определяют интервалы нахождения корня. Если интервал определен неверно (т.е. там корня нет корня), то программа обычно зацикливается:

а) Метод половинного деления

program urdel2;

(*Программа решения трансцендентного уравнения*)

(* F(X)=X-TAN(X)=0 *)

(* методом половинного деления *)

(* Счет прекращается при F=e менее 0.00001 *)

var

i:integer;

xh,xk,xcp,xn,xn1,fxn,fxcp,x,e:real;

function F(x:real):real;

begin

f:=x-sin(X)/COS(x)

end;

begin

e:=0.0001; {задание точности}

xh:=2; {начальное и }

xk:=5.5; {конечное значение интервала }

writeln('------------------');

writeln('iteration number');

writeln('------------------');

xn:=xh;

xn1:=xk;

i:=0; {кол-во иттераций вычисления интервалов}

repeat

xcp:=(xn+xn1)/2; (*определение середины*)

fxn:=f(xn); (*определение функции в начале*)

fxcp:=f(xcp); (*и в середине промежутка*)

if (fxn*fxcp)>0 then xn:=xcp (*знаки в середине и начале*)

else xn1:=xcp; (*совпадают*)

i:=i+1;

writeln(i:2,' ',xn:6:5); (*вывод очередной иттерации*)

until abs(fxn)<=e; (*прверка заданной точности*)

write('=================');

end.

б) Метод хорд.

program urdel2;

(*Программа решения трансцендентного уравнения*)

(* F(X)=X-TAN(X)=0 *)

(* методом Хорд *)

(* Счет прекращается при F=e менее 0.00001 *)

var

i:integer;

xh,xk,xcp,xn,xn1,fxn,fxcp,x,e:real;

function F(x:real):real;

begin

f:=x-sin(X)/COS(x)

end;

begin

e:=0.0001;

xh:=2;

xk:=5.5;

writeln('------------------');

writeln('iteration number');

writeln('------------------');

xn:=xh; xn1:=xk;

i:=0;

repeat

xcp:=xn-f(xn)*((xn1-xn)/(f(xn1)-f(xn)));

fxn:=f(xn);

fxcp:=f(xcp);

if (fxn*fxcp)>0 then xn1:=xcp

else xn:=xcp;

i:=i+1;x:=f(xn);

writeln(i:2,' ',xn:6:5,x);

until abs(f(xn))<=e; {проверка заданной точности, при которой заканчивается вычисление}

write('=================');

end.

в) Метод Ньютона

program urnewton;

(*Программа решения трансцендентного уравнения*)

(* F(X)=X-TAN(X)=0 *)

(*Методом Ньютона. Счет прекращается при F=e менее 0.00001*)

var

i:integer;

f,df,x,e:real;

begin

e:=0.0001; (*указанная точность*)

x:=4.5; (*начальное значение*)

writeln('------------------');

writeln('iteration number'); (* шапка таблицы*)

writeln('------------------');

i:=0; (*обнуление счетчика циклов*)

repeat

f:=x-sin(X)/COS(x); (* вычисление функции *)

df:=1.0-1./(cos(x)*cos(x)); (* производной*)

x:=x-F/df; i:=i+1; (* аргумента*)

writeln(i:2,' ',x:6:5) (*вывод значений в таблицу*)

until abs(f)<=e; (*проверка точности*)

write('=================');

end.

Таким образом, метод Ньютона обеспечивает очень быструю сходимость при начальном значении х=4.5 (это можно определить по количеству выполненных иттераций). Отметим, что при начальных значениях х=4.0 или 5.0 сходимость уже не достигается.

г) Метод простой итерации (самый простой и часто используемый способ).

Применить указанный метод к нахождению корней уравнения х2=sin(x).

program iter;

(*решение уравнения x2=sin(x)*)

(*методом простых итераций*)

var

i:integer;

y,xm,f,df,x,e:real;

begin

e:=0.0000000001;

y:=5.45;

writeln('------------------');

writeln('iteration number');

writeln('------------------');

i:=0;x:=0;

while abs(x-y)>e do

begin

x:=y;

y:=sqrt(abs(sin(x)));

i:=i+1;

writeln(i:2,' ',x:6:5)

end;

write('=================');

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]