Главная страница Алгоритмы [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] integer procedure comdiv(a,b); value a,b; integer a,b; begin integer rl,r2,r; if a=0 Vb=0 then comdiv:=abs(a + b) else begin г2: = а; rl: = b; iter: г: = г2-г1Х(г2ч-г1); if тфО then begin r2:=rl; rl:=r; go to iter end; comdiv: = abs(rl) end end comdiv; Свидетельство к алгоритму 76 Процедура comdiv алгоритма 76 является стереотипным переизданием процедуры comdiv алгоритма 7а. Свидетельство к алгоритму 7а Алогритм 7а получен в результате перевода с языка АЛГОЛ-58, некоторых сокращений, оптимизации и ординарной переработки алгоритма 7 (Claussen R. «САСМ», 1960, № 4). Проведено конт1рольное решение с исходными данными a=Qi и 6=85 и получен правильный результат. АЛГОРИТМ 86 Суммирование рядов по Эйлеру [Сб} Процедура euler вычисляет сумму fct{i) для i от нуля до бесконечности посредством надлежащим образом усовершенствованного метода эйлеровской трансформации. Суммирование прекращается, как только tim раз подряд абсолютные значения членов преобразованных рядов будут меньше, чем eps. Следовательно, нужно задавать, функцию fct с одним целым аргументом, верхнюю границу eps и целый параметр tim. Результатом является сумма swm. Процедура euler особенно эффективна в случае медленно сходящихся и расходящихся рядов. procedure euler (fct, eps, tim) result: (sum); value eps,tim; real eps,sum; integer tim; real procedure fct; begin real mn,d; integer i,k,n,t; array m[0:15]; i:=n:=t: = 0; тЩ: = fct (0); sum:=m[0]/2; iter: i: = i+l; mn:=fct(i); for k:= 0 step 1 until n do begin d:=(mn+m[kI)/2; mlk]:=mn; mn: = d end; if (abs(mn) <abs(m[n]))Л(n< 15) then begin d:=mn/2; n:=n+l; m[nl:=mn end else d:=mn; sum: = sum + d; t: = if abs(d)<eps then t+1 else 0; if t<tim then go to iter end euler; Свидетельство к алгоритму 86 Алгоритм 86 является стереотипным переизданием алгоритма 8а. Алгоритм 86 был транслирован в системе TA-liM для машины М-220, и с его помощью вычислялась сумма ряда 1+0.5+0.52+<0.5з+... =2.0. При этом процедура fct имела вид real procedure fct (i); value i; integer i; fct:=0.5ti; Дляер5 = 10-5иЯт=4было получено sum = 1.9999992; для eps=10-8 и tim= \ получено sum = 1.9999999. Свидетельство к алгоритму 8а Алгоритм 8а получен в результате ординарной переработки и некоторых сокращений алгоритма 8 (см. [7]). Подтверждение к алгоритму 8 Г. Тачер (Thacher Н. С. «САСМ». 1963, № 11) Тело процедуры eider проверено на машине LGP-30 с использованием транслятора Dartmouth SCALP. Не было обнаружено никаких ошибок. Программа дала прекрасные результаты при вычислении коэффициентов представления 1п(\+х) с помощью видоизмененных полиномов Чебышева для первых десяти, членов степенного ряда. Для п=0, 1, 2, 3, 4 коэффициент при степениого ряда умножался на коэффициент при Т*п(х) в представлении через Т*п{х). Полученное произведение для 1=1, 2,Г..,10 было использовано в качестве lct{i) в программе. Результаты для п=10 указаны в табл. 4. Таблица 4
Правильное значение суммы равно +0.3764528129... (см. т). Погрешности меньше чем 0.2 ХЮ" были получены также для n=il, 2.....9. Представляется, что эти технические приемы могут быть полезным дополнением для управления телескопи-рованием (алгоритмы 37 и 38) и для методов, рекомендованных Клиншоу для медленно сходящихся степенных рядов (см. [41]). АЛГОРИТМ 96 Интегрирование методом Рунге-Кутта [D2] Процедура range интегрирует систему yh=h{x, Уи У2.....Уп) {k=l,2,..., п) обыкновенных дифферен- [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.0128 |