@@ -110,37 +110,37 @@ end
110110@generated function ^ (t:: TaylorScalar{T, N} , n:: S ) where {S <: Number , T, N}
111111 ex = quote
112112 v = value (t)
113- v1 = ^ (v[1 ], n)
113+ w11 = 1
114+ u1 = ^ (v[1 ], n)
114115 end
115- for i in 2 : N
116+ for k in 1 : N
116117 ex = quote
117118 $ ex
118- $ (Symbol (' v' , i)) = + ($ ([:((n * $ (binomial (i - 2 , j - 1 )) -
119- $ (binomial (i - 2 , j - 2 ))) * $ (Symbol (' v' , j)) *
120- v[$ (i + 1 - j)])
121- for j in 1 : (i - 1 )]. .. )) / v[1 ]
119+ $ (Symbol (' p' , k)) = ^ (v[1 ], n - $ (k - 1 ))
122120 end
123121 end
124- ex = :($ ex; TaylorScalar ($ ([Symbol (' v' , i) for i in 1 : N]. .. )))
125- return :(@inbounds $ ex)
126- end
127-
128- @generated function ^ (t:: TaylorScalar{T, N} , n:: S ) where {S <: Integer , T, N}
129- # TODO : optimize for small powers
130- ex = quote
131- v = value (t)
132- v1 = ^ (v[1 ], n)
133- end
134122 for i in 2 : N
123+ subex = quote
124+ $ (Symbol (' w' , i, 1 )) = 0
125+ end
126+ for k in 2 : i
127+ subex = quote
128+ $ subex
129+ $ (Symbol (' w' , i, k)) = + ($ ([:((n * $ (binomial (i - 2 , j - 1 )) -
130+ $ (binomial (i - 2 , j - 2 ))) *
131+ $ (Symbol (' w' , j, k - 1 )) *
132+ v[$ (i + 1 - j)])
133+ for j in (k - 1 ): (i - 1 )]. .. ))
134+ end
135+ end
135136 ex = quote
136137 $ ex
137- $ (Symbol (' v' , i)) = + ($ ([:((n * $ (binomial (i - 2 , j - 1 )) -
138- $ (binomial (i - 2 , j - 2 ))) * $ (Symbol (' v' , j)) *
139- v[$ (i + 1 - j)])
140- for j in 1 : (i - 1 )]. .. )) / v[1 ]
138+ $ subex
139+ $ (Symbol (' u' , i)) = + ($ ([:($ (Symbol (' w' , i, k)) * $ (Symbol (' p' , k)))
140+ for k in 2 : i]. .. ))
141141 end
142142 end
143- ex = :($ ex; TaylorScalar ($ ([Symbol (' v ' , i) for i in 1 : N]. .. )))
143+ ex = :($ ex; TaylorScalar ($ ([Symbol (' u ' , i) for i in 1 : N]. .. )))
144144 return :(@inbounds $ ex)
145145end
146146
0 commit comments