Степенным рядом называют конструкцию вида:
f(x)=е(i)aixi, i=0...г
где ai - коэффициенты, для которых задано правило вычисления.
Ряды используются для вычисления и анализа широкого класса функций, называемых аналитическими. В частности, ряды лежат в основе подпрограмм, реализующих встроенные функции бейсика.
Программирование рядов проводится по рекуррентной схеме: вычисляется частная сумма ряда, представляющая собой степенной многочлен
е(i)aixi, i=0...n
где n зависит, с одной стороны, от требуемой точности, с другой - от быстроты сходимости частных сумм к истинному значению ряда.
В программе переменные резервируются под новое и старое значения частной суммы, под текущий номер i и под ту часть выражения для члена ряда, которая содержит факториал и переменную степень. В цикле, организованном по возрастанию i, две рекуррентные формулы: одна мультипликативная, для нового члена ряда; другая аддитивная, для частной суммы. Условие выхода из цикла - равенство новой и старой частных сумм. Оно выполняется тогда, когда новый член на 12 порядков меньше суммы. Обычно для этого бывает достаточно просуммировать всего 6-10 членов ряда. Если сходимость плохая и алгоритм выполняет большее число итераций, вычислительная погрешность будет существенной. В этом случае для высокоточных расчетов следует применять специальные алгоритмы (см. программу 65).
Можно также предварительно вычислить значимые коэффициенты степенного ряда (пример - программа 40), сохранить их в явном виде и затем пользоваться процедурой вычисления многочлена, реализованной в программе 23.
Ортогональные многочлены - частный случай степенных рядов, когда ряд обрывается на n-м члене. Системы ортогональных многочленов используются для получения интерполяционных формул (см. программы 98, 99) и решения краевых задач.
Существуют рекуррентные формулы, которые выражают следующий по порядку ортогональный многочлен через пару предыдущих.
Программа 33. Многочлены Чебышева. Рекуррентная формула:
Ti+1(x)=2xTi(x)-Ti-1(x), где T0(x)=1, T1(x)=x.
10 INPUT "n",A:D=1:E=0:F=1:FOR B=2
TO A:C(B+B)=0:FOR C=0 TO B
20 IF C>0;C(B+B+C)=2*B(B+C)
30 IF C<B-1;C(B+B+C)=C(B+B+C)-D(C)
40 NEXT C:FOR C=0 TO B+B:D(C)=C(C+B):NEXT C:NEXT B
50 FOR C=0 TO A:PRINT D(C+A):NEXT C:GOTO 10
Размер: 157, C(3*n)
Пример: n=4.
Ответ: ... T4(x)=1-8x2+8x4.
Программа 34. Многочлены Эрмита. Рекуррентная формула:
Hi+1(x)=2xHi(x)-2iHi-1(x), где H0(x)=1, H1(x)=2x.
10 INPUT "n",A:D=1:E=0:F=2:FOR B=2
TO A:C(B+B)=0:FOR C=0 TO B
20 IF C>0;C(B+B+C)=2*B(B+C)
30 IF C<B-1;C(B+B+C)=C(B+B+C)-2*(B-1)*D(C)
40 NEXT C:FOR C=0 TO B+B:D(C)=C(C+B):NEXT C:NEXT B
50 FOR C=0 TO A:PRINT D(C+A):NEXT C:GOTO 10
Размер: 165,C(3*n)
Пример: n=4.
Ответ: ... H4(x)=12-48x2+16x4.
Программа 35. Многочлены Лежандра. Рекуррентная формула:
Pi+1(x)=((2i+1)xPi(x) - iPi-1(x))/(i+1), где P0(x)=1, P1(x)=x.
10 INPUT "n",A:D=1:E=0:F=1:FOR B=2
TO A:C(B+B)=0:FOR C=0 TO B
20 IF C>0;C(B+B+C)=(B+B-1)*B(B+C)
30 IF C<B-1;C(B+B+C)=C(B+B+C)-(B-1)*D(C)
40 C(B+B+C)=C(B+B+C)/B:NEXT C:FOR C=0 TO B+B:D(C)=C(C+B)
50 NEXT C:NEXT B:FOR C=0 TO A:PRINT D(C+A):NEXT C:GOTO 10
Размер: 189, C(3*n)
Пример: n=4.
Ответ: ... P4(x)=0,375-3,75x2+4,375x4.
Программа 36. Многочлены Лагерра. Рекуррентная формула:
Li+1(x)=(2i+1-x)Li(x)-i2Li-1(x), где L0(x)=1, L1(x)=1-x.
10 INPUT "n",A:D=1:E=1:F=-1:FOR
B=2 TO A:C(B+B)=0:FOR C=0 TO B
20 IF C>0;C(B+B+C)=-B(B+C)
30 IF C<B;C(B+B+C)=C(B+B+C)+(B+B-1)*C(B+C)
40 IF C<B-1;C(B+B+C)=C(B+B+C)-(B-1)*(B-1)*D(C)
50 NEXT C:FOR C=0 TO B+B:D(C)=C(C+B):NEXT C
60 NEXT B:FOR C=0 TO A:PRINT D(C+A):NEXT C:GOTO 10
Размер: 209, C(3*n)
Пример: n=4.
Ответ: ... L4(x)=24-96x+72x2-16x3+x4.
Многочлены Чебышева имеют явное выражение через тригонометрические функции:
Tn(x)=cos n arccos x.
Вычисления в режиме калькулятора: A=n, B=x, C=COS A ACS B, C - Tn(x). Следует отметить, что эта формула более трудоемка и менее точна нежели рекуррентная.
Программа 37. Многочлены Лежандра.
10 INPUT "n",A,"x",B:C=1:D=B:FOR
E=2 TO A
20 F=((E+E-1)*B*D-E*C+C)/E:C=D:D=F:NEXT E:PRINT F:GOTO 10
Размер: 74, F
Пример: n=3; x=0,1.
Ответ: P3(0,1)=-0,1475.
Программа 38. Многочлены Лагерра.
10 INPUT "n",A,"x",B:C=1:D=1-B:FOR
E=2 TO A
20 F=(E+E-1-B)*D-(E-1)*(E-1)*C:C=D:D=F:NEXT E:PRINT F:GOTO 10
Размер: 80, F
Пример: n=3; x=0,1.
Ответ: L3(0,1)=4,289.
Программа 39. Многочлены Эрмита.
10 INPUT "n",A,"x",B:B=B+B:C=1:D=B:FOR
E=1 TO A
20 F=B*D-2*E*C:C=D:D=F:NEXT E:PRINT C:GOTO 10
Размер: 68, F
Пример: n=3; x=0,1.
Ответ: H3(0,1)=-1,192.
Программа 40. Интеграл вероятностей. Вычисление коэффициентов ряда
erf x = 2/Цpт0x exp(-t2)dt = 2/Цpе(n)(-1)nx2n+1/n!/(2n+1), n=0...г
Задача - получить численные значения коэффициентов ряда ai. Количество коэффициентов должно быть таким, чтобы обеспечить вычисление функции erf x в интервале [-xm; xm] с абсолютной погрешностью не выше e.
Переменные:
A |
B |
C |
D |
E |
F |
G |
xm |
a2n+1 |
2/Цp (-1)n/n! |
n |
e |
x2n+1 |
2n+1 |
Вычисления прекращаются, когда выполнится |a2n+1xm2n+1| ≤ e.
10 INPUT "e",E,"xm",A:F=A:C=2/SQR
p:D=0
20 G=D+D+1:B=C/G:PRINT G,B:IF ABS (F*B)≤E;END
30 D=D+1:F=F*A*A:C=-C/D:GOTO 20
Размер: 91, E
Пример: e =10-8; xm=1/2.
Ответ:
a1=1.128379167;
a3=-0.376126389;
a5=0.1128379167;
a7=-0.0268661706;
a9=0.0052239776;
a11=-0.0008548327;
a13=0.0001205537;
a15=-0.00001492565.
Программа 41. Интеграл вероятностей. Вычисление значений
10 INPUT A:B=A:C=A:D=0
20 E=B:D=D+1:C=-C*A*A/D:B=B+C/(D+D+1):IF E¦B THEN
20
30 PRINT B*2/SQR p:GOTO 10
Размер: 76, E
Переменные:
A |
B |
C |
D |
E |
x |
еn |
(-1)n x2n+1/n! |
n |
еn-1 |
Пример: x=2.
Ответ: erf 2=0,995322275.
Программа 42. Интегральный синус
Si(x)=т0x sin t / t dt = е(n)(-1)nx2n+1/(2n+1)!/(2n+1), n=0...г
10 INPUT A:B=A:C=A:D=1
20 E=B:D=D+2:C=-C*A*A/D/(D-1):B=B+C/D:IF E¦B THEN
20
30 PRINT B:GOTO 10
Размер: 71, E
Пример: x=0,1.
Ответ: Si(0,1)=0,0999444611.
Программа 43. Интегральный косинус
Ci(x)= g+ln x +т0x cos (t -1)/ t dt = g+ln x + е(n)(-1)nx2n/(2n)!/(2n), n=0...г
где g =0,5772156649 - постоянная Эйлера.
10 INPUT A:B=.5772156649+LN A:C=1:D=0
20 E=B:D=D+2:C=-C*A*A/D/(D-1):B=B+C/D:IF E¦B THEN
20
30 PRINT B:GOTO 10
Размер: 84, E
Пример: x=0,1.
Ответ: Ci(0,1)=-1,727868408.
Программа 44. Совместное вычисление Ci(x) и Si(x).
10 INPUT A:B=.5772156649+LN A:C=0:D=0:E=1
20 F=C:GOSUB 40:E=-E:GOSUB 40:IF F¦C THEN 20
30 PRINT "Ci";B,"Si";C:GOTO 10
40 D=D+1:E=E*A/D:G=2*FRAC (D/2):B(G)=B(G)+E/D:RETURN
Размер: 125, G
Пример: x=0,1.
Ответ: Ci(0,1)=-1,727868408; Si(0,1)=0,0999444611.
C(x)=т0xcos
(p/2 t2) dt,
n=0...г
S(x)=т0xsin
(p/2 t2) dt,
n=0...г
Программа 45. Случай x≤3. Разложение в ряд:
C(x)= е(n)(-1)n(p/2)2nx4n+1/(2n)!/(4n+1),
n=0...г
S(x)= е(n)(-1)n(p/2)2n+1x4n+3/(2n+1)!/(4n+3),
n=0...г
10 INPUT A:B=0:C=A:D=C:E=0:G=1:IF
A>3 THEN 50
20 F=D:GOSUB 40:E=E+C/G:C=-C:GOSUB 40:D=D+C/G:IF F¦D
THEN 20
30 PRINT "C";D,"S";E:GOTO 10
40 B=B+1:G=G+2:C=C*p/2*A*A/B:RETURN
Размер: 125, G
Пример: x=2.
Ответ: C(2)=0,4882534075; S(2)=0,343415678364.
Программа 46. Случай x>3. Степенной ряд не сходится, и вычисления проводятся по асимптотическим формулам:
C(x)= 1/2+ cos(px2/2)/px
A(x) - sin(px2/2)/px
B(x)
S(x)= 1/2+ cos(px2/2)/px
A(x) + sin(px2/2)/px
B(x)
A(x)=е(n)(-1)n+1(4n+1)!!!!/(px2)2n+1,
n=0...г
B(x)=е(n)(-1)n+1(4n-1)!!!!/(px2)2n,
n=0...г
50 B=p*A*A:C=-1:D=0:E=C:F=1:G=1:I=1:MODE
5
60 H=D:GOSUB 100:F=-F*C:D=D+F/I:GOSUB 100
70 G=-G*C:E=E-G/I:IF H¦D THEN 60
80 B=B/2:C=p*A:F=COS B/C:G=SIN B/C
90 PRINT "C";.5+D*F-E*G,"S";.5+D*G+E*F:GOTO 10
100 C=C+2:I=I*B:RETURN
Размер: 175, I
Пример: x=4.
Ответ: C(4)=0,498419978; S(4)=0,420516754.
Программа 47. Функция Лапласа (интеграл нормального распределения вероятности).
P(x) = 1/Ц(2p) т-гx exp(-t2/2)dt = 1/2 + exp(-x2/2)/Ц(2p)е(n)x2n+1/(2n+1)!!, n=0...г
10 INPUT A:B=A:C=1:D=0
20 D=D+B:C=C+2:B=B*A*A/C:IF D+B¦D THEN 20
30 PRINT .5+D/EXP (A*A/2)/SQR (p+p):GOTO
10
Размер: 79, D
Пример: x=3.
Ответ: P(3)=0,998650065.
Программа 48. Дилогарифм. Разложение в ряд в интервале (0;2).
f(x) = т1x ln(t)/(1-t) dt =е(n)(-1)i(x-1)i/i2, n=0...г
10 INPUT A:B=0:C=1:D=0
20 E=B:D=D+1:C=-C*(A-1):B=B+C/D/D:IF E¦B THEN 20
30 PRINT B:GOTO 10
Размер: 67, E
Пример: x=0,1.
Ответ: f(0,1)=1,29971424.