|
Главная -> Справочник по алгоритмам 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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 le PRINTНЕЛИНЕЙНОЕ СГЛЙН!ИВЙНИЕ ПО 7 ТОЧКАМ £0 INPUTЗАДАЙТЕ НОМЕР ПОСЛЕДНЕГО ОТСЧЕТА N=N 30 INPUTЕеЕДИТЕ ОТСТЫ V0,Vl..,,V6A,B/C7DfEF?G 40 PRINTSV 0=<:39*А+8жВ-4!1!С-4жЕ+Е+4!1!Р-г*0)-42 50 PRINTSV i=С8жА+19жВ+1бжС+6жВ-4жЕ~7жГ+4ж0)4£ 6й PRINTSV £=<:-:4жА+16*В+1ЭжС+12жЕ+гжЕ-4жГ+0)/42 70 PPINTSV 3=«:-гжА+ЗжВ+бжС+7жЕ+бжЕ+ЗжР-£ж0>/£1 80 FCR 1=4 TO N-3!LETA=B5LETB=C!LETC=D:LETD=E 90 LETE=F!LETF=&!PRINT!3-0!BBEflHTE V1+3=:INPUT G 100 LETS=-£-*A+3*B+6*C+7wD+6*E 110 PRINT!3.0!SVI=!1.9KS+3*F-£»;G>-2l!NEXT I 120 LETS=A-4*B+2»;C+12*D+19*E+16*F~4*G 130 PRINT!3.e!S.VN-£=!Fi.9! £/-42 140 ЬЕТЗ=4жА~7жВ-4жС+6ж11+1бжЕ+19жГ+8ж6 150 PRINT!3.0!SVN-1=IF1.9! S/42 160 ЬЕТЗ=-£жА+4жВ+С-4*Е-4жЕ+8жР+ЗЭж6 170 PRlNT!3.e!SVN=4.F1.9< S/42:ENE Контрольный пример см. в табл. 5.3, где представлены данные сглаживания грубо заданной й=1п («+2). нелинейной функции Результаты нелинейного сглаживания по семи точкам (Nf=e) Таблица 5.3
ГЛАВА 6 ВЫЧИСЛЕНИЕ СПЕЦИАЛЬНЫХ ФУНКЦИЙ § 6.1. Методы вычисления специальных функций Специальными функциями обычно называются функции, которые в общем случае нельзя выразить через элементарные функции. Больщинство из них являются реще-ниями дифференциальных уравнений специального вида и могут быть представлены в виде интегралов. Однако эти интегралы нередко являются несобственными и имеют особенности подынтегральной функции на пределах или в промежутке между ними. В этой главе перечислены основные методы вычисления специальных функций. Решение порсхждающих дифференциальных уравнений позволяет найти ряд значений специальных функций при заданных начальных условиях. Для этого могут исполь зоваться программы, описанные в § 4.10. При описании специальных функций далее приводятся порождающие их дифференциальные уравнения. Однако. этот метод (особенно при вычислениях с заданной точностью) сопряжен с применением сложных лрограмм. Если требуется вычисление значений специальных функций при произвольных или часто сменяемых значениях аргумента, этот метод может привести к недопустимо большим затратам машинного времени. Вычисление специальных функций численным интегрированием является универсальным и достаточно эффективным методом. Для его реализации могут использоваться программы численного интегрирования, описанные в § 4.9,. 4.10. Следует учитывать, что в них аргумент подынтегральной функции обозначен через X, тогда как у специальных функций возможно иное обозначение, например t. Следовательно, в этом случае t = X. Подынтегральные выражения должны вычисляться по соответствующим подпрограммам (ввиду простоты тексты подпрограмм не приводятся). В целом программы вычислений специальных функций численным интегрированием достаточно громоздки и вычисления требуют значительных затрат машинного времени (в сравнении с изложенными ниже методами). Вычисление специальных функций по рекуррентным соотношениям является средством сравнительно быстрого получения численных значений нужных специальных функций. Примером может служить вычисле- ние значений ортогональных многочленов в § 3.4. Однако этот метод применим при следующих условиях: имеются исходные значения функций или простые формулы для их вычисления, рекуррентный процесс является устойчивым (т. е. не ведет к накоплению ошибок), число циклов вычислений ограничено разумными пределами. Вычисление специальных функций по их разложениям в ряд является в большинстве случаев яаиболее удобным прн машинных расчетах. Многие специальные функции имеют представления в виде сходящихся рядов. Вычисления должны вестись с контролем суммы членов ряда либо значений последнего члена (если есть гарантия, что они по модулю мойотонно убывают) до тех пор, пока результат не будет получен с заданной погрешностью. Вычисление специальных функций по их аппроксимациям является, как правило, методом, обеспечивающим получение результата за минимальное время. В большинстве случаев аппроксимация получается путем разложения функции в ряд (например, Тейлора) с удержанием конечного числа членов, достаточного для вычисления значений функции с заданной точностью. Сокращение времени вычислений обусловлено предварительным вычислением входящих в члены ряда выражений, например факториалов, значений тригонометрических функций и т. д. Однако достаточно простые аппроксимации получаются, как правило, при погрешности вычислений, заметно превосходящей предельную для ПЭВМ. Кроме того, вид аппроксимации обычно не имеет ничего общего с видом функции и для описания аппроксимации приходится использовать большое число численных констант с большим числом цифр. Поэтому вычисления по аппроксимациям следует рассматривать как дополнение к другим методам вычислений. § 6.2. Интегральные показательные функции Интегральная показательная функция £„(x)=EN (X) = f-?(-) вычисляется с помощью рекуррентного соот-нощения £„+, (х)=-[е--х£„ (х)], /г=1,2.3..... при £о (х)=ехр ( -х)/х.и с помощью функции £ (х), вычисляемой разложением в ряд: где v = 0,57721156647 -постоянная Эйлера. Программа 6.1. 05 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ EN<X) 10 INPUT ВВЕДИТЕ Н=Н £0 INPUT ВВЕДИТЕ N=N 30 IHPUT ВВЕДИТЕ Х=Х 40 LETK=EXP«:-X>!LETE=K/X 50 IF N>0 THEN 70 60 PRINT E0(X>=-E!GOTO 30 70 LETP=l:LETR=i:LETS=0:LETI=0 80 LETI=I+l!LETP=<-X)!i!p:LETR=I*R 85 LETC=P/<I«R): LETS=S+C 90 IF ABS<C>>H THEN 80 100 LETE=-S-.5772156647-L0G«:X> 110 FOR 1=1 TO N-l!LETV=<K-E»;X>/I 120 LETE=V! NEXT I 130 PRINT EN«:X>=E!60T0 30s END Пример. Для x=0,5 имеем £o (0,5) = = 1,213061319, £i (0,5) =0,5597736065, £j (0,5) =0,3266438565, £,o (0,5) = = 0,0634583004. Интегральная показательная функция Ei (х)=Е1 (X) = -vp { dt, х>0. вычисляется разложением в ряд £/(x)=v + lnx+J-. i= 1 Программа 6.2. 05 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ ЕКХ) 10 INPUT ВВЕДИТЕ Н=Н 20 INPUT ВВЕДИТЕ Х=Х 30 LETP=lsLETR=i:LETS=0sLETN=0 40 LETN=N+l!LETP=P»;XsLETR=R*N 50 LETC=P/«:N*R>sLETS=S+C 60 IF ОН THEN 40 70 LETV=S+.5772156649+L0G<X> 80 PRINT EI«:X>=V 90 GOTO 20S END Пример. Для x=0,5 получим Ei (0,5) = = 0,4542199049. Функция a„ (x) =AN (X) = \ fe-" dt, /г = 0, 1-, 2..... 1 вычисляется по рекуррентной формуле an (х) = [e-+nan-t (х)] /х , при «о (х) =е~/х. Интегральный синус " sin/ Si (x)=Sl (Х) = вычисляется разложением в ряд Si(x)= Z (-1)х"+7(2/г+1) (2я+1)! Ряд прерывается, если абсолютная величина последнего члена становится меньше е = = 1.10-«. Программа 6.5. 05 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ SKX) 10 INPUT ВВЕДИТЕ Х=Х £0 LETB=X:LETC=X 30 LETD=-<X2>/2:LETI=0 40 LETI=I+1!LETE=.«:2*I+1)"2 50 LETB=<«:£«I-l>»;D»;B>a*E> 60 LETC=C+Bs IF ABSCBX 1Е-Э THEN 88 78 GOTO 48 88 PRINT SI«:N>=C:&0T0 lO-END Пример. Для x=0,l получим Si (0,1) = = 0,0999444611, a для x = 10 получим Si (10)= = 1,658347594. 05 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ ftH<X> 18 INPUTВВЕДИТЕ N=N 20 1НРиТВВЕДИТЕ Х=Х 30 LETK=EXP<-X>sLETft=KX 40 IF N>0 THEN 56 45 PRINTAN<X>=ft:GOTO 28 50 FOR 1=1 TO NsLETft=i:K+I*ft>/X 60 NEXT isPRINT ftN<X>=A 70 GOTO 20SEND Пример. Для x=2 получим oo (2) = = 0,0676676416 и «6 (2) =5.99497344. Функция p„ (x)=BN (X) = 5 t"e-" dt, /г = 0, 1,2,..., вычисляется по рекуррентной формуле р„(х) = [(-1)"е-е+„р„ , (х)]/х при ро(х) = (е-е")/х. Программа 6.4. 05 PRINTВЫЧИСЛЕНИЕ ФУНКЦИИ BN<X> 10 INPUT ВВЕДИТЕ N=N 20 INPUT ВВЕДИТЕ Х=Х 30 LET K=EXP<X>!LFTB=«:K-1-K>/X 40 IF N>0 THEN 50 45 PRINT BN<X>=BsGOTO 20 50 LETR=lsFOR il=l TO N!L£TR=-R 60 LETB=<R*K-«:i/K>+B!i!l>/X 70 NEXT IS PRINTBH<X>=B 80 GOTO 20SEND Пример. Для x = 4 получим Po (4) = = 13,6449586, p, (4) = -10,24287677, Рз (4) = = -7,261476257. § 6.3. Интегральные синус и косинус 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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 0.0888 |
|