1 | ###
|
2 | Taylor expansion of a function
|
3 |
|
4 | push(F)
|
5 | push(X)
|
6 | push(N)
|
7 | push(A)
|
8 | taylor()
|
9 | ###
|
10 |
|
11 |
|
12 |
|
13 | Eval_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 |
|
61 | taylor = ->
|
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 |
|