UNPKG

1.31 kBtext/coffeescriptView Raw
1###
2Taylor expansion of a function
3
4 push(F)
5 push(X)
6 push(N)
7 push(A)
8 taylor()
9###
10
11
12
13Eval_taylor = ->
14 # 1st arg
15
16 p1 = cdr(p1)
17 push(car(p1))
18 Eval()
19
20 # 2nd arg
21
22 p1 = cdr(p1)
23 push(car(p1))
24 Eval()
25 p2 = pop()
26 if (p2 == symbol(NIL))
27 guess()
28 else
29 push(p2)
30
31 # 3rd arg
32
33 p1 = cdr(p1)
34 push(car(p1))
35 Eval()
36 p2 = pop()
37 if (p2 == symbol(NIL))
38 push_integer(24); # default number of terms
39 else
40 push(p2)
41
42 # 4th arg
43
44 p1 = cdr(p1)
45 push(car(p1))
46 Eval()
47 p2 = pop()
48 if (p2 == symbol(NIL))
49 push_integer(0); # default expansion point
50 else
51 push(p2)
52
53 taylor()
54
55#define F p1
56#define X p2
57#define N p3
58#define A p4
59#define C p5
60
61taylor = ->
62 i = 0
63 k = 0
64
65 save()
66
67 p4 = pop()
68 p3 = pop()
69 p2 = pop()
70 p1 = pop()
71
72 push(p3)
73 k = pop_integer()
74 if (isNaN(k))
75 push_symbol(TAYLOR)
76 push(p1)
77 push(p2)
78 push(p3)
79 push(p4)
80 list(5)
81 restore()
82 return
83
84 push(p1); # f(a)
85 push(p2)
86 push(p4)
87 subst()
88 Eval()
89
90 push_integer(1)
91 p5 = pop()
92
93 for i in [1..k]
94
95 push(p1); # f = f'
96 push(p2)
97 derivative()
98 p1 = pop()
99
100 if (iszero(p1))
101 break
102
103 push(p5); # c = c * (x - a)
104 push(p2)
105 push(p4)
106 subtract()
107 multiply()
108 p5 = pop()
109
110 push(p1); # f(a)
111 push(p2)
112 push(p4)
113 subst()
114 Eval()
115
116 push(p5)
117 multiply()
118 push_integer(i)
119 factorial()
120 divide()
121
122 add()
123
124 restore()
125
126