@@ -44,14 +44,14 @@ function grad(fdm, f, xs...)
44
44
end
45
45
46
46
"""
47
- jacobian(fdm, f, xs::Union{Real, AbstractArray{<:Real}}; dim ::Int=length(f(x)))
47
+ jacobian(fdm, f, xs::Union{Real, AbstractArray{<:Real}}; len ::Int=length(f(x)))
48
48
49
49
Approximate the Jacobian of `f` at `x` using `fdm`. `f(x)` must be a length `D` vector. If
50
50
`D` is not provided, then `f(x)` is computed once to determine the output size.
51
51
"""
52
- function jacobian (fdm, f, x:: Union{T, AbstractArray{T}} ; dim :: Int = length (f (x))) where {T <: Real }
53
- J = Matrix {float(T)} (undef, dim , length (x))
54
- for d in 1 : dim
52
+ function jacobian (fdm, f, x:: Union{T, AbstractArray{T}} ; len :: Int = length (f (x))) where {T <: Real }
53
+ J = Matrix {float(T)} (undef, len , length (x))
54
+ for d in 1 : len
55
55
gs = grad (fdm, x-> f (x)[d], x)
56
56
for k in 1 : length (x)
57
57
J[d, k] = gs[k]
@@ -60,9 +60,9 @@ function jacobian(fdm, f, x::Union{T, AbstractArray{T}}; dim::Int=length(f(x)))
60
60
return J
61
61
end
62
62
63
- function jacobian (fdm, f, xs... ; dim :: Int = length (f (xs... )))
63
+ function jacobian (fdm, f, xs... ; len :: Int = length (f (xs... )))
64
64
return ntuple (length (xs)) do k
65
- jacobian (fdm, x-> f (replace_arg (x, xs, k)... ), xs[k]; dim = dim )
65
+ jacobian (fdm, x-> f (replace_arg (x, xs, k)... ), xs[k]; len = len )
66
66
end
67
67
end
68
68
@@ -78,7 +78,7 @@ _jvp(fdm, f, x::Vector{<:Number}, ẋ::AV{<:Number}) = fdm(ε -> f(x .+ ε .* x
78
78
79
79
Convenience function to compute `transpose(jacobian(f, x)) * ȳ`.
80
80
"""
81
- _j′vp (fdm, f, ȳ:: AV{<:Number} , x:: Vector{<:Number} ) = transpose (jacobian (fdm, f, x; dim = length (ȳ))) * ȳ
81
+ _j′vp (fdm, f, ȳ:: AV{<:Number} , x:: Vector{<:Number} ) = transpose (jacobian (fdm, f, x; len = length (ȳ))) * ȳ
82
82
83
83
"""
84
84
jvp(fdm, f, x, ẋ)
0 commit comments