Главная страница  Алгоритмы 

[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.0311