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

Эти результаты лолностью совпали с контрольными значениями 1/Г(л:), взятыми из работы Е. Янке и др. [36, с. 54 и 59] и справочника Б. R Сегала и К- А. Семендяева {37, с. 450] (в последнем для значений I/Vt: и 1/21/").

Смотрите также «Замечание к алгоритмам 34, 54, 80, 221 и 291» М. Пайка и И. Хилла, помещенное в предыдущем выпуске [38] вслед за «Свидетельством к алгоритму 346».

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

Алгоритм 80а получен в результате исправления, сокращения и ординарной переработки алгоритма 80 (Holsten W. «САСМ», 1962, № 3).

В алгоритме 80 были обнаружены следующие ошибки.

1. В процедуре RGR спецификация real procedure RGAM не нужна и должна быть вычеркнута.

2. В процедуре RGAM описания integer i; и real array В[0:13]; должны быть перенесены из совокупности спецификаций в начало блока тела процедуры.

3. В примечании к процедуре RGR формула (2) должна иметь такой вид, какой она имеет в описании алгоритма 80а (см. [1, с. 162]).

4. В процедуре RGR после первых двух условных операторов должны быть точки с запятой.

Алгоритм 80а проверен с помощью транслятора ТА-1 для трех значений х и получены следующие результаты (табл. 18).

Таблица 18

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

Результаты, вьиисленные по справочник-ji 111

-0.2

-0.171787403

-0.17178

0.334272752

0.33427

0.564189583

0.56418

Свидетельство к алгоритмам 816, 826, 836 [G7]

Алгоритмы 816, 826 и 836 не публикзются здесь, потому что правильность соответствующих им алгоритмов 81, 82 и 83 («САСМ», 1962, № 3), равно как и алгоритмов 81а, 82а, 83а, не была подтверждена ни в журнале «САСМ» ни в расчетах авторов данного выпуска.

При новом просмотре алгоритма 81а в нем была обнаружена опечатка. На с. 67 [23] в 12-й строке снизу вместо

CM:=true;

должно быть

Е: C{k]:=true;

Кроме того, как алгоритм 81, так и алгоритм 81а содержит явную ошибку: «а с. 67 [23] в последней строке условие

if prices[j]<;i then

при /=1 не выполняется, так как вначале г = 0. Следовательно, встречающаяся далее переменная / остается неопределенной и последний в теле процедуры оператор цикла выполняться не может.



АЛГОРИТМ 846

Вычисление интеграла по Симпсону от таблично заданной функции [D1]

Процедура siml дает приближенное значение определенного интеграла непрерывной функции y=f{x) на интервале [а,Ь], заданной в виде таблицы значений уо, уи---, Уп с постоянным шагом, где п - четное число, Уй-Ца) и Уп-}{Ь). Вычисление ведется по формуле Симпсона

f{x)dx -- {уо+Ау1+2у2+ ... +4уп-1+Уп).

real procedure siml (n,a,b,y);

value a,b,n; real a,b; integer n; array y; begin real s; integer i;

s:=(y[0]-y[n])/2;

for i:=2 step 2 until n do s: = s+2Xy[i-1]+уЫ; siml:=2X (b-a) Xs/(3xn) end siml;

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

Процедура siml алгоритма 846 получена в результате замены в процедуре sim алгоритма 84а оператора

for i:=l step 2 until n-1 do s: = s+2Xyffl+yti+1]; на оператор

for i:=2 step 2 until n do s: = s + 2Xy[i-1]+уИ; для ускорения выполнения процедуры.

Алгоритм 846 был транслирован на машине М-220 в системе ТА-1М. С помощью .процедуры siml вычислялся интеграл

I cosxdx=l.

Результаты приведены ниже.

2 4

siml

1.0022798 1.0001345

1.0000033

1.0000002

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

Алгоритм 84а получен в результате ординарной переработки алгоритма 84 (Hennion Р. Е. «САСМ», 1962, № 4). Переводы «Замечания к алгоритму 84» («САСМ», 1962, № 8) и «Подтверждения к алгоритму 84» («САСМ», 1962, № И) здесь не приводятся, поскольку они не добавляют новой информации к нижеследующему «Подтверждению» А. П. Релфа.

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

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

Этот алгоритм был транслирован с помощью транслятора DEUCE ALGOL и дал удовлетворительные результаты без всяких исправлений.



в примечании к алгоритму не оговаривается, что п должно быть обязательно четным.

АЛГОРИТМ 856

Вычисление собственных значений и собственных векторов симметричной матрицы методом Якоби [F2]

Процедура jacobi находит все собственные значения и собственные ©екторы данной симметричной матрицы с помощью модифи-

цированного итерационного метода Якоби [171].

На выходе из процедуры k-й столбец матрицы s содержит -й из п собственных векторов данной матрицы, диагональный элемент d[k,k] массива а является соответствующим k-u собственным значением. Начальное значение массива s несущественно. Параметр rho (требуемая точность) введен в вышеуказанной работе, где дается детальная схема метода. Назначение параметра rho состоит в том, что итерация заканчивается, когда для каждого недиагонального элемента a[i,j] выполняется неравенство abs{a[i,j])<i{rholn)y,norm\, где norml является функцией только недиагональных элементов первоначальной матрицы.

.procedure jacobi (n,rho) dataresult: (a)result: (s);

value n,rho; real rho; integer n; array a,s; begin real norml,norm2,thr,mu,omega,sint,cost,intl,vl,v2,v3;

integer i,j,p,q,ind;

comment Формирование в массиве s единичной матрицы; for i: - 1 step 1 until n do for j: = l step 1 until i do

if i=j then s[i,j]: = l else sli,j]: = s[j,i]:=0; comment Вычисление начальной нормы (norml), конечной нормы (norm2) и порога (thr); intl:-=0;

for i:=2 step 1 until n do

for j:=:l step 1 until i-l do intl: = intl--2Xa[i,j]t2; if intl =0 then go to fin; norml:=thr: = sqrt(intl); norm2:= (rho/n) Xnorml; ind:=0; main: thr: = thr/n;

comment Здесь начинается обработка недиагональных элементов; mainl: for q:=:2 step 1 until n do

for p: = l step 1 until q-1 do if abs(a[p,q])thr then begin ind: = l;

vl:-a[p,p]; v2: = a[p,q]; v3: = a[q,q];

mu:=0.5X(vl-v3);

omega: = if mu=0 then-1 else

-sign(mu) Xv2/sqrt(v2f2-bmuf2); sint:=omega/sqrt(2X (l-l-sqrt(l-omegaf2))); cost:=sqrt(l-sintf2); for i: = l step 1 until n do





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