1
1
struct DeivVecTag end
2
2
3
3
# J(f(x))*v
4
- function auto_jacvec! (du , f, x, v,
4
+ function auto_jacvec! (dy , f, x, v,
5
5
cache1 = ForwardDiff. Dual {DeivVecTag} .(x, v),
6
6
cache2 = ForwardDiff. Dual {DeivVecTag} .(x, v))
7
7
cache1 .= Dual {DeivVecTag} .(x, v)
8
8
f (cache2,cache1)
9
- du .= partials .(cache2, 1 )
9
+ dy .= partials .(cache2, 1 )
10
10
end
11
11
function auto_jacvec (f, x, v)
12
12
partials .(f (Dual {DeivVecTag} .(x, v)), 1 )
13
13
end
14
14
15
- function num_jacvec! (du ,f,x,v,cache1 = similar (v),
15
+ function num_jacvec! (dy ,f,x,v,cache1 = similar (v),
16
16
cache2 = similar (v);
17
17
compute_f0 = true )
18
18
compute_f0 && (f (cache1,x))
@@ -22,7 +22,7 @@ function num_jacvec!(du,f,x,v,cache1 = similar(v),
22
22
@. x += ϵ* v
23
23
f (cache2,x)
24
24
@. x -= ϵ* v
25
- @. du = (cache2 - cache1)/ ϵ
25
+ @. dy = (cache2 - cache1)/ ϵ
26
26
end
27
27
28
28
function num_jacvec (f,x,v,f0= nothing )
@@ -33,7 +33,7 @@ function num_jacvec(f,x,v,f0=nothing)
33
33
(f (x.+ ϵ.* v) .- _f0). / ϵ
34
34
end
35
35
36
- function num_hesvec! (du ,f,x,v,
36
+ function num_hesvec! (dy ,f,x,v,
37
37
cache1 = similar (v),
38
38
cache2 = similar (v),
39
39
cache3 = similar (v))
@@ -48,7 +48,7 @@ function num_hesvec!(du,f,x,v,
48
48
g (cache2,x)
49
49
@. x -= 2 ϵ* v
50
50
g (cache3,x)
51
- @. du = (cache2 - cache3)/ (2 ϵ)
51
+ @. dy = (cache2 - cache3)/ (2 ϵ)
52
52
end
53
53
54
54
function num_hesvec (f,x,v)
@@ -63,7 +63,7 @@ function num_hesvec(f,x,v)
63
63
(gxp - gxm)/ (2 ϵ)
64
64
end
65
65
66
- function numauto_hesvec! (du ,f,x,v,
66
+ function numauto_hesvec! (dy ,f,x,v,
67
67
cache = ForwardDiff. GradientConfig (f,v),
68
68
cache1 = similar (v),
69
69
cache2 = similar (v))
@@ -77,7 +77,7 @@ function numauto_hesvec!(du,f,x,v,
77
77
g (cache1,x)
78
78
@. x -= 2 ϵ* v
79
79
g (cache2,x)
80
- @. du = (cache1 - cache2)/ (2 ϵ)
80
+ @. dy = (cache1 - cache2)/ (2 ϵ)
81
81
end
82
82
83
83
function numauto_hesvec (f,x,v)
@@ -92,22 +92,22 @@ function numauto_hesvec(f,x,v)
92
92
(gxp - gxm)/ (2 ϵ)
93
93
end
94
94
95
- function autonum_hesvec! (du ,f,x,v,
95
+ function autonum_hesvec! (dy ,f,x,v,
96
96
cache1 = ForwardDiff. Dual {DeivVecTag} .(x, v),
97
97
cache2 = ForwardDiff. Dual {DeivVecTag} .(x, v))
98
98
cache = FiniteDiff. GradientCache (v[1 ],cache1,Val{:central })
99
99
g = (dx,x) -> FiniteDiff. finite_difference_gradient! (dx,f,x,cache)
100
100
cache1 .= Dual {DeivVecTag} .(x, v)
101
101
g (cache2,cache1)
102
- du .= partials .(cache2, 1 )
102
+ dy .= partials .(cache2, 1 )
103
103
end
104
104
105
105
function autonum_hesvec (f,x,v)
106
106
g = (x) -> FiniteDiff. finite_difference_gradient (f,x)
107
107
partials .(g (Dual {DeivVecTag} .(x, v)), 1 )
108
108
end
109
109
110
- function num_hesvecgrad! (du ,g,x,v,
110
+ function num_hesvecgrad! (dy ,g,x,v,
111
111
cache2 = similar (v),
112
112
cache3 = similar (v))
113
113
T = eltype (x)
@@ -117,7 +117,7 @@ function num_hesvecgrad!(du,g,x,v,
117
117
g (cache2,x)
118
118
@. x -= 2 ϵ* v
119
119
g (cache3,x)
120
- @. du = (cache2 - cache3)/ (2 ϵ)
120
+ @. dy = (cache2 - cache3)/ (2 ϵ)
121
121
end
122
122
123
123
function num_hesvecgrad (g,x,v)
@@ -131,12 +131,12 @@ function num_hesvecgrad(g,x,v)
131
131
(gxp - gxm)/ (2 ϵ)
132
132
end
133
133
134
- function auto_hesvecgrad! (du ,g,x,v,
134
+ function auto_hesvecgrad! (dy ,g,x,v,
135
135
cache2 = ForwardDiff. Dual {DeivVecTag} .(x, v),
136
136
cache3 = ForwardDiff. Dual {DeivVecTag} .(x, v))
137
137
cache2 .= Dual {DeivVecTag} .(x, v)
138
138
g (cache3,cache2)
139
- du .= partials .(cache3, 1 )
139
+ dy .= partials .(cache3, 1 )
140
140
end
141
141
142
142
function auto_hesvecgrad (g,x,v)
@@ -145,98 +145,98 @@ end
145
145
146
146
# ## Operator Forms
147
147
148
- struct JacVec{F,T1,T2,uType }
148
+ struct JacVec{F,T1,T2,xType }
149
149
f:: F
150
150
cache1:: T1
151
151
cache2:: T2
152
- u :: uType
152
+ x :: xType
153
153
autodiff:: Bool
154
154
end
155
155
156
- function JacVec (f,u :: AbstractArray ;autodiff= true )
156
+ function JacVec (f,x :: AbstractArray ;autodiff= true )
157
157
if autodiff
158
- cache1 = ForwardDiff. Dual {DeivVecTag} .(u, u )
159
- cache2 = ForwardDiff. Dual {DeivVecTag} .(u, u )
158
+ cache1 = ForwardDiff. Dual {DeivVecTag} .(x, x )
159
+ cache2 = ForwardDiff. Dual {DeivVecTag} .(x, x )
160
160
else
161
- cache1 = similar (u )
162
- cache2 = similar (u )
161
+ cache1 = similar (x )
162
+ cache2 = similar (x )
163
163
end
164
- JacVec (f,cache1,cache2,u ,autodiff)
164
+ JacVec (f,cache1,cache2,x ,autodiff)
165
165
end
166
166
167
167
Base. size (L:: JacVec ) = (length (L. cache1),length (L. cache1))
168
168
Base. size (L:: JacVec ,i:: Int ) = length (L. cache1)
169
- Base.:* (L:: JacVec ,x :: AbstractVector ) = L. autodiff ? auto_jacvec (_u -> L. f (_u ),L. u,x ) : num_jacvec (_u -> L. f (_u ),L. u,x )
169
+ Base.:* (L:: JacVec ,v :: AbstractVector ) = L. autodiff ? auto_jacvec (_x -> L. f (_x ),L. x,v ) : num_jacvec (_x -> L. f (_x ),L. x,v )
170
170
171
- function LinearAlgebra. mul! (du :: AbstractVector ,L:: JacVec ,v:: AbstractVector )
171
+ function LinearAlgebra. mul! (dy :: AbstractVector ,L:: JacVec ,v:: AbstractVector )
172
172
if L. autodiff
173
- auto_jacvec! (du,(_du,_u )-> L. f (_du,_u ),L. u ,v,L. cache1,L. cache2)
173
+ auto_jacvec! (dy,(_y,_x )-> L. f (_y,_x ),L. x ,v,L. cache1,L. cache2)
174
174
else
175
- num_jacvec! (du,(_du,_u )-> L. f (_du,_u ),L. u ,v,L. cache1,L. cache2)
175
+ num_jacvec! (dy,(_y,_x )-> L. f (_y,_x ),L. x ,v,L. cache1,L. cache2)
176
176
end
177
177
end
178
178
179
- struct HesVec{F,T1,T2,uType }
179
+ struct HesVec{F,T1,T2,xType }
180
180
f:: F
181
181
cache1:: T1
182
182
cache2:: T2
183
183
cache3:: T2
184
- u :: uType
184
+ x :: xType
185
185
autodiff:: Bool
186
186
end
187
187
188
- function HesVec (f,u :: AbstractArray ;autodiff= true )
188
+ function HesVec (f,x :: AbstractArray ;autodiff= true )
189
189
if autodiff
190
- cache1 = ForwardDiff. GradientConfig (f,u )
191
- cache2 = similar (u )
192
- cache3 = similar (u )
190
+ cache1 = ForwardDiff. GradientConfig (f,x )
191
+ cache2 = similar (x )
192
+ cache3 = similar (x )
193
193
else
194
- cache1 = similar (u )
195
- cache2 = similar (u )
196
- cache3 = similar (u )
194
+ cache1 = similar (x )
195
+ cache2 = similar (x )
196
+ cache3 = similar (x )
197
197
end
198
- HesVec (f,cache1,cache2,cache3,u ,autodiff)
198
+ HesVec (f,cache1,cache2,cache3,x ,autodiff)
199
199
end
200
200
201
201
Base. size (L:: HesVec ) = (length (L. cache2),length (L. cache2))
202
202
Base. size (L:: HesVec ,i:: Int ) = length (L. cache2)
203
- Base.:* (L:: HesVec ,x :: AbstractVector ) = L. autodiff ? numauto_hesvec (L. f,L. u,x ) : num_hesvec (L. f,L. u,x )
203
+ Base.:* (L:: HesVec ,v :: AbstractVector ) = L. autodiff ? numauto_hesvec (L. f,L. x,v ) : num_hesvec (L. f,L. x,v )
204
204
205
- function LinearAlgebra. mul! (du :: AbstractVector ,L:: HesVec ,v:: AbstractVector )
205
+ function LinearAlgebra. mul! (dy :: AbstractVector ,L:: HesVec ,v:: AbstractVector )
206
206
if L. autodiff
207
- numauto_hesvec! (du ,L. f,L. u ,v,L. cache1,L. cache2,L. cache3)
207
+ numauto_hesvec! (dy ,L. f,L. x ,v,L. cache1,L. cache2,L. cache3)
208
208
else
209
- num_hesvec! (du ,L. f,L. u ,v,L. cache1,L. cache2,L. cache3)
209
+ num_hesvec! (dy ,L. f,L. x ,v,L. cache1,L. cache2,L. cache3)
210
210
end
211
211
end
212
212
213
213
struct HesVecGrad{G,T1,T2,uType}
214
214
g:: G
215
215
cache1:: T1
216
216
cache2:: T2
217
- u :: uType
217
+ x :: uType
218
218
autodiff:: Bool
219
219
end
220
220
221
- function HesVecGrad (g,u :: AbstractArray ;autodiff= false )
221
+ function HesVecGrad (g,x :: AbstractArray ;autodiff= false )
222
222
if autodiff
223
- cache1 = ForwardDiff. Dual {DeivVecTag} .(u, u )
224
- cache2 = ForwardDiff. Dual {DeivVecTag} .(u, u )
223
+ cache1 = ForwardDiff. Dual {DeivVecTag} .(x, x )
224
+ cache2 = ForwardDiff. Dual {DeivVecTag} .(x, x )
225
225
else
226
- cache1 = similar (u )
227
- cache2 = similar (u )
226
+ cache1 = similar (x )
227
+ cache2 = similar (x )
228
228
end
229
- HesVecGrad (g,cache1,cache2,u ,autodiff)
229
+ HesVecGrad (g,cache1,cache2,x ,autodiff)
230
230
end
231
231
232
232
Base. size (L:: HesVecGrad ) = (length (L. cache2),length (L. cache2))
233
233
Base. size (L:: HesVecGrad ,i:: Int ) = length (L. cache2)
234
- Base.:* (L:: HesVecGrad ,x :: AbstractVector ) = L. autodiff ? auto_hesvecgrad (L. g,L. u,x ) : num_hesvecgrad (L. g,L. u,x )
234
+ Base.:* (L:: HesVecGrad ,v :: AbstractVector ) = L. autodiff ? auto_hesvecgrad (L. g,L. x,v ) : num_hesvecgrad (L. g,L. x,v )
235
235
236
- function LinearAlgebra. mul! (du :: AbstractVector ,L:: HesVecGrad ,v:: AbstractVector )
236
+ function LinearAlgebra. mul! (dy :: AbstractVector ,L:: HesVecGrad ,v:: AbstractVector )
237
237
if L. autodiff
238
- auto_hesvecgrad! (du ,L. g,L. u ,v,L. cache1,L. cache2)
238
+ auto_hesvecgrad! (dy ,L. g,L. x ,v,L. cache1,L. cache2)
239
239
else
240
- num_hesvecgrad! (du ,L. g,L. u ,v,L. cache1,L. cache2)
240
+ num_hesvecgrad! (dy ,L. g,L. x ,v,L. cache1,L. cache2)
241
241
end
242
242
end
0 commit comments