Главная страница Алгоритмы [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] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] real procedure det(a,n); value a,n; integer n; array a; begin real t,d,max; integer i,j,k; d: = l; for k: - 1 step 1 until n do begin niax: = 0; for i:= к step 1 until n do • begin t: = a[i,k]; - . if abs (t)> abs (max) then begin max: = t; j: = i end end !; if max=0 then begin d: = 0; go to fin end; if jzk then begin d:=-d; for i:== к step 1 until n do begin t:==a(j,i]; atj,i]: = a{k,i]; alk,i]:=t end end; for i:= k+1 step 1 until n do begin t: = a[i,k]/max; for j:= k + 1 step 1 uhtil n do a[i,j]: = a![i,j]-tXalk.j] end i; d: = dxa[k,k] . ; end k; . •.. fin: det; = d , . . . . end det; ... . . . . Свидетельство к алгоритму 416 Процедура det алгоритма 416 является стереотипным ереизданием дроцедуры det алгоритма 41а. Алгоритм 41а широко используется во многих зада-ах в системе БЭСМ-АЛГОЛ. Свидетельство к алгоритму 41а Алгоритм 41а написан заново авторами данного вы-уска, поскольку исходный алгоритм 41 («САСМ», 1961, № 4) и пересмотренный алгоритм 41 («САСМ», 1963, № 9) были неудовлетворительными. Замечание к алгоритму 41 (Rotenberg L. J. «САСМ», 1964, № 3) здесь Не приводится, поскольку оио потеряло свое значение ДОсле составления алгоритма 41а. Алгоритм 4ia проверен с помощью транслятора с исходными данныМИ, приведенными в нижеследующем подтверждении к алгоритму 41. Результаты полностью совпали. Подтверждение к алгоритму 41 Б. X. Фрид (Freed В. Н. «САСМ», 1963, № 9) Когда алгоритм 41 переводился ira язык SCALP для отладки на машине LGP-30, были найдены небходимыми следующие поправки... *. После вышеперечисленных изменений алгоритм был проверен на машине и .получены хорошие результаты. 10.96.597 35.10765 96.72356 - 1. Л =2.-35765 -=8*.tt-256 0.87932 18.24689 22.13579 1.11123 de:=0.1527313Х 10°. Ручным счетом на настольной вычислительной .машинке получено, что для этой матрицы определитель равен 152731.3600. 2. А = 1.0 1.0 1.0 1.0 3.0 4.0 5.0 6.0 3.0 6.0 10.0 15.0 1.0 4.0 10.0 20.0 cfe = 0.9999999X10+"". Эта матрица, являющаяся конечным сегментом треугольника Паскаля, имеет определитель, равный 1.000000000. 3. Л = 0.0 5.0 7.0 0.0 9.0 5.0 0.0 2.0 4.0 det =0.0000000 X 10"" что, очевидно, совершенно точно. Наконец, можно сделать одно большое изменение...** Пересмотренный алгоритм был переведен на язык SCALP и проверен на машине LGP-30 с теми результатами, которые указаны выше. Приводится пересмотрен-, ный алгоритм. рей.) * Указываются шесть поправок к алгоритму 41. {Прим. ред.) ** Указывается одно сокращение алгоритма 41. {Прим. ред.) *** Приводится пересмотренный вариант алгоритма 41. {ПриМ. АЛГОРИТМ 426 Обращение матрицы [FI] Процедура invert (т. е. обращать) обращает квадратную матрицу matr порядка п с помощью ряда элементарных операций над строками матрицы m/r, "расширенной путем дополнения ее единичной матрицей. Случай Л. Дж. Ротенберг (Rotenberg L. J. «САСМ», 1964, № 3) При ручной проверке программы была обнаружена щибка. Например, алгоритм в том виде, как он был тубликован, давал бы значение нуль для определителя атрицы 0 0 0 1 0 0 10 0 10 0 10 0 0 . Ошибка содержится в поиске ненулевого элемента г-м столбце матрицы Ь. Замечание Г. Форсайта. По-видимому, наилучшее общее вычисление определителя из опубликованных в данном разделе заложено в решении системы линейных уравнений алгоритма 43 («САСМ», 1961, № 4, р. 176, 182; 1963, № 8, р. 445) и алгоритма 135 («САСМ», November 1962, р. 553, 557). В них проверяется каждый столбец на максимальный но модулю элемент. Алгоритм 41 ищет только ненулевой элемент в каждой колонке и будет, следовательно, непригоден для матрицы 2- 1 1 1 1 2 1 1 1 если tS для машины с 5-разрядной плавающей запятой. Можно надеяться, что вскоре вместо алгоритма 41 будет опубликовано хорошее вычисление определителя. [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] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] 0.0135 |