Главная Промышленная автоматика.

Для проверки утверждения, что алгоритм работает фактически с точностью машины, он был переведен в команды двойной точности автокода Меркурий и пропущен на машине Атласе использованием транслятора EXCHLF Оконстаята была удлинена до 0.398942280401432677939946).

Таблица 13

DtS (Л)

* > 0 = upper

х>Офиррег

abs (X)

х>0=иррег

х>Офиррег

21* (5)

25* (0)

10.0

20.0

* Эти величины объясняются погрешностью вычитания, упомянутой в примечании к алгоритму. Изменение константы 2.32 на 1.28 приводит к величинам, указанным в скобках. (Прим. И. Хилла и С. Джойса).

Результаты сравнивались с результатами ручного счета, причем использовалась таблица II работы В. Шеппарда [161]. Ошибки, замеченные в 22-й значащей цифре, приведены в табл. 14.

Таблица 14

abs (jc)

x>0=upper

х>афиррег

Хронометраж этого алгоритма был сделан в терминах «Instruction Count» машины Atlas при 100-кратном вычислении функции. Полученные цифры к другой машине не применимы, но отношения времен, вероятно, будут такими же и для других машин. Результаты хронометража всех вышеупомянутых алгоритмов приведены в табл. 15.

Таблица 15

Номер алгоритма

abs{x)

226 (m=7)

304"

3046

1.5 2.0

127

1400

2100

10.0

2700

20.0

6500

30.0

10 900



а - вариант, соответствующий х>0иррег; 6 - вариант, соответствующий х>ОФиррег;

е-.время для получения неверного решения. 120-кратный -просчет дал

бы вместе со смежными значениями плавную кривую; г-100-кратное применение «Instruction Count» на одно вычисление.

Заключение. Для концевых площадей функции нормального распределения целесообразно иметь два алгоритма. Один должен быть очень быстрым и достаточно точным, другой - очень точным и достаточно быстрым. Мы пришли к выводу, что алгоритм 209 является лучшим в смысле первого, а алгоритм 304 - лучшим в смысле второго требования.

Алгоритмы 180 и 181 .работают быстрее алгоритма 304, и в этом смысле им может быть отдано предпочтение, но используемый в алгоритме 181 метод кажется не вполне точным, а допущение этого метода только в тех случаях, когда применим алгоритм 180, по-видимому, вряд ли рационально.

Авторы данных «Замечаний» выражают благодарность мисс И. Аллен за помощь в выполнении ручных вычислений с двойной точностью.

АЛГОРИТМ 1246

Функция Ханкеля [S17]

Процедура hankel вычисляет комплексно определенную функцию Ханкеля Hn{x)=Jn{x) ±iNn{x) (см. [4, раздел 8.405]) от вещественного аргумента х и целого порядка пО и выдает ее компоненты в виде переменных (hi) и {h2).

Ряды функций Бесселя (hi) и Неймана (/г2) не вычисляются по отдельности. Как вещественная, так и мнимая части образуются из одних и тех же членов. Буквой т обозначено максимальное число, представимое в данной машине и заменяющее оо. Здесь использована константа 2x=1.1544..., где С - постоянная Эйлера [4, с. 1094], и константа 1/я=0.318..., необходимая точность задания которых зависит от конкретной машины.

procedure hankel(п,х,ш)result: (hl,h2);

value п,х,ш; real x,m,hl,h2; integer n; begin real k,p,r,a,s,t,d,b; integer q; if x=0 then

begin h2:=-m;

hl:=if n=0 then ] else 0; go to exit end;

a:=r:=l; hl:=h2:==s:=0;

for q:=l step 1 until n do

begin r:=rXq; s:=s+l/q end; d:= if n=0 then 0 else r/n; r:=l/r; k: = xXx/4; p:=kfn; t:=ln(k)+1.1544313298031;

for q:=0,q + l vihile q<.nV b=H=h2 do • - •

begin b:=h2; hl:=hl + aXr; -.



h2:=h2+aX(rX(t-s) -(if q<n then d/p else 0));

a:=aXk/(q+l); r:=-г/(q + n+1); s:=s+l/(q+l) + l/(q + n+l); if q+l<n then d: = d/(n-q-1) end q;

p:=(x/2)fn; hl:=hlXp; h2:=0.318309886184 Xh2Xp; exit: end hankel;

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

Процедура hankel алгоритма 1246 отличается от соответствующе!! процедуры алгоритма 124а только тем, что ради удобства пользования глобальный идентификатор М в теле процедуры и в ее заголовке был заменен формальным параметром т. В пояснительном тексте были сделаны соответствующие изменения и некоторые дополнительные уточнения. Этот алгоритм сейчас широко используется в системе БЭСМ-АЛГОЛ.

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

Алгоритм 124а получен в результате сокращения и ординарной переработки процедуры, приведенной в «Подтверждении к алгоритму 124» (Reilly G. А. «САСМ», 1965, № 12).

В вышеуказанной процедуре константа 2ХС была исправлена, и массив Я[1:2] для экономии машинного времени был заменен двумя простыми переменными hi и h2.

Результаты трансляции алгоритма 124а приведены в табл. 16. Они полностью согласуются со значениями функций Бесселя и Неймана, приведенными в работе Е. Япке и др. [8].

Таблица 16

М, Ь2

х=12

0 1 3 7

Й1=/„(Х)

Л1=/, (X) Л2=#,(х) й1=/з(х)

hl=J,{K)

-10" 0

-10" 0

-10" 0

-10"

-0.397149810 -0.0169407393 -0.066043328 0.397925710 0.430171474 -0.182022115

0.0151760694 -3.70622393

0.171650806 0.223521487 0.234636347 -0.158060461 -0.291132207 0.026542159 0.320589>78 -0.200063904

0.0476894063 -0.225237471 -0.223447П5 -0.0570987515

0.195130676

0.129010897 -0.170601437

0.189758342

Подтверждение к алгоритму 124

Г. Райли (Reilly G. А. «САСМ», 1965, № 12)

После изменений алгоритм был проверен на машине В-5000 с использованием языка ALGOL В-5000. Полученные результаты сверялись сданными справочника [15i].

Для п=0, 1, 2 и для д;<8 точность была до 10 десятичных цифр. Для 8<д;<17.5 точность ухудшалась до 6 десятичных цифр. Для 3«9 точность составляла до 5 десятичных табличных цифр. Для





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

0.0017