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

[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]

Алгоритм 306 был транслирован на машине М-220 5 системе ТА-1М и на машине БЭСМ-6 в системе БЭСМ-АЛГОЛ. Для уравнений, приведенных в «Подтверждении» В. Александвра (см. ниже), полученные результаты совпали с нижеприведенными результатами Дж. Кофельда. Для первого из уравнений, указанных в «(Подтверждении» Дж. Кофельда, получены результаты:

л:=:-0.19655743,

--- л:=0.14332606+ 0.160602121,

л;= (-9.9998901) X 10-е,

отличающиеся от результатов Дж. Кофельда не более чем на 0.005.

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

Алгоритм 30а получен в результате исправления, сок1ращения и ординарной переработки алгоритма 30 К. В. Элленбергера (Ellenberger К- W. «САСМ», 1960, №12).

Кроме тех поправок, которые были указаны в нижеследующих подтверждениях, в алгоритм 30 внесены следующие исправления.

1. Глобальные переменные р и q используются только в теле процедуры rootpol «, следовательно, должны быть в нем локализованы, тем более что эти переменные вызывают в алгоритме 30 побочные эффекты. .

2. Цикл с меткой ZROTEST в случае, когда все а[1], а[п] равны нулю, будет выполняться бесконечно.

Для ликвидации такого «зацикливания» нужно добавить еще одно условие окончания цикла при пО. (В алгоритме 30а этому циклу соответствует оператор с меткой testO.)

3. Модификации алгоритма 30, предложенные В. Дж. Александером в нижеследующем подтверждении для ликвидации переполнений в случае, когда некоторые коэффициенты в уравнении пониженной степени становятся малыми, но не равными нулю, вносят в алгоритм 30 новые дефекты, заключающиеся в том, что при п=0 используются неопределенные значения коэффициентвв Ь[0] и d[0]. Для услранения эгих ошибок в алгоритм 30а внесены соответствующие изменения.

4. Поправки К- Дж. Коэна в нижеследующем подтверждении к третьей и четвертой строкам алгоритма



выше метки revers, в свою очередь, содержат опечатку и допускают дальнейшее сокращение. Это исоравлено в алгоритме 30а.

Подтверждение к алгоритму 30

В. Дж. Александер (Alexander W. J. «САСМ», 1961, №5)

Процедура ROOTPOL была запрограммирована вручную для машины LGP-30, использующей транслятор ACT-III с 24 двоичными разрядами. Были найдены необходимыми следующие исправления... *.

С этими иэменениями были получены следующие результаты:

х* - Зл;а + 20x= -f 44x -Н 54 = О, л; = - 0.9706390 + 1.005808/,

x= 2.470639 + 4.640533f; х« - 2x» + 2x* -f -f 6x - 6х -f л; = - 0.9999999 + 0.9999999ё, + 8 = 0, X = 1.500000 + 1.322876f,

x= 0.5000002 + 0.866025H; x» + x* -8x»-16x= + 7x+ 15 = 0, x= 3.000001,

x = -2.000000 + 1.000obh-.

x= -0.9999997.

x= 0.9999998.

Подтверждение к алгоритму 30 К. Дж. Коэн (Cohen К. J. «САСМ», 1962, № 1)

Процедура ROOTPOL, опубликованная первоначально Элленбергером, с ноправками и модификациями Александера была запрограммирована для машины Bendix G-2 на языке 20-GATE. Некоторые серьезные ошибки были обнаружены в третьей и четвертой строках выше оператора с меткой «REVERS» алгоритма Эллен-бергера, не упомянутые в «Подтверждении» Александера ...**.

После этих поправок полученные результаты по существу согласуются с результатами, приведенными Александером.

* Указывается 11 поправок к алгоритму 30, учтенных в алгоритме ЗОа. {Прим. ред.)

** Указываются две поправки к алгоритму 30, учтенные в алгоритме ЗОа. {Прим. ред.)



Подтверждение к алгоритму 30 Дж. Кофельд (Kohfeld J. J. «САСМ», 1967, № 5)

В процедуре rootpol обнаружено... *.

С этими поправками и теми, которые указаны в «Подтверждении» Александера («САСМ», 1961, № 5), алгоритм 30 был переведен на ALGOL В-5000 и успешно использовался на машине В-5000 в Объединенном технологическом центре. Ниже приводятся результаты решения четырех примеров, использованных Александером.

Пример 1.

(1.0098) 107x4-(9.8913) ЮхЗ-(1.0990) Юх+Юх+О, Получены корни

x=-0.201080185406, х= 0.149521622653 + 0.163989609283i, х= (-9.99989011230) Х10-в. Пример 2.

л:4-Зл;з+20л;2+44л:+54=О, х= 2.47063897001+4.640533161641, л:=-0.970638970010 ± 1.005807589031. Пример 3.

л*-2л;5+2х4+л;з+6х2-6л;+8=0, х=-0.99999999999О±1.00000ОО0ОО0г, х= 1.50000000000+1.322875655531, • х= 0.50000000000 ±0.8660254037801. Пример 4.

x+x-Ъx-Ш+x+\ЪQ, х= 3.00000000000,

Рх=-2.00000000000+1 .OOOOOOOOOOSi, 0.999999999990, х= 1.00000000000. Эти результаты полностью согласуются с результатами, дриведенными в «Подтверждении» Александера.

* Далее указываются одна поправка к алгоритму 30 и две поправки к «Подтверждению» К. Коэна («САСМ», 1962, № 1), уже обнаруженные ранее авторами выпуска «Алгоритмы (1-50)» и учтенные при составлении алгоритма 30а (см. «Свидетельство к алгоритму 30а», исправления 1 и 4). Следует заметить, что в данном «Подтверждении» Дж. Кофельда ничего не говорится об ошибках, указанных в исправлениях 2 и 3 «Свидетельства к алгоритму 30а». (Прим. ред.)




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