@@ -16,14 +16,15 @@ function finite_difference_jacobian!(J::AbstractMatrix{<:Real}, f, x::AbstractAr
16
16
epsilon_elemtype = compute_epsilon_elemtype (epsilon, x)
17
17
x1, fx1 = f. x1, f. fx1
18
18
copy! (x1, x)
19
+ vfx, vfx1 = vec (fx1),vec (fx)
19
20
if fdtype == Val{:forward }
20
21
epsilon_factor = compute_epsilon_factor (Val{:forward }, epsilon_elemtype)
21
22
@inbounds for i ∈ 1 : n
22
23
epsilon = compute_epsilon (Val{:forward }, x[i], epsilon_factor)
23
24
x1[i] += epsilon
24
25
f (fx1, x1)
25
26
f (fx, x)
26
- @. J[:,i] = (fx1 - fx ) / epsilon
27
+ @. J[:,i] = (vfx1 - vfx ) / epsilon
27
28
x1[i] -= epsilon
28
29
end
29
30
elseif fdtype == Val{:central }
@@ -34,7 +35,7 @@ function finite_difference_jacobian!(J::AbstractMatrix{<:Real}, f, x::AbstractAr
34
35
x[i] -= epsilon
35
36
f (fx1, x1)
36
37
f (fx, x)
37
- @. J[:,i] = (fx1 - fx ) / (2 * epsilon)
38
+ @. J[:,i] = (vfx1 - vfx ) / (2 * epsilon)
38
39
x1[i] -= epsilon
39
40
x[i] += epsilon
40
41
end
@@ -61,14 +62,15 @@ function finite_difference_jacobian!(J::AbstractMatrix{<:Number}, f, x::Abstract
61
62
epsilon_elemtype = compute_epsilon_elemtype (epsilon, x)
62
63
x1, fx1 = f. x1, f. fx1
63
64
copy! (x1, x)
65
+ vfx, vfx1 = vec (fx1),vec (fx)
64
66
if fdtype == Val{:forward }
65
67
epsilon_factor = compute_epsilon_factor (Val{:forward }, epsilon_elemtype)
66
68
@inbounds for i ∈ 1 : n
67
69
epsilon = compute_epsilon (Val{:forward }, real (x[i]), epsilon_factor)
68
70
x1[i] += epsilon
69
71
f (fx1, x1)
70
72
f (fx, x)
71
- @. J[:,i] = ( real ( (fx1 - fx ) ) + im* imag ( (fx1 - fx ) ) ) / epsilon
73
+ @. J[:,i] = ( real ( (vfx1 - vfx ) ) + im* imag ( (vfx1 - vfx ) ) ) / epsilon
72
74
x1[i] -= epsilon
73
75
end
74
76
elseif fdtype == Val{:central }
@@ -79,7 +81,7 @@ function finite_difference_jacobian!(J::AbstractMatrix{<:Number}, f, x::Abstract
79
81
x[i] -= epsilon
80
82
f (fx1, x1)
81
83
f (fx, x)
82
- @. J[:,i] = ( real ( (fx1 - fx ) ) + im* imag ( fx1 - fx ) ) / (2 * epsilon)
84
+ @. J[:,i] = ( real ( (vfx1 - vfx ) ) + im* imag ( vfx1 - vfx ) ) / (2 * epsilon)
83
85
x1[i] -= epsilon
84
86
x[i] += epsilon
85
87
end
0 commit comments