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

АЛГОРИТМ 1496

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

Процедуры-функции elipl и elip2 предназначены для вычисления полного эллиптического интеграла в форме

7С/2

, -elip 1 [а, Ь) = elip 2{а, Ь) - К la.

где K - F{k, KJ2) - полный эллиптический интеграл первого рода, k = =Y\bld [5, с. 343].

Выполнение процедур может перейти в бесконечный цикл, если предельная константа 10- окажется слишком малой для используемой в машине арифметики (см. [12] «Подтверждение к алгоритму 55 и алгоритму 149»). В процедурах используется также константа зх/2= =1.57... .

Процедура elipl может работать лишь с транслятором, реализующим рекурсивные процедуры.

real procedure elipl (а,Ь);

value a,b; real a,b; elipl:=if abs(a-b)<io-8Xa then 1.57079633/a else

elipl ((a-bb)/2,sqrt(aXb));

Процедура elip2 выполняет те же функции, что и elipl, но не пользуется свойством рекурсивности процедур.

real procedure elip2(a,b);

value a,b; real a,b; ,

begin real c;

iter: c:=(a+b)/2; b: = sqrt(aXb); a: = c;

if abs(a-b)<io-SXa then elip2:=1.57079633/a else go to iter end elip2;

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

Алгоритм 1496 является стереотипным переизданием алгоритма 149а.

Обе процедуры elipl и elip2 были транслированы в системе 4-70, и с их помощью были вычислены значения эллиптического интеграла для &/a=cos(a°/57.2957795) при а°=0(1) 10(5)80(1)89. Все результаты точно совпали с данными таблицы, приведенной в справочнике И. Н. Бронштейна и К. А. Семендяева [5, с. 80].

На вычисление одного значения процедурой elipl затрачивалось 0.016 с, а процедурой elip2 - 0.011 с.

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

Алгоритм 149а получен в результате ординарной переработки и исправления опечатки в алгоритме 149 (Мегпег J. N". «САСМ», 1962, № 12), указанной- в «Подтверждении к алгоритму 55 и алгорит-



му 149» (Т ache г Н. С. «САСМ», 1963, № 4). Перевод этого подтверждения см. в [24, с. 12].

Результаты трансляции, процедуры elip2 приведены в табл. 24.

Таблица 24

Входные параметры

с=1, 6=1

с=2, 6=3

а=2, 6=1

(A=sin 0°)

(A:=sin 30°)

(fe=sin 60°)

Результат

1.57079633

•1.685750358

2.15651564

трансляц-чи

По справочнику

1.5708

1.6858

2.1565

АЛГОРИТМ 1506

Экономное обращение симметричной матрицы [F1]

Процедура syminv {symmetric - симметричный, invertion - обращение) выполняет обращение симметричной матрицы методом, подобным описанному в работе Буссинга и Леви (Bussing, Levy. «САСМ», 1962, № 8), но «е требующим ни перестановки строк и столбцов, ни места в памяти для дополнительной матрицы Q.

Для процедуры необходимо задание верхнего треугольника исходной матрицы а[1:п, 1:п]. Результатом является верхний треугольник обращенной матрицы, помещенный на место массива а. Все главные элементы выбираются по диагонали, и если выбранный элемент равен нулю, то происходит выход .к глобальной метке signallbO.

procedure syminv(n) dataresult: (а);

value n; integer n; array a; begin real max; integer i,j,k; array p,q[l:n];

Boolean array r[l:n];

for i:=l step 1 until n do r[i]:=:true; ".

for i:=l step 1 until n do .

begin max:=0; • .

for j:=l step 1 until n do .

if r[i] Aabs(a[j,j]) >max then •

begin max: = abs(a[j,j]); k:=j end j; if max=:0 then go to signallSO; • •

r[k]:=false; q[k]:=l/a[k,k]; • •

p[k]:=.l; a[k,k]:=0; " •

for ]:=1 step 1 until к-1 do . • .• •

=a[j,k];

begin p [j

q[j]:=( i a[j,k]: end j;

r[j] then -a[j,k] else a[j,k]) Xq[k];

for j:=k-f 1 step 1 until n do

begin p[j]:= if r[j] then a[k,j] else -a[k,j];

q[j]: = -a[k,j]X.q[k]; a[k,i]:=0, . endj; . , ,

for j:=l step 1 until n do , , ,



for k:=j step 1 until n do -

a[j,k]:=a[j,k]+pn]Xq[k]

end i end syminv;

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

Алгоритм 1506 является стереотипным переизданием алгоритма 150а.

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

Алгоритм 150а получен в результате исправления, сокращения и ординарной переработки алгоритма 150 (Rutishauser Н. «САСМ», 1963, №2).

Параметр-метка fail была заменена глобальной меткой signallbO для сокращения обращения к процедуре syminv.

Алгоритм 150а транслирован со следующей матрицей Вильсона в качестве исходных данных:

5 7 6 5

• 7 10 8 7

6 8 10 9 5 7 9 10

С точностью до восьми значащих цифр получен правильный ре-• зультат :

68 -41 -17 10 25 10-6 5 -3

2 . .

Замечание к алгоритму 150

А. Эванс (Evans А. «САСМ», 1963, № 7)

Идентификатор «а» дважды используется в заголовке процедуры алгоритма 150 в списке формальных параметров. Неясно, какое значение в АЛГОЛе имеет такая ситуация. В самом деле, совсем не понятно, как можно транслировать ату процедуру. Если фактические параметры, соответствующие двум формальным параметрам с одним и тем же идентификатором, различны, то нет способа для транслятора (или для читателя) определить, какой из параметров «а» здесь используется. Неясно также, можно ли без опасения просто вычеркнуть один из параметров «а», так как в эксплуатации алгоритма может потребоваться, чтобы допускались две различные матрицы.

Замечание к алгоритму 150

X. Рутисхаузер (Rutishauser Н. «САСМ», 1963, № 7)

Заголовок процедуры syminv указывает на то, что значение параметра «а» изменяется в процессе вычисления (матрица а заменяется на обращенную, становясь, таким образом, ненужной). В любом обра-





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.0036