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

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

Таблица 8

с [ft]

b\k]

-0.400000000X102

0.236142344X1№

0.282595694X10*

-0.230769230

-0.722021531X10*

-0.111578947X103

0.162500000X103

0.539952153X102

0.100000000X10»

-0.390189521

-0.685047847X102

Подтверждение к алгоритму 18 Г. Тачер (Thacher Н. С. «САСМ», 1962, № 8)

Тело процедуры confr было проверено на вычислительной машине LGP-30 с помощью АЛГОЛ-транслятора, составленного Вычислительным центром Дартмут-ского колледжа. В теле процедуры не было найдено никаких синтаксических ошибок, если не считать пропуска точки с запятой лосле описания массивов. Транслированный алгоритм дал удовлетворительные результаты для значений выражения (4x+l)/(x+4) в любых трех из следующих четырех точек: х-\, 2, 3, 4. Когда же были использованы все четыре точки, произошло переполнение при делении в операторе*

for i: = l step 1 until j-1 do aa:= (xx-x[i])/(aa-a[i]);

который составляет об(ратные разности. Переполнение такого типа случается всякий раз, когда y{f\ аппроксимируется с высокой точностью одной из непрерывных дробей, составленной только по точкам хЩ, 2,..., k, где k меньше чем /. Пока t</-1, это затруднение можно обойти, полагая аа равным максимально представи-мому в данной машине числу всякий раз, когда возможно переполнение при делении. Если же t=/-1, то это за-труднение неизбежно, и тогда необходимо изменить порядок исходных данных (ввести масштабные коэффициенты).

* В алгоритме 18а этому оператору соответствует for i:= 1 step 1 until j-1 do r:= (s-x[i])/(r-a[i]);



АЛГОРИТМ 196

Число сочетаний (биномиальные коэффициенты)

{S03]

Эта процедура вычисляет биномиальные коэффициенты С "! "° рекуррентной формуле С =

111с1(мя i = 0, 1,...,п- 1), причем С=1;

integer procedure c(n,m);

value n,m; integer n,m; begin integer i,a;

if m>n-m tiien m: = n-m;

n: = n + l; a: = l;

for i: = l step 1 untiJ m do a: = aX (n-i)/i; c: = a

end c;

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

Алгоритм 196 получен из алгоритма 19а путем внесения в тело процедуры одного улучшения. Оператор

for i:=0 step ,1 until m-1 do a: = aX (n-i)/(i-bl); был заменен операторами

n: = n-M;

for i: = l step 1 until m do a: = aX(n-i)/i; Это улучшение обеспечивает ускорение работы алгоритма. Алгоритм 196 был транслирован в системе БЭСМ-АЛГОЛ и для п=14, т = 12 дал правильный результат:

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

»

Алгоритм 19а получен в результате исправления, сокращения и ординарной переработки алгоритма 19 (Кепуоп R. R. «САСМ», 1960, № 10). Переводы соответствующих замечаний («САСМ», 1962, № 6) и подтверждений («САСМ», 1962, № 8) ввиду их несущественности здесь не приводятся.

С помощью переработанного алгоритма в системе ТА-1 было получено правильное значение 18564.



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

Процедура expint алгоритма 206 является стереотипным переизданием процедуры алгоритма 20а. Алгоритм 206 был транслирован в системе БЭСМ-АЛГОЛ для л;=0.1, 1, 10, и были получены следующие результаты: -fii(-0.1) = 1.822923755, -Ш(-1) =0.2193839341,

-Ei{-10) =0.4156969012, полностью совпадающие со значениями -Ei{-х), приведенными в работе Е. Янке н др. [32, с. 64].

Вещественная интегральная показательная функция [S13]

Процедура expint вычисляет по приближенным формует

лам функцию -Ei{-x)-\-du для • xQ. Для

0<;л;<1 приближенная формула взята из работы Е. Ал-лена [И, с. 240]. Вторая приближенная формула для \х<.оо взята из работы Хастингса [21]. Абсолютная погрешность г(х)<2х\0г для 0<x<l и e(x)<2XlO-« для \Х<оо.

real procedure expint (х);

value х; real х; begin real y,z;

if х<1 then z: = ((((0.00107857X x-0.00976004) X x +0.05519968) X X-0.24991055) X x +0.99999193)Xx-0.57721566-In (x) else begin y:=(((x+8.5733287401) Xx+ 18.059016973) XX

+ 8.6347608925) Xx+0.2677737343; z:= (((x+9.5733223454) Xx+ 25.6329561486) Xx

+21.0996530827) Xx+3.9584969228; z:=exp (-x)/xX(y/z) end; expint:=z end expint;




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