![]() |
|
Главная Промышленная автоматика. АЛГОРИТМ 626 Поеледоватепьноеть присоединенных функций Лежандра второго рода [SI6] Процедура legendr2 помещает последовательность значений Q™„ (л;) в массив q для целых значений п от О до птах для частного значения т и некоторого значения х, которое должно быть вещественным, если ri=:0, или чисто мнимым в противном случае. Массив г содержит ряд отношений последовательных значений q. Эти отношения могут быть особенно ценными, когда наименьшее Qnix) так мало, что выходит за пределы машинного представления чисел (например, lO-s когда наименьшее представимое в машине число равно 10-). Выход, .к нелокализованной метке signal62 осуществляется, когда Qnix) теряет смысл (мнимые значения х пе могут быть отрицательными, а вещественные значения х не могут быть менее 1). Значения Qn{x) могут быть легко вычислены с помощью гипергеометрических рядов (см. [1], с. 468), если х не слишком мало и (п-т) не слишком велико. Если же вещественное х близко к единице или мнимое X близко к нулю, то значения Q"n{x) получают по соответствующей последовательности значений Рп{х). Потеря значащих цифр случается для х таких малых как 1.1, если n>10. Потеря значащих цифр представляет большую трудность в использовании конечных полиномиальных представлений при п>т. Однако процедура legendr2 была проверена как для больших, так и для малых х и п. В процедуре legendr2 используется константа л;/2= 1.57 ... procedure legendr2 (m,nmax,x,ri) result: (r,q); value m,nmax,x,ri; real x; integer m,nmax,ri; array r,q; begin real t,qO,s; integer i,n; n:= if nmax>13 then nmax+7 else 20; if ri=0 then begin if x= 1 then go to signa]62; if m-O then q[0]: = 0.5Xln((x-f l)/(x-1)) else begin qIO]: = t:=-l/sqrt(xXx-1); qO:=0; t: = 2XxXt; for i: = 2 step 1 until m do begin s:= (i-1) XtXq[0]-f- (3Xi-iXi-2) XqO; q0: = q[0]; q[01:=:s end i end m; r[n -t-1]: = x-sqrt (x X x- I); Процедуры алгоритма 61а получены в результате сокращения и ординарной переработки соответствующих процедур алгоритма 61 (G i b b А. «САСМ», 1961, № 7). Процедуры rangpro, rangdiv и rangsqr, по существу, написаны заново. Алгоритм проверен вручную для всех возможных сочетаний интервальных чисел. Свидетельство к алгоритму 626 Алгоритм 626 получен из алгоритма 62а путем, внесения в него следующих поправок: 1. На 32-й странице 3-я строка сверху [23] вместо begin q[0]:=t: = l/sqrt(xXx-I); должно быть begin q[0]:=t: = l/sqrt(xXx+l); 2. Для ликвидации деления на нуль при п=т=х=0 оператор if х==1 then go to signaI62; был перенесен из 15-й строки процедуры legendr2 в ее 7-ю строку. Алгоритм 626 был транслирован в системе ТА-1М для машины М-220. Результаты трансляции для п=0 сведены в табл. 4 и 5, а для ri-\-в табл. 6 и 7. Контрольные значения в табл. 4-7 взяты из сборника таблиц Колумбийского университета [32] (США). Таблица 4
r[i]:= (i+m)/((2Xi+1) Xx+ (m-i-1),Хт[1+1]); go to fin end ri; if rn=0 then q[0]: = if x<0.5 then arctan(x)-1.570796327 else-arctan(l/x else begin q[0]:=t: = l/sqrt(xXx+l); qO:=0; t: = 2XxXt; for i:=2 step 1 unti! m do begin s:= (i-1) XtXq[0]+(3xi-biXi-2) XqO; qO: = qlO]; q[0]: = s end i end m; r[n+1]: = x-sqrt (x X x + 1 j; for i:=n step -1 until 1 do r[i]:=(i + m)/((i-m+l)Xr[i+l]-(2xi+l)Xx); for i: = l step 2 until nmax do r[i]:=-r[i]; fin: for i: = l step 1 until nmax do q[i]: = q[i-1] Xr[i] end fegendr2;
Таблица 6
Свидетельство к алгоритму 62а Алгоритм 62а получен в результате исправления, сокращения и ординарной переработки алгоритма 62 (Herndon J. R. «САСМ», 1961,. № 7). Кроме опечаток, указанных в нижеследующем замечании Дж. Херпдона («САСМ», 1961, № 12), в алгоритме 62 было исправлено следующее. 1. Параметры, т, птах, ri и переменные i, п были отнесены к типу integer. 2. Идентификатор log был заменен на In. 3. Оператор if х=\ then Q[0]:=9.9f45, где число 9.945 изображает «бесконечность», был заменен оператором 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.0017 |