Вторая пачка часть 77
Формальные параметры процедуры. Входныe: а, b (тип real) - отрезок, на котором ищется ко¬рень; ерs (тип re¬¬al) - точность вычисления корня; k (тип in¬¬¬teger) - раз¬р嬬¬шен¬¬¬¬ное число итераций; FUNC - внеш¬няя про¬це¬д󬬬¬ра-фунꬬ¬ция. Выходные: k (тип in¬te¬ger) - количество вы¬пол¬нен¬ных ите¬раций; х (тип real) - най¬ден¬ное зна¬ч嬬ние кор¬ня с за¬дан¬ной точностью ерs.
PROCEDURE HORD (A,B,EPS:REAL; IT:INTEGER;
VAR X : REAL; VAR K:INTEGER);
VAR X1,X2,X3 : REAL; K1 : INTEGER;
BEGIN
K := 1;
X1 := FUNC(A);
X2 := FUNC(B);
X3 := B - X2*(B-A)/(X2-X1);
IF SIGN(X2)=SIGN(FUNC(X3)) THEN
K1:=1
ELSE
BEGIN
K1:=2;
X1:=X2;
END;
REPEAT
INC (K);
X := X3;
CASE K1 OF
1: X2:= X3-FUNC(X3)*(X3-A)/(FUNC(X3)-X1);
2: X2:= X3-FUNC(X3)*(B-X3)/(X1-FUNC(X3));
END;
X3 := X2;
UNTIL (K>IT) OR (ABS(X-X2)<EPS);
END.
Для проверки процедуры решалось уравнение
2 соs(х + ?/6) + х2 - 3х + 2 = 0.
Первоначально корни уравнения опре¬де-ля¬ли с точностью 0.1 графическим методом, а за-тем на鬬денное значение корня уточняли ме¬то-дом хорд до 0.0001.
Перепишем уравнение в виде
2 соs(х + ?/6) = -х2 + 3х - 2 ,
и если построить два графика: у = 2 соs(х +?/6) и у = -х + 3х- - 2, то можно убе¬дить¬ся, что один ко-рень ~1.1, а второй ~2.9. Поэтому пе¬р¬¬¬вый ин¬тер-вал выбираем [0.9; 1.3], второй - [2.7; 3.1]. Точ-ность уста¬новим ? = 0.0005.
Процедура-функция может выглядеть так:
FUNCTION FUNC (X :REAL) : REAL;
BEGIN FUNC := X*X - 3*X +2.0 + 2.0*COS(X+PI/6);
END.
Результаты расчетов с использованием под¬прграм¬мы HORD приводятся в табл. 1.6.
Таблица 1.6
Первый корень на интервале [0.9; 1.3] Второй корень на интервале [2.7; 3.1]
xi xi +1 № итерации xi xi+1 № итерации
1.044879 1.032336
1.031823
1.031803
1.032336; 1.031823;
1.031803;
1.031802;
k = 1
k = 2
k = 3
k = 4 2.915101 2.953624 2.959635 2.960551 2.960690 2.960711 2.953624; 2.959635; 2.960551; 2.960690; 2.960711; 2.960714; k = 1
k = 2
k = 3
k = 4
k = 5
k = 6
x = 1
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа