Главная Промышленная автоматика.

АЛГОРИТМ 706

Интерполяция по Эйткену [Е1]

Если даны (n+l) абсцисс Хо, Xi,..., Хп и (п+1) значений функции f{xo), f{xi),..., }{Хп), то процедура aitken строит полином Лагранжа ff{x) степени я такой, что ff{Xi)-f{xi). Следовательно, для любого данного значения хх получается значение ff{xx). Для построения полинома ff{xx) применяется итеративная схема Эйткена. Поскольку массив f используется для хранения промежуточных значений, то его начальное значение затирается. Процедура aitken пригодна как для равных, так и для неравных интервалов [Хг,Хц.1].

procedure aitken(x,f,n,xx) result: (ff);

value xx,n; real xx,ff; integer n; array x,f; begin integer i,j;

for j:=0 step 1 until n-1 do for i:=]-}-l step 1 until n do

f[i]: = ( (XX-4J]) X f[il- (xx-x[i]) X f[j]) / (хт-хШ) \ ff: = f[n] end aitken;

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

Алгоритм 706 является стереотипным переизданием алгоритма 70а, который успещно используется сейчас на многих мащинах, и в частности на БЭСМ-6.

При пользовании этим алгоритмом не следует задавать больших значений п, это может привести к переполнению или потере точности. Обычно достаточны значения п=2 или п-3. Поэтому обычно приходится дополнять обращения к такой процедуре операторами, обеспечивающими выбор из данной таблицы трех или четырех точек таких, чтобы точка XX оказалась в интервале [xo,Xm].

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

Алгоритм 70а получен в результате исправления, сокращения и ординарной переработки алгоритма 70 (Mifsud С. J. «САСМ», 1961, № II).

Алгоритм 70а проверен с помощью транслятора ТА-1 для функции е*. При хх=й.ЪЪ для равных интервалов х получено значение ff= 1.78605373 (по справочнику [1] f/= 1.7860). При xx=Q.S& для не-)авных интервалов х получено ff=2.36311017 (по справочнику [1] 7=2.3632).

Алгоритм 696 не пябликуется здесь, потому что соответствующий алгоритм 69 «Прослеживание цепочки» (Maych И. «САСМ», 1961, № 9) не был подтвержден расчетами ни в журнале «САСМ», ни авторами данного выпуска.



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

А. Релф (Relph А. Р. «САСМ», 1962, № 7)

Алгоритм 70 был транслирован с использованием транслятора DEUCE ALGOL и дал удовлетворительные результаты после добавления ... *

Сзидетельстзо к алгоритму 716 [G6]

Алгоритм 716 не публикуется здесь, потому что соответствующий алгоритм 71 («САСМ», 1961, № И) содержал ошибки и был в дальнейшем заменен в журнале «САСМ» алгоритмами 86, 87, 102, 130, 202, дающими перестановки при -более экономном расходовании машинной памяти и машинного времени.

АЛГОРИТМ 726

Генератор композиций [А1]

Процедура сотрХ (сокращение от composition - композиция) преобразует данную композицию с из й частей целого положительного числа п ;в следующую по порядку композицию, если таковая существует. Если же процедура сотр\ выполняется с каждой новой -композицией после ее получения, то образуются все композиции при условии, что в качестве первоначальной была взята композиция 1, 1,.. .,1, я- Если с имеет форму я-й-Ы, 1, I,..., 1, то следующей композиции не существует и с заменяется вектором из к нулей [3, с 129].

procedure compl (с,к);

value к; integer к; integer array с; begin integer j;

j:=k; test: if j>l then begin ifc[j]=lthen

begin j: = j-1; go to test end; cO-l]: = c[j-l]+l; c[k]: = clj]-l; if jkthen c[j]: = l end else

for j: = l step 1 until к do c[j]: = 0 end comp 1;

Процедура comp2 образует и выдает на печать по каналу k всевозможные композиции из р частей целого положительного числа п. procedure comp2(n,p,k);

value n,p,k; integer n,p,k; begin integer j; integer array c[l:p];

for j: = l step 1 until p-1 do c[j]: = l;

о[р]:=п-Р-Ы; start:outarray(k,c);

j:=p;

* Указываются две поправки и возможность сокращения алгоритма 70, учтенные в алгоритме 70а. (Прим. ред.)



test: if j>l then begin if c]j] = l then

begin j:=j-1; go to test end; c[j-l]: = c[j-l]+l; c[p]: = c[i]-l; if jp then clj]:==l; go to start end end comp2;

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

Алгоритм 726 отличается от алгоритма 72а только тем, что в процедуре сотр2 оператор с меткой «start:» был заменен на

start: outarray(k,c);

Алгоритм 726 был транслирован в системе ТА-IM для М-220 с примером, приведенным в «Свидетельстве к алгоритму 72а», и дал такие же результаты.

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

Алгоритм 72а написан в двух вариантах заново в более краткой, экономичной и наглядной форме, чем алгоритм 72 (Не Herman L., Ogden S. «САСМ», 1961, № 11). Перевод «Подтверждения к алгоритму 72» (Collison D. М. «САСМ», 1962, № 8) здесь не приводится, поскольку оно потеряло свое значение после написания алгоритма 72а.

Алгоритм 72а проверен для п=5 и k=3. Получено шесть следующих трехкомпонентных композиций числа 5:

1112 2 3 с 12] 12 3 12 1 с 13} 3 2 1 2 1 1

АЛГОРИТМ 736

Неполные эллиптические интегралы [S21]

Процедура ellint вычисляет значения неполных эллиптических интегралов первого и второго рода F{phi,k) и E{phi,k), где phi берется в радианах. Если ii>l или \phi\>-nl2, то Е и F приравниваются 10 иначе они будут содержать вычисленные интегралы. Алгоритм использует константы п/2= 1.57... и tg{l) = 1.557393 ...

Более полную информацию об этом алгоритме можно получить в работе Дидонато и Хершея [21].

procedure ellint (k,phi) result: (ee,ff);

value k,phi; real k,phi,ee,ff; begin real kp,sn,cs,hl,h2,al,a2,sl,s2,s3,s4,pl,p2,ml,m2,nl,n2,

tl,t2,dl,d2,d3,d4; integer n;

sl: = s2:=s3: = s4:=0; n:=0;

hl: = l; sn: = sin(phi); cs: = cos(phi);

if abs(kxsn) < 1.557393 then go to small;





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

0.0018