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

ность равна примерно 7io-7, если сравнивать результаты с таблицами А. М. Лежандра [121]. Для =0 имел место выход по ошибке из программы вычисления In.

АЛГОРИТМ 576

Функции Томсона Ьег и be! [Si9]

Процедура-функция berbei вычисляет функцию Томсона [9, с. 9971 ber{z), если г положить равным нулю, или bei(z), если г-\.

Замечание. В нижеследующей процедуре равенство s=s+k начнет выполняться с того момента, когда отношение k/s обратится в машинный нуль, real procedure berbei (r,z);

value r,z; real z; integer r; begin real s,k,p; integer i;

k:" = s: = if r==0 then 1 else p/4; p:=pxp;

for i: = 2 step 2 until 100 do begin

if s=s-bk then go to fin;

k: = -0.0625xkXp/((i + r) X (i-br-1)) 2;

s: -s+k end i; fin: berbei: = s end berbei;

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

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

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

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

Во избежание возможной неточности внутреннего машинного представления параметров г и i {г и с - в алгоритме 57), которая может привести к неверному выполнению условия if г=0 then и оператора цикла, указанные параметры в алгоритме 57а были отнесены к типу integer.

Результаты решения с помощью алгоритма 57а в системе ТА-1 приведены в табл. 2.

Таблица 2

функция

Результаты трансляции

Табличные значения

berbei (0, 1.65)=6е,- (1.65)

0.884559782

0.8845598

berbei (1. 1.65)=tej (1.65)

0.671876813

0.6718768

Табличные значения функций Ьег и bei взяты из работы [9].



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

А. П. Релф (Relph А. Р. «САСМ», 1962, № 7)

Алгоритм 57 был транслирован с использованием транслятора DEUCE ALGOL. Никаких изменений не потребовалось, результаты были удовлетворительными.

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

Г. Тачер (Thacher Н. С. «САСМ», 1962, № 8) Тело процедуры было проверено на машине LGP-30, использующей АЛГОЛ-транслятор, разработанный Вычислительным центром Дарт-мутского колледжа. Не было найдено никаких синтаксических ошибок.

Для 2=0.1, 0.2..... 1.0 с использованием семизначной десятичной

арифметики программа дала результаты с погрешностями, меньшими пяти единиц (а для 2=1, 2,..., 5 меньшими 12 единиц) седьмого разряда. Для больших значений z могут быть серьезные .погрешности округления. Например, для 2=20 таким путем может быть потеряно более двух десятых значения.

АЛГОРИТМ 586

Обращение матрицы методом Гаусса-Жордана [F1]

Процедура invert58 обращает .квадратную матрицу а порядка п методом исключения по Гауссу и Жордану. Попутно вычисляется определитель det матрицы а. Если матрица вырожденная или близка к вырожденной, то для предохранения от переполнения (при делении на значение главного элемента у) выполняется условный оператор, обеспечивающий переход к нелокализованной метке signal58, как только значение главного элемента у по модулю станет меньше некоторого эмпирически данного значения eps.

procedure invert58(n,eps) dataresult: (a) result: (det);

value n.eps; real eps.det; integer n; array a; begin real y,w; integer i,j,k,r,p; array b,c[l:nj;

Integer array z [l:n];

det:=l;

for j: = I step 1 until n do z [j]:=j; for i: = l step 1 until n do begin k: = i; y: = a[i,i]; r: = i-1; p: = i+l; for ]: = р step 1 until n do begin vi:=a[i,j]; if abs (w)>abs(y) then begin k:=j; y:=w end

end;

det:=yXdet;

if ki then det:=-det;

if abs(y) <;eps then go to signal 58;

y:=i/y;

for j:=l step 1 unti! n d©



begin clj]: = afj ,k]; a[j ,k]: a[j ,1];

a[j,il:-=-c[j]Xy;

bUl--=a[i,j]: = a[i,j]Xy end;

j:=z[i]; z[i]: = zM; z[k]:=j; a[i,i]:=y;

for k: = 1 step 1 until r, p step 1 until n do for j:=l step 1 until r,p step 1 until n do aIk,j]: = a[k,j]-bO]XcIk]

end i;

for r: = 1 step 1 until n do begin k: = z[r]; for j:=r while k=j do begin

for i:= 1 step 1 until n do begin w:.=: a [j,i]; a [j.i]: = a [k,i];

a[k,i]:=w end i; i:=.z[k]; zM:=z[j]; k: = z[j]:=i end j end r end invert58;

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

Алгоритм 586 отличается от алгоритма 58а только тем, что в операторе

if abs (у) <:eps then go to signal58; была исправлена опечатка: символ >.был заменен символом <.

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

Алгоритм 58а получен в результате переработки алгоритма 58 (Cohen D. «САСМ», 1961, № 5) в соответствии с рекомендациями «Замечания к алгоритму 58» П. Г. Беренца («САСМ», 1962, № 12). Кроме того, в процедуру inverts введен оператор у: - \1у для экономии машинного времени вследствие замены 2 делений умножениями, согласно рекомендации Р. Георга («Подтверждение к алгоритму 58». «САСМ», 1962, № 8). Перевод «Замечания к алгоритму 58» Г. Струбле («САСМ», 1962, № 8) здесь не приводится, поскольку это замечание не вносит ничего нового в приводимую информацию.

Результаты трансляции алгоритма 58а с тест-матрицей четвертого порядка приведены б «Свидетельстве к алгоритму 52а». Кроме того, обращалась матрица Вильсона

5 7 6 5 7 10 8 7

6 8 10 9 5 7 9 10

с помощью алгоритма 58а и алгоритма 66а. Для обеих процедур результаты совпадают до восьмого разряда включительно и равны





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