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

Заметим, что для п=4 наименьшую максимальную ошибку дает алгоритм 120, в то время как для п=5, 6, 7 лучшими программами являются gjr с частичным вращением, gjr без вращения и gjr с полным вращением соответственно. Таким образом, эти результаты не указывают на превосходство полного или частичного вращения. Это объясняется тем, что для рассматриваемых значений п и 6 f/ является положительно определенной матрицей. При отказе от вращения положительно определенных матриц границы погрешностей в результатах обращения матрицы Вилкинсона не меняются. Необходимость по крайней мере частичного вращения для обычных матриц может быть наглядно продемонстрирована на простых примерах.

Таблица 10

Максимальный элемент матрицы ошибок

Максимальный {27)

элемент;Г„ -Г

Алгоритм gfr

Алгоритм 120

без вращения

с частичным вращением

с полным вращением

3 4 5 6 7

4.2,0-5

2.2,0-2

2.0,о1

0.27,о4

1.9,о7

5.0,0-5

3.6,0-2

0.31,„1

Ы,о4

2.8,о7

4.2,0-5

3.9,0-2

1.2,о1

0.35,о4

1.2,о7

1-9,0-2

0.51,о1

1.7,„4

2.3,о7

8.6,„-5

4.6,0-2

4.5,„1

0.065,о4

0.065,о7

Матрицы Т были вычислены итерационным методом, описанным и анализированным в работе К. Молера [121]. Они верны для данного числа разрядов. Использованная программа подобна той, которая дана в алгоритме 135 (Mckeeman W. М. «САСМ», 1962, № 11).

Свидетельство к алгоритму 1216 [G5]

Алгоритм 1216 «Получение псевдослучайных чисел, нормально распределенных на отрезке (0,1)» не публикуется здесь, потому что с его помощью авторы выпуска не получили удовлетворительных результатов. Вместо алгоритма 1216 можно пользоваться алгоритмом 200а.

АЛГОРИТМ 1226

Преобразование симметричной матрицы в трехдиагональную

[F2]

Процедура tridiagl22 приводит вещественную симметричную матрицу а порядка п к трехдиагональной форме иХаХи, где ы -матрица и, транспонированная ic помощью последовательности не более чем (п-1) (п-2)/2 бинарных ортогональных преобразований.

Автор алгоритма 122 ссылается на работу Гивенса [131] и на работу Иогансена [141].



procedure tridiagl22 (n) dataresult: (a) result: (u);

value n; integer n; array a,u; begin real cl,c2,locl,loc2,t; integer i,j,j l,j2,nl,k;

comment Матрица u делается единичной порядка n; >

for i:=l step 1 until n do begin u[i,i]:=l;

for j:=i + l step 1 until n do u[i,j]:=ufj,i]:=0 end;

comment Здесь начинается, преобразование матрицы а, причем используются только элементы верхней треугольной матрицы; п1:=п-2;

for i:=l step 1 until nl do begin jl:=i+l;

for j:=i+2 step 1 until n do begin

if afi,j] =0 then go to next; t:=l/sqrt(a[i,jl]t2+a[i,j]

cl:=txa[i,jl Iocl:=a [jljl a[jl,jl]: = cl a

2+a[i,j]i2); :=1ХаП,]-]; c2:=a[jl,j];t:=a []•,]];

c2:=t ; loc2:

2X loci +2Xcl Xc2X ioc2q-c2f2Xt; ]l,j]:=-clXc2Xlocl + (clf2-c2f2)Xloc2 + clXc2Xt; j,j]:=c2f2Xlocl-2XclXc2xloc2+clf2Xt; for k:=j"+ 1 step 1 until n do begin t:=a[jl,k];

ani,k]:=clXt + c2Xa[],k];

-c2Xt+clXa

i.k]

a[j,k]:=-end k; j2:=i-l;

for k:=i+2 step 1 until j2 do beg n t:==a[jl,k];

a Г j 1 ,k]:=c 1X t + c2 X a [k, j ];

a[k,j]:=-c2Xt + clXa[k,j] end k;

a[i,jl]:=clXa[i,il]+c2Xa[i,j]; a[i,j]:=0;

for k:=l step 1 until n do begin t:=u[k,jl];

u[k,jl]: = clXt + c2Xu[k,Jl; u[k,j]:=-c2Xt + clXu[k,j]

end k;

next: end j

end i;

for step 1 until n do

for j:=i+l step 1 until n do a[j,i]:=a[i,j] end tridiagl22;

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

Алгоритм 1226 отличается от алгоритма 122а только тем, что идентификатор процедуры tridiag был заменен на tridiagl22, поскольку идентификатор tridiag уже использован в качестве названия процедуры алгоритма 176.



Несмотря на то, что в нижеследующем «Подтверждении к алгоритму 122» П. Наур рекомендует вместо алгоритма 122 пользоваться более эффективным алгоритмом Хаусхольдера, публикация алгоритма 1226 в данном выпуске была признана целесообразной, поскольку алгоритм Хаусхольдера не входит в библиотеку АСМ и нуждается еще в переводе и проверке на советских машинах.

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

Алгоритм 122а получен в результате исправления, сокращения и ординарной переработки алгоритма 122 (Dietzel G. F. «САСМ», 1962, № 9).

Алгоритм 122а транслирован с матрицей Хансена, приведенной в нижеследующем подтверждении П. Наура:

Получены результаты

4.00000000 3.74165738 0.000000000 0.00000000

3.74165738 5.00000000 0.462910050 0.00000000

0.00000000 0.462910050 0.666666666 0.0890870806

0.00000000 0.00000000 0.0890870806 0.333333333

1.00000000 0.000000000 0.000000000 0.000000000

0.00000000 0.801783726 -0.577350269 0.154303350

0.00000000 0.534522484 0.577350269 -0.617213400

0.00000000 0.267261242 0.577350269 0.771516750

Обратное преобразование иаи дает исходную матрицу а. Кроме того, алгоритм 122а транслирован с матрицей

1.00 0.42 0.54 0.66

0.42 1.00 0.32 0.44

0.54 0.32 1.00 0.22

0.66 0.44 0.22 1.00

приведенной в работе Д. К. Фаддеева и В. Н. Фаддеевой [1, с. 335]. Получен результат

1.00000000 0.950578771 0.000000000 0.000000000

0.950578771 1.60414342 0.246935729 0.000000000

0.000000000 0.246935729 0.603706450 -0.0283378095

0.000000000 0.000000000 0.0283378095 0.792150123

Этот результат отличается от результата вышеприведенной работы [1, с. 336] знаками при аь,2 и при йг.з- Дополнительной проверкой установлено, что в работе [1, с. 336] в этом месте допущена опечатка. Остальные элементы матрицы а совпадают с элементами матрицы из работы Д. К. Фаддеева и В. Н. Фаддеевой с точностью не менее семи значащих цифр.





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