@@ -8,7 +8,7 @@ J = zeros(J_ref)
8
8
9
9
err_func (a,b) = maximum (abs .(a- b))
10
10
11
- # TODO : add tests for GPUArrays, those should work now
11
+ # TODO : add tests for GPUArrays
12
12
# TODO : add tests for DEDataArrays
13
13
14
14
# StridedArray tests start here
@@ -39,64 +39,13 @@ err_func(a,b) = maximum(abs.(a-b))
39
39
@test err_func (DiffEqDiffTools. finite_difference! (df, sin, x, Val{:complex }, Val{:Real }, Val{:Default }, y, epsilon), df_ref) < 1e-15
40
40
end
41
41
42
- # Jacobian tests for real-valued callables
43
- @time @testset " Jacobian StridedArray real-valued tests" begin
44
- @test err_func (DiffEqDiffTools. finite_difference_jacobian (sin, x, Val{:forward }), J_ref) < 1e-4
45
- @test err_func (DiffEqDiffTools. finite_difference_jacobian (sin, x, Val{:central }), J_ref) < 1e-8
46
- @test err_func (DiffEqDiffTools. finite_difference_jacobian (sin, x, Val{:complex }), J_ref) < 1e-15
47
-
48
- @test err_func (DiffEqDiffTools. finite_difference_jacobian (sin, x, Val{:forward }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-4
49
- @test err_func (DiffEqDiffTools. finite_difference_jacobian (sin, x, Val{:central }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-8
50
- @test err_func (DiffEqDiffTools. finite_difference_jacobian (sin, x, Val{:complex }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-15
51
-
52
- @test err_func (DiffEqDiffTools. finite_difference_jacobian (sin, x, Val{:forward }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-4
53
- @test err_func (DiffEqDiffTools. finite_difference_jacobian (sin, x, Val{:central }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-8
54
- @test err_func (DiffEqDiffTools. finite_difference_jacobian (sin, x, Val{:complex }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-15
55
-
56
- @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, sin, x, Val{:forward }), J_ref) < 1e-4
57
- @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, sin, x, Val{:central }), J_ref) < 1e-8
58
- @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, sin, x, Val{:complex }), J_ref) < 1e-15
59
-
60
- @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, sin, x, Val{:forward }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-4
61
- @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, sin, x, Val{:central }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-8
62
- @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, sin, x, Val{:complex }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-15
63
-
64
- @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, sin, x, Val{:forward }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-4
65
- @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, sin, x, Val{:central }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-8
66
- @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, sin, x, Val{:complex }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-15
67
- end
68
-
69
- # Jacobian tests w/ derivatives (real-valued callables)
70
- @time @testset " Jacobian StridedArray real-valued derivative tests" begin
71
- DiffEqDiffTools. finite_difference_jacobian! (J, df, sin, x, Val{:forward })
72
- @test err_func (df, df_ref) < 1e-4
73
- DiffEqDiffTools. finite_difference_jacobian! (J, df, sin, x, Val{:central })
74
- @test err_func (df, df_ref) < 1e-8
75
- DiffEqDiffTools. finite_difference_jacobian! (J, df, sin, x, Val{:complex })
76
- @test err_func (df, df_ref) < 1e-15
77
- DiffEqDiffTools. finite_difference_jacobian! (J, df, sin, x, Val{:forward }, Val{:Real }, Val{:Default }, y)
78
- @test err_func (df, df_ref) < 1e-4
79
- DiffEqDiffTools. finite_difference_jacobian! (J, df, sin, x, Val{:central }, Val{:Real }, Val{:Default }, y)
80
- @test err_func (df, df_ref) < 1e-8
81
- DiffEqDiffTools. finite_difference_jacobian! (J, df, sin, x, Val{:complex }, Val{:Real }, Val{:Default }, y)
82
- @test err_func (df, df_ref) < 1e-15
83
- DiffEqDiffTools. finite_difference_jacobian! (J, df, sin, x, Val{:forward }, Val{:Real }, Val{:Default }, y, epsilon)
84
- @test err_func (df, df_ref) < 1e-4
85
- DiffEqDiffTools. finite_difference_jacobian! (J, df, sin, x, Val{:central }, Val{:Real }, Val{:Default }, y, epsilon)
86
- @test err_func (df, df_ref) < 1e-8
87
- DiffEqDiffTools. finite_difference_jacobian! (J, df, sin, x, Val{:complex }, Val{:Real }, Val{:Default }, y, epsilon)
88
- @test err_func (df, df_ref) < 1e-15
89
- end
90
-
91
42
# derivative tests for complex-valued callables
92
43
x = x + im* x
93
44
f (x) = cos (real (x)) + im* sin (imag (x))
94
45
y = f .(x)
95
46
df = zeros (x)
96
47
epsilon = zeros (length (x))
97
48
df_ref = - sin .(real (x)) + im* cos .(imag (x))
98
- J_ref = diagm (df_ref)
99
- J = zeros (J_ref)
100
49
101
50
@time @testset " Derivative StridedArray complex-valued tests" begin
102
51
@test err_func (DiffEqDiffTools. finite_difference (f, x, Val{:forward }, Val{:Complex }), df_ref) < 1e-4
@@ -118,6 +67,84 @@ J = zeros(J_ref)
118
67
@test err_func (DiffEqDiffTools. finite_difference! (df, f, x, Val{:central }, Val{:Complex }, Val{:Default }, y, epsilon), df_ref) < 1e-8
119
68
end
120
69
70
+ function f (x)
71
+ fvec = zeros (x)
72
+ fvec[1 ] = (x[1 ]+ 3 )* (x[2 ]^ 3 - 7 )+ 18
73
+ fvec[2 ] = sin (x[2 ]* exp (x[1 ])- 1 )
74
+ fvec
75
+ end
76
+ x = rand (2 )
77
+ y = f (x)
78
+ J_ref = [[- 7 + x[2 ]^ 3 3 * (3 + x[1 ])* x[2 ]^ 2 ]; [exp (x[1 ])* x[2 ]* cos (1 - exp (x[1 ])* x[2 ]) exp (x[1 ])* cos (1 - exp (x[1 ])* x[2 ])]]
79
+ J = zeros (J_ref)
80
+ df = zeros (x)
81
+ df_ref = diag (J_ref)
82
+ epsilon = zeros (x)
83
+
84
+ # Jacobian tests for real-valued callables
85
+ @time @testset " Jacobian StridedArray real-valued tests" begin
86
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian (f, x, Val{:forward }), J_ref) < 1e-4
87
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian (f, x, Val{:central }), J_ref) < 1e-8
88
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian (f, x, Val{:complex }), J_ref) < 1e-14
89
+
90
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian (f, x, Val{:forward }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-4
91
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian (f, x, Val{:central }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-8
92
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian (f, x, Val{:complex }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-14
93
+
94
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian (f, x, Val{:forward }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-4
95
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian (f, x, Val{:central }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-8
96
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian (f, x, Val{:complex }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-14
97
+
98
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, f, x, Val{:forward }), J_ref) < 1e-4
99
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, f, x, Val{:central }), J_ref) < 1e-8
100
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, f, x, Val{:complex }), J_ref) < 1e-14
101
+
102
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, f, x, Val{:forward }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-4
103
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, f, x, Val{:central }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-8
104
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, f, x, Val{:complex }, Val{:Real }, Val{:Default }, y), J_ref) < 1e-14
105
+
106
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, f, x, Val{:forward }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-4
107
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, f, x, Val{:central }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-8
108
+ @test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, f, x, Val{:complex }, Val{:Real }, Val{:Default }, y, epsilon), J_ref) < 1e-14
109
+ end
110
+
111
+ # Jacobian tests w/ derivatives (real-valued callables)
112
+ @time @testset " Jacobian StridedArray real-valued derivative tests" begin
113
+ DiffEqDiffTools. finite_difference_jacobian! (J, df, f, x, Val{:forward })
114
+ @show df, df_ref
115
+ @test err_func (df, df_ref) < 1e-4
116
+ DiffEqDiffTools. finite_difference_jacobian! (J, df, f, x, Val{:central })
117
+ @test err_func (df, df_ref) < 1e-8
118
+ DiffEqDiffTools. finite_difference_jacobian! (J, df, f, x, Val{:complex })
119
+ @test err_func (df, df_ref) < 1e-15
120
+ DiffEqDiffTools. finite_difference_jacobian! (J, df, f, x, Val{:forward }, Val{:Real }, Val{:Default }, y)
121
+ @test err_func (df, df_ref) < 1e-4
122
+ DiffEqDiffTools. finite_difference_jacobian! (J, df, f, x, Val{:central }, Val{:Real }, Val{:Default }, y)
123
+ @test err_func (df, df_ref) < 1e-8
124
+ DiffEqDiffTools. finite_difference_jacobian! (J, df, f, x, Val{:complex }, Val{:Real }, Val{:Default }, y)
125
+ @test err_func (df, df_ref) < 1e-15
126
+ DiffEqDiffTools. finite_difference_jacobian! (J, df, f, x, Val{:forward }, Val{:Real }, Val{:Default }, y, epsilon)
127
+ @test err_func (df, df_ref) < 1e-4
128
+ DiffEqDiffTools. finite_difference_jacobian! (J, df, f, x, Val{:central }, Val{:Real }, Val{:Default }, y, epsilon)
129
+ @test err_func (df, df_ref) < 1e-8
130
+ DiffEqDiffTools. finite_difference_jacobian! (J, df, f, x, Val{:complex }, Val{:Real }, Val{:Default }, y, epsilon)
131
+ @test err_func (df, df_ref) < 1e-15
132
+ end
133
+
134
+ function f (x)
135
+ fvec = zeros (x)
136
+ fvec[1 ] = (im* x[1 ]+ 3 )* (x[2 ]^ 3 - 7 )+ 18
137
+ fvec[2 ] = sin (x[2 ]* exp (x[1 ])- 1 )
138
+ fvec
139
+ end
140
+ x = rand (2 ) + im* rand (2 )
141
+ y = f (x)
142
+ J_ref = [[im* (- 7 + x[2 ]^ 3 ) 3 * (3 + im* x[1 ])* x[2 ]^ 2 ]; [exp (x[1 ])* x[2 ]* cos (1 - exp (x[1 ])* x[2 ]) exp (x[1 ])* cos (1 - exp (x[1 ])* x[2 ])]]
143
+ J = zeros (J_ref)
144
+ df = zeros (x)
145
+ df_ref = diag (J_ref)
146
+ epsilon = zeros (real .(x))
147
+
121
148
# Jacobian tests for complex-valued callables
122
149
@time @testset " Jacobian StridedArray complex-valued tests" begin
123
150
@test err_func (DiffEqDiffTools. finite_difference_jacobian (f, x, Val{:forward }, Val{:Complex }, Val{:Default }), J_ref) < 1e-4
139
166
@test err_func (DiffEqDiffTools. finite_difference_jacobian! (J, f, x, Val{:central }, Val{:Complex }, Val{:Default }, y, epsilon), J_ref) < 1e-8
140
167
end
141
168
142
- # Jacobian tests w/ derivatives (real -valued callables)
169
+ # Jacobian tests w/ derivatives (complex -valued callables)
143
170
@time @testset " Jacobian StridedArray complex-valued derivative tests" begin
144
171
DiffEqDiffTools. finite_difference_jacobian! (J, df, f, x, Val{:forward }, Val{:Complex }, Val{:Default })
145
172
@test err_func (df, df_ref) < 1e-4
0 commit comments