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

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

sin («+1)6 = sin nJd X cos е + cos п6 X sin 6.

cos (n +1) 0=cos n6 X cos 0-sin nQ X sin G

ценой затраты некоторой дополнительной памяти.

Мы нащли, что эта процедура весьма эффективна в задачах, связанных с разложением в ряд Фурье, каж это было предложено Г. Гюр-зелем в гл. 24 работы «Математические методы для вычислительных мащин» [III].

Свидетельство к алгоритму §46 [S14]

Алгоритм 546 «Гамма-функция для интервала [1,2]» не публикуется здесь, потому что в журнале «САСМ» позднее были опубликованы более совершенные алгоритмы 80, 221 и 291 для вычисления гамма-функции. См. «Замечания к алгоритмам 34, 54, 80, 221 и 291» М. Пайка и И. Хилла, перевод которых опубликован вслед за «Свидетельством к алгоритму 34а» [38], а также алгоритмы 806 и 221а [26].

АЛГОРИТМ 556

Полный эллиптический интеграл первого рода [S21]

Процедура-функция ellipticl вычисляет эллиптический интеграл первого рода К{к,л/2). real procedure ellipticl (к);

value к; real к; begin real t;

li - l kxk

eilipticl:= ((0.032024666Xt+0.054544409) Xt -f0.097932891) Xt +1.3862944 - (((0.0109449} 2 X t + 0.060}} 8519) X t + 0.12475074) Xt+0.5) Xln(t) end ellipticl;

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

Алгоритм 556 является стереотипным переизданием алгоритма 55а. Правильность алгоритма 55а была подтверждена в расчетах на машине БЭСМ-6. (См. «Подтверждение к алгоритмам 4а, 7а, 238а»

Л. С. Кривонос и 3. А. Шиншиновой [38, прил. 1].)

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

Алгоритм 55а получен в результате исправления и ординарной переработки алгоритма 55 (Herndon J. R. «САСМ», 1961, № 4).

С помощью ТА-1 проведено контрольное решение, и для =0.5 получено /(=,1.68574994. Табличное значение [1] этого интеграла К== = 1.6858.



Подтверждение к алгоритмам 55 и 149

Г. Тачер (Т h а с h е г Н. С. «САСМ», 1963, № 4)

Тела процедур алгоритмов 55 и 149 были проверены на машине LGP-30, использующей язык SCALP дартмутского транслятора для подмножества языка АЛГОЛ-60. Арифметика с плавающей запятой имеет семь значащих цифр.

Кроме .модификаций, которые потребовались в связи с ограниче-НИЯ1МИ, налагаемыми языком SCALP, оказались необходимыми следующие поправки ... *

Параметры алгоритма 149 связаны с эллиптическим интегралом первого рода соотношением K=aXELlP{a,b), где параметр m-k=

Максимальная погрешность приближения в алгоритме 55 дается Хастингсом (Hastings) как 0.6x10-. Креме того, может получиться существенная ошибка округления при формировании дополнительного параметра t=l-kxk. Для k, близкого к 1, ошибка так велика, что д стоверны только четыре значащие цифры. (В этой области дополнительный параметр t является гораздо более удовлетворительным приближением.)

Точность, достижимая в алгоритме 149, ограничивается только точностью арифметики и размером усилий, которые н<елательно затратить. Точность шесть цифр была получена с пятью вычислениями арифме-тическо-геометрического среднего для a=il000, b=2 и с одним вычислением для «=500, &=500.

Ни тот, ни другой из алгоритмов неудовлетворителен при k~l. Работа алгоритма 55 определяется ошибкой, получающейся при вычислении логарифма. При этих условиях (т. е. при k=l) алгоритм 149 входит в бесконечный цикл. Алгоритм 149 может перейти в бесконечный цикл также из-за величины предельной константы (10~* в опубликованном алгоритме), оказывающейся слишком малой для используемой арифметики. Для арифметики SCALP было найдено необходимым увеличить это допустимое отклонение до S.Oio-7. Результирующие значения эллиптических интегралов имели точность от двух до семи значащих цифр (до шести цифр iB десятичной системе счисления).

Сравнительная эффективность этих двух алгоритмов сильно зависит от эффективности подпрограмм квадратного корня и логарифма. Для большинства вычислительных систем алгоритм 55 обеспечивает достаточную точность и более эф.фективен. Если же применяется операция извлечения квадратного корня или высокоэффективная подпрограмма вычисления квадратного корня, то алгоритм 149 может оказаться лучше.

АЛГОРИТМ 566

Полный эллиптический интеграл второго рода [S21]

Процедура-функция elliptic2 вычисляет эллиптический интеграл второго рода Е{к,л/2), если задано t-l-kXk. При k=l происходит выход к глобальной метке signal56.

* Указываются две ошибки в алгоритме 55 и одна ошибка в алгоритме 149. (Прим. ред.)

** В оригинале напечатано 1-bfa. {Прим. ред.)



treal procedure elliptic2 (t); value t; real t;

btgm if t=0 then go to signal56; :

elliptic2: =

((0.040905094Xt+0.085099193) Xt+0.44479204) Xt+l.O - (((0.01382999 X t+0.08150224) X t+0.24969795) X t) X In (t) isnd elliptic2;

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

Алгоритм 566 получен из алгоритма 56а nyTeM следующих очевидных изменений.

1. Входной параметр k был заменен на t=l-kXk. Соответственно был удален оператор t: = l-kXk; и скорректированы специфика-,ции.

2. В начало тела процедуры добавлен оператор

if t=0 then go to signaI56;

3. Соответствующие этим модификациям коррективы внесены в пояснительный текст.

Правильность алгоритма 566 была подтверждена расчетами на машине БЭСМ-6 (см. «Подтверждение к алгоритмам 4а, 7а,..., 238а» Л. С. Кривонос и 3. А. Шиншиновой [38, прил. 1]).

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

Алгоритм 56а получен в результате исправления и ординарной пе-дзеработки алгоритма 56 (Herndon J. R. «САСМ», 1961, № 4). Были внесены следующие исправления.

1. Начало оператора eliiptic2:-{{{ было заменено на

2. Идентификатор log был заменен на In.

С помощью транслятора ТА-1 для =0.5 получено £=1.46746165. Табличное значение [1] равно £==1.4675.

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

Г. Ларсен (Larsen G. М. «САСМ», 1966, № 1)

Алгоритм 56 был проверен на машине Univac 1107 с использовани-•ем транслятора Univac 1107 ALGOL 60 (датированного 25 январем 1965 г.). В этой машине числа представляются с плавающей запятой восемью значащими цифрами.

В алгоритме были исправлены две синтаксические ошибки... *

Кроме того, оператор : = 1-kXk был удален из алгоритма, а сам параметр / был принят в качестве входного параметра процедуры

геа! procedure ELLIPTIC2(t); vaJue t; real t; BO избежание погрешности, когда значение k близко к единице.

Было вычислено несколько значений полного эллиптического интеграла второго рода для 1 t>0. Найдено, что максимальная погреш-

* Указываются две ошибки в алгоритме 56, уже замеченные ранее авторами .-выпусков и исправленные при составлении алгоритма 56а. {Прим. ред.)





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

0.0035