Вторая пачка часть 74
В тех вер¬си¬ях язы¬ка, где нет этой встрен¬ной функции, мож¬но заранее нବп謬-сать с¬от¬вет¬ст¬ву¬ю¬щую про¬це¬ду¬ру;
2) определить процедуру-функцию, вы¬чис¬ля-ю¬щую F(х) толь¬¬ко один раз;
3) заменить в операторе цикла медленный оператор (А+В)/2 на более быстрый (А+В)*0.5. Заметим, что имен¬¬но для этой прграм¬мы дан-ное усо¬вер¬шен¬ство¬вବ¬ние бу¬дет не¬за¬мет¬но, хотя в случае боль¬ших прграмм учет скорости вы¬по묬-нения опе¬ра¬ций в ма¬шине да¬ет ощ󬬬ти¬мый ре¬з¬-уль¬тат.
Формальные параметры процедуры. Входные: a, b (тип real) - определяют длину от-ре第ка; eps (тип re¬¬al) - оп¬ределяет заданную точ-ность вы¬числений; it (тип in¬te¬ger) - определяет на¬и¬боль¬¬шее раз¬ре¬шен¬ное количество ите¬раций (для из¬бе¬жа¬ния за¬цик¬ли¬вବ¬ния про¬цесса в слу¬чае не¬пра¬виль¬ного опре¬де¬ле¬ния от¬рез¬ка). Выходные: х (тип real) - в нем со¬дер¬жит¬¬ся ис¬комый ко¬рень срав¬не¬ния; k (тип integer) - в не¬го за¬носится количество вы¬пол¬нен¬ных ит嬬ра¬ций.
Учитывая все замечания, окон¬ча¬тель¬¬¬¬ный ва¬риант про¬ц嬬дуры BISECT может быть сл嬬¬ду-ющим:
PROCEDURE BISECT (A,B,EPS :REAL; IT:INTEGER;
VAR X : REAL; VAR K:INTEGER);
VAR A1, B1: REAL; X1, X2, X3 : INTEGER;
BEGIN
K := 0;
X1 := SIGN (FUNC(A));
X2 := SIGN (FUNC(B));
A1 := A;
B1 := B;
REPEAT
INC (K);
X := (A1+B1)*0.5;
X3 := SIGN (FUNC (X));
IF X3=0 THEN EXIT;
IF ABS(B1-A1)<(2*EPS) THEN EXIT;
IF (X1=X2) AND (X2=X3) THEN EXIT;
IF X1=X3 THEN
BEGIN
A1 := X;
X1 := X3;
END
ELSE
BEGIN B1 := X;
X2 := X3;
END;
UNTIL K>IT;
END.
Перед началом работы программы опр嬬-деляют FUNC(x) - процедуру-функцию, по которой вы¬чис¬ля¬¬¬¬ют знବ¬че¬ния F(х). Тип функции должен быть в嬬щес¬¬¬твен¬ным. Ес¬ли в библиотеке стан¬дарт¬но¬го ма¬т嬬¬матического ¬обес¬¬пе¬ч嬬¬ния отсутствует про¬це¬ду¬ра-функ¬ция SIGN, то ее сле-дует нବпи¬сать самостоятельно.
Предложенная процедура проверялась на пр謬¬¬¬¬м¬е¬ре ре¬ше¬ния уравнения x2 - 5 sin x = 0
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа