
- •2. Функции
- •Демонстрационные примеры
- •Задачи для самостоятельного решения
- •3. Стандартные библиотеки подпрограмм в турбо паскале Расширение возможностей Ввода- Вывода. Модуль crt
- •Переменные
- •Процедуры и функции
- •4. Модуль Graph. Графический режим
- •Простейшие графические процедуры и функции
- •5. Численное решение алгебраических и трансцендентных уравнений
- •Метод секущих
- •Пример решения уравнения
- •Задание №1
- •Задание №3
Метод секущих
Один из недостатков метода Ньютона состоит в том, что, пользуясь им, приходится дифференцировать функцию 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.