Главная Промышленная автоматика. Заметим, что для п=4 наименьшую максимальную ошибку дает алгоритм 120, в то время как для п=5, 6, 7 лучшими программами являются gjr с частичным вращением, gjr без вращения и gjr с полным вращением соответственно. Таким образом, эти результаты не указывают на превосходство полного или частичного вращения. Это объясняется тем, что для рассматриваемых значений п и 6 f/ является положительно определенной матрицей. При отказе от вращения положительно определенных матриц границы погрешностей в результатах обращения матрицы Вилкинсона не меняются. Необходимость по крайней мере частичного вращения для обычных матриц может быть наглядно продемонстрирована на простых примерах. Таблица 10
Матрицы Т были вычислены итерационным методом, описанным и анализированным в работе К. Молера [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.0018 |