![]() |
|
Главная Промышленная автоматика. ность равна примерно 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
Табличные значения функций Ьег и 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 |