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

Трансляция программы, которая выдает одну из таких таблиц, заняла около 40 с. Время решения указано в табл. 21.

Таблица 21

Время решения

Для первоначального алгоритма, сек

Для пересмотрешого алгоритма, сек

тест-матрица алгоритма 52

тест-матрица Хансена

тест-матрпца Хансена

10-»

5 10 15

3 22 70

IO-s

5 10 15

3 5 13

5 29 99

10-8

5 6 7 8 IG 15

4 5 5 5 13 22

7 12 18

38 116

Из табл. 21 видно, что тест-матрица алгоритма 52 нетипична по отношению к обычному решению с помощью процедуры jacobi. Гораздо более высокая точность, полученная для этой матрицы, по сравнению с матрицей Хансена говорит о том же.

Алгоритмы, опубликованные Дж. Вилкинсоном («Num. Math.», 1962, 4, 354-376) тоже были успешно проверены в системе GIER ALGOL. Алгоритмы Вилкинсона приводят матрицу к трехдиагональной форме посредством метода Хаусхолдера и используют последовательности Штурма для нахождения собственных значений и обратную итерацию для нахождения собственных векторов. В GIER ALGOL этот метод примерно в 1.3 раза быстрее, чем алгоритм jacobi для рассмотренного здесь ряда матриц. Процедура jacobi имеет то преимущество, что собственные векторы строго ортогональны даже при кратных собственных значениях, кроме того, процедура jacobi имеет более простую логику. С другой стороны, алгоритмы Вилкинсона дают гораздо более высокую скорость, если отыскиваются только некоторые из собственных значений и собственных векторов, тогда как процедура jacobi всегда находит их все.

Свидетельство к алгоритмам 866 и 876 [G6]

Алгоритмы 866 и 876 не публикуются здесь, потому что для получения перестановок компонент вектора вместо алгоритмов 86 и 87 (Реек J. е., Schrack g. f. «САСМ», 1962, № 4) позднее в журнале «САСМ» были опубликованы более совершенные алгоритмы. См., например, «Замечания к алгоритмам 87, 102, 130 и 202» Р. Орд-Смита 126, с. 10].



Свидетельство к алгоритмам 886, 896 и 906 [S20]

Алгоритмы 886, 896 и 906 не публикуются здесь, потому что для вычисления интегралов Френеля вместо алгоритмов 88, 89 и 90 (Cun-diff J. L. «САСМ», 1962, № 5) позднее в журнале «САСМ» был опубликован более совершенный алгоритм 244 (Gray М. «САСМ», 1964, № 11), которому соответствует русский вариант - алгоритм 244а [26].

Свидетельство к алгоритму 916 [Е2]

Алгоритм 916 не публикуется здесь, потому что для аппроксимации таблиц с помощью полинома Чебышева вместо алгоритма 91 (New-house А. «САСМ», 1962, № 5) позднее в журнале «САСМ» был опубликован более совершенный алгорг-м 318 (Boothroyd J. «САСМ», 1967, № 12).

АЛГОРИТМ 926

Решение системы линейных алгебраических уравнений и обращение матрицы [F4]

Процедура simult (сокращение от simultaneous - совместная) разрешает уравнение их=Ь относительно вектора х, где означает транспонирование. Число итераций задается параметром tzount. Результат транспонирования матрицы и задается в массиве «[l:n,l:n], а вектор-строка Ь - в массиве Ь[1:п]. Автор алгоритма 92 не рекомендует задавать kount>6. Решение уравнения, т. е. вектор-строка х содержится в массиве х[\:п]. Матрица с[1:п,1:п] служит для контроля точности. После выполнения процедуры simult в качестве первой строки матрицы с должен быть вектор Ь; вдоль главной ее диагонали должен стоять первый элемент bi вектора Ь, а остальные ее элементы должны быть равны нулю. Число eps (типа real) служит для проверки того, насколько действительный результат близок к теоретическому. Если взять 6= (1, О, 0), то данная процедура найдет матрицу w{l:n,l:n], являющуюся обращенной матрицей и. В нулевом цикле первой итерации процедура определяет, в качестве строк матрицы w столбцы матрицы и. Для всех следующих итераций строки матрицы w, вычисленные в п-ш цикле последней итерации, являются строками матрицы w нулевого цикла.

procedure simult (u,b,n,kount,eps) result: (w,x,c);

value eps,n,kount; real eps; ititeger n.kount; array u,c,b,w,x; begin real bh,z; integer i,j,p;

for j: = l step 1 unti n do fori: = l step 1 until n do vir[j,i]: = u[i,i]; nol: for j: = l step 1 until n do

for i: = l step 1 until n do c[i,j]:=0; bh:=b[l];

for j: = 1 step 1 until n do begin

for i: = l step 1 until n do с [j,j ]: =c ] + w [j ,i] X u [i,j ];



z: = bh/c[j,j];

for i: = l step 1 until n do wlj,i]: = zXAlJ,i]; for i: = 1 step 1 until n do if 1=5 j then begin

for p: = l step 1 until n do

Ф, j]: = c[i, j]+u[p, j] X w[i,p]; z:= (if i=l then b{j] else 0)-c[i,j]; for p:=l step 1 until n do w[i,p]: = bh X w[i,p]+z X wlj ,p] end i; bh:=l end i; z: = abs(btl]); for j: = l step 1 until n do

if abs(abs(c[j,j])-z)>eps then begin kount: = kount-1;

if kountO then go to nol end;

for j: = l step 1 until n do x[j]:=w[l,j] end simult;

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

Алгоритм 926 получен в результате ряда существенных преобразований алгоритма 92а, имеющих целью сокращение его записи и расходуемой им памяти и ускорение его выполнения.

Алгоритм 926 был транслирован на машине М-220 в системе ТА-1М для решения системы уравнений

л:, - 2л:г + л:, = -2,

ЗХг-\-2Хг-\-2Хг = 7.

в обращении к процедуре simult задавались параметры

"2 13

1 -2 3 1

Ь=(9,-2,7); п=3; kount=l, 3, 6, 10, 50 и et7s=io-3, ю-5, ю-8. Во

всех вариантах были получены одни и те же правильные результаты х= (-1,2,3) и

с= 11-0.36379788,0-11 О

-2 7

9 0.2182787210-10

-0.58207661,0-10 9

При задании Ь= (1,0,0) для всех вышеуказанных вариантов остальных параметров была получена одна и та же матрица

-0.46153846 0.076923076 0.61538461 0.30769230 -0.38461538 -0.076923076 0.53846153 0.076923076 -0.38461538





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