Главная страница  Алгоритмы 

[0] [1] [2] [3] [4] [ 5 ] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57]

Подтверждение к алгоритму 4 П. Дж. Рейдер (Rader Р. J. «САСМ», 1961, № 3)

Процедура bisec была запрограммирована для машины Royal Precision LGP-30, использующей систему 24.2 интерпретации плавающей запятой с 28 разрядами.

В алгоритме необходимо заменить go toyl на gotoyi.

После этих исправлений программа прошла хорошо для f{x)=cosx с пераметрами, указанными в табл. 2.

Таблица 2

eps I

Результат

1.55

2 2 2 2

0.001

0.001

0.001

0.001

0.001

0.001

0.001

signal 1.5703 1.5703 1.5500 1.5625

Эти комбинации параметров проверяют все ветви программы.

Алогритм 46 является стереотипным переизданием алгоритма 4а. В «Подтверждении к алгоритму 4» [24] была исправлена одна опечатка: F{x) заменено на /(х). Алгоритм 4а в том виде, как он опубликован, успешно используется в системе БЭСМ-АЛГОЛ.

Свидетельство к алгоритму 4а

Алгоритм 4а получен в результате переработки алгоритма 4 (G огп S. «САСМ», 1960, № 3), Тело процедуры по существу заново написано в более короткой и наглядной форме.

После переработки алгоритм 4а был нроверен с теми же исходными данньши, .которые указаны в нижеследующем подтверждении к алгоритму 4, для первых трех случаев. Получены результаты:

1) выход яа метку signal, 2) 1.67080078, 3) 1.57080078.



Вычисление функции Бееселя первого рода разложением в ряд [S18]

Процедура bessl вычисляет беоселеву функцию 1-го рода Jriiix), где п и х находятся в пределах, допускающих разложение в ряд. Оператор обращения к .процедуре имеет параметры п, х и абсолютную погрешность eps для определения места, начиная с которого членами ряда можно пренебречь. Особый случай: /о(0) =1. real procedure bessl (n,x,eps);

value n,x; real x,eps; integer n; begin real k,term,sum,snfac; integer s,t-, . s-=0; x:=x/2;

sum:-term: = snfac:=k: = l;

if x=0 Л n=0 then go to fin;

for t:= 2 step 1 until n do snfac: = snfacXt;

k:=xfn/snfac; x:=xXx; iter: s::=s+l; term:=-termXx/(sX (s+n));

sum: = sum+term;

if abs (term) >eps then go to iter; fin: bessl:=kXsum end bessl;

Свидетельство к алгоритму 56

Алгоритм 56 получен путем замены процедуры bessl алгоритма 5а процедурой bessl, приведенной в «Замечании к алгоритму 5а» Л. Ф. Лебедева [27, с. 172], с предварительным исправлением в последней одной семантической ошибки. Начало тела .процедуры bessl, имевшее вид

begin real k,term,sum; integer s,snfac,t; было заменено на

begin real k,term,sum,snfac; integer s,t;

Изменение типа integer переменной snfac на real делает семантически допустимым в теле процедуры оператор

sum: = term: = snf ас: = к: = 1;

Кроме того, такое изменение типа приводит к расширению области применимости алгоритма (это было замечено В. Я- Андерсоном в письме от 27.8.68 редактору выпусков) и к некоторому ускорению выполнения процедуры на машине.



Алгоритм 56 был транслирован IB системе ТА-.1М на машине М-220 и дал результаты, приведенные в табл. 3.

Таблица 3

Вычисленное значение

Контрольное значение

-2.0

0.22389077

0.2238907791

0.24331058

0.2433106048

0.17165075

0.1716508071

0.041939252

0.0419392518

0.576724813

0.576724807

0.00000000

0.0000000

0.44005058

0.4400506

1.5

0.55793650

0.5579365

0.33905895

0.3390590

-0.27668384

-0.2766839

Контрольные значения /п(л;) в табл. 3 взяты из работы А. Чистовой [31]. Вычисленные значения /„(х) в табл. 3 не отличаются от вычисленных значений Jn{x) в табл. 36, приведенной в «Замечании к алгоритму 5а» Л. Ф. Лебедева [27], кроме случая n-Q и л;=8.5, тде отмечено расхождение в двух последних цифрах.-

Бесселевы функции первого рода можно вычислять также и с помощью более совершенного, но более сложного алгоритма 236а.

Свидетельство к алгоритму 66

Алгоритм 66 не публикуется здесь потому, что для вычисления бесселевых функций /„(л;) опубликован более совершенный алгоритм 236а, пригодный не только для целых п и не только для больших х. Как показали расчеты, алгоритм 6 на машине М-220 приводит к переполнению уже при л:<;6.5 (для п=0 и 1).

АЛГОРИТМ 76

Алгоритм Евклида для нахождения общего наибольшего делителя двух целых чисел [А1]

Процедура comdiv находит общий наибольший делитель любой пары целых чисел а и Ь, для которых о+&>0 (com - начальные буквы слова common - общий, а div - начальные буквы слова divisor - делитель).




[0] [1] [2] [3] [4] [ 5 ] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57]

0.0173