@@ -16,47 +16,47 @@ function legendre_ϕ_ψ(k)
16
16
p = Polynomial ([- 1 , 2 ]) # 2x-1
17
17
p2 = Polynomial ([- 1 , 4 ]) # 4x-1
18
18
19
- for ki in 0 : (k- 1 )
19
+ for ki in 0 : (k - 1 )
20
20
l = convert (Polynomial, gen_poly (Legendre, ki)) # Legendre of n=ki
21
- ϕ_coefs[ki+ 1 , 1 : (ki+ 1 )] .= sqrt (2 * ki + 1 ) .* coeffs (l (p))
22
- ϕ_2x_coefs[ki+ 1 , 1 : (ki+ 1 )] .= sqrt (2 * ( 2 * ki + 1 )) .* coeffs (l (p2))
21
+ ϕ_coefs[ki + 1 , 1 : (ki + 1 )] .= sqrt (2 * ki + 1 ) .* coeffs (l (p))
22
+ ϕ_2x_coefs[ki + 1 , 1 : (ki + 1 )] .= sqrt (2 * ( 2 * ki + 1 )) .* coeffs (l (p2))
23
23
end
24
-
24
+
25
25
ψ1_coefs = zeros (k, k)
26
26
ψ2_coefs = zeros (k, k)
27
- for ki in 0 : (k- 1 )
28
- ψ1_coefs[ki+ 1 , :] .= ϕ_2x_coefs[ki+ 1 , :]
29
- for i in 0 : (k- 1 )
30
- a = ϕ_2x_coefs[ki+ 1 , 1 : (ki+ 1 )]
31
- b = ϕ_coefs[i+ 1 , 1 : (i+ 1 )]
27
+ for ki in 0 : (k - 1 )
28
+ ψ1_coefs[ki + 1 , :] .= ϕ_2x_coefs[ki + 1 , :]
29
+ for i in 0 : (k - 1 )
30
+ a = ϕ_2x_coefs[ki + 1 , 1 : (ki + 1 )]
31
+ b = ϕ_coefs[i + 1 , 1 : (i + 1 )]
32
32
proj_ = proj_factor (a, b)
33
- ψ1_coefs[ki+ 1 , :] .- = proj_ .* view (ϕ_coefs, i+ 1 , :)
34
- ψ2_coefs[ki+ 1 , :] .- = proj_ .* view (ϕ_coefs, i+ 1 , :)
33
+ ψ1_coefs[ki + 1 , :] .- = proj_ .* view (ϕ_coefs, i + 1 , :)
34
+ ψ2_coefs[ki + 1 , :] .- = proj_ .* view (ϕ_coefs, i + 1 , :)
35
35
end
36
36
37
- for j in 0 : (k- 1 )
38
- a = ϕ_2x_coefs[ki+ 1 , 1 : (ki+ 1 )]
39
- b = ψ1_coefs[j+ 1 , :]
37
+ for j in 0 : (k - 1 )
38
+ a = ϕ_2x_coefs[ki + 1 , 1 : (ki + 1 )]
39
+ b = ψ1_coefs[j + 1 , :]
40
40
proj_ = proj_factor (a, b)
41
- ψ1_coefs[ki+ 1 , :] .- = proj_ .* view (ψ1_coefs, j+ 1 , :)
42
- ψ2_coefs[ki+ 1 , :] .- = proj_ .* view (ψ2_coefs, j+ 1 , :)
41
+ ψ1_coefs[ki + 1 , :] .- = proj_ .* view (ψ1_coefs, j + 1 , :)
42
+ ψ2_coefs[ki + 1 , :] .- = proj_ .* view (ψ2_coefs, j + 1 , :)
43
43
end
44
44
45
- a = ψ1_coefs[ki+ 1 , :]
45
+ a = ψ1_coefs[ki + 1 , :]
46
46
norm1 = proj_factor (a, a)
47
47
48
- a = ψ2_coefs[ki+ 1 , :]
49
- norm2 = proj_factor (a, a, complement= true )
48
+ a = ψ2_coefs[ki + 1 , :]
49
+ norm2 = proj_factor (a, a, complement = true )
50
50
norm_ = sqrt (norm1 + norm2)
51
- ψ1_coefs[ki+ 1 , :] ./= norm_
52
- ψ2_coefs[ki+ 1 , :] ./= norm_
51
+ ψ1_coefs[ki + 1 , :] ./= norm_
52
+ ψ2_coefs[ki + 1 , :] ./= norm_
53
53
zero_out! (ψ1_coefs)
54
54
zero_out! (ψ2_coefs)
55
55
end
56
56
57
- ϕ = [Polynomial (ϕ_coefs[i,:]) for i in 1 : k]
58
- ψ1 = [Polynomial (ψ1_coefs[i,:]) for i in 1 : k]
59
- ψ2 = [Polynomial (ψ2_coefs[i,:]) for i in 1 : k]
57
+ ϕ = [Polynomial (ϕ_coefs[i, :]) for i in 1 : k]
58
+ ψ1 = [Polynomial (ψ1_coefs[i, :]) for i in 1 : k]
59
+ ψ2 = [Polynomial (ψ2_coefs[i, :]) for i in 1 : k]
60
60
61
61
return ϕ, ψ1, ψ2
62
62
end
@@ -68,14 +68,14 @@ function chebyshev_ϕ_ψ(k)
68
68
p = Polynomial ([- 1 , 2 ]) # 2x-1
69
69
p2 = Polynomial ([- 1 , 4 ]) # 4x-1
70
70
71
- for ki in 0 : (k- 1 )
71
+ for ki in 0 : (k - 1 )
72
72
if ki == 0
73
- ϕ_coefs[ki+ 1 , 1 : (ki+ 1 )] .= sqrt (2 / π)
74
- ϕ_2x_coefs[ki+ 1 , 1 : (ki+ 1 )] .= sqrt (4 / π)
73
+ ϕ_coefs[ki + 1 , 1 : (ki + 1 )] .= sqrt (2 / π)
74
+ ϕ_2x_coefs[ki + 1 , 1 : (ki + 1 )] .= sqrt (4 / π)
75
75
else
76
76
c = convert (Polynomial, gen_poly (Chebyshev, ki)) # Chebyshev of n=ki
77
- ϕ_coefs[ki+ 1 , 1 : (ki+ 1 )] .= 2 / sqrt (π) .* coeffs (c (p))
78
- ϕ_2x_coefs[ki+ 1 , 1 : (ki+ 1 )] .= sqrt (2 ) * 2 / sqrt (π) .* coeffs (c (p2))
77
+ ϕ_coefs[ki + 1 , 1 : (ki + 1 )] .= 2 / sqrt (π) .* coeffs (c (p))
78
+ ϕ_2x_coefs[ki + 1 , 1 : (ki + 1 )] .= sqrt (2 ) * 2 / sqrt (π) .* coeffs (c (p2))
79
79
end
80
80
end
81
81
@@ -87,43 +87,43 @@ function chebyshev_ϕ_ψ(k)
87
87
# x_m[x_m==0.5] = 0.5 + 1e-8 # add small noise to avoid the case of 0.5 belonging to both phi(2x) and phi(2x-1)
88
88
# not needed for our purpose here, we use even k always to avoid
89
89
wm = π / k_use / 2
90
-
90
+
91
91
ψ1_coefs = zeros (k, k)
92
92
ψ2_coefs = zeros (k, k)
93
93
94
- ψ1 = Array {Any,1} (undef, k)
95
- ψ2 = Array {Any,1} (undef, k)
94
+ ψ1 = Array {Any, 1} (undef, k)
95
+ ψ2 = Array {Any, 1} (undef, k)
96
96
97
- for ki in 0 : (k- 1 )
98
- ψ1_coefs[ki+ 1 , :] .= ϕ_2x_coefs[ki+ 1 , :]
99
- for i in 0 : (k- 1 )
100
- proj_ = sum (wm .* ϕ[i+ 1 ]. (x_m) .* sqrt (2 ) .* ϕ[ki+ 1 ]. (2 * x_m))
101
- ψ1_coefs[ki+ 1 , :] .- = proj_ .* view (ϕ_coefs, i+ 1 , :)
102
- ψ2_coefs[ki+ 1 , :] .- = proj_ .* view (ϕ_coefs, i+ 1 , :)
97
+ for ki in 0 : (k - 1 )
98
+ ψ1_coefs[ki + 1 , :] .= ϕ_2x_coefs[ki + 1 , :]
99
+ for i in 0 : (k - 1 )
100
+ proj_ = sum (wm .* ϕ[i + 1 ]. (x_m) .* sqrt (2 ) .* ϕ[ki + 1 ]. (2 * x_m))
101
+ ψ1_coefs[ki + 1 , :] .- = proj_ .* view (ϕ_coefs, i + 1 , :)
102
+ ψ2_coefs[ki + 1 , :] .- = proj_ .* view (ϕ_coefs, i + 1 , :)
103
103
end
104
104
105
- for j in 0 : (ki- 1 )
106
- proj_ = sum (wm .* ψ1[j+ 1 ]. (x_m) .* sqrt (2 ) .* ϕ[ki+ 1 ]. (2 * x_m))
107
- ψ1_coefs[ki+ 1 , :] .- = proj_ .* view (ψ1_coefs, j+ 1 , :)
108
- ψ2_coefs[ki+ 1 , :] .- = proj_ .* view (ψ2_coefs, j+ 1 , :)
105
+ for j in 0 : (ki - 1 )
106
+ proj_ = sum (wm .* ψ1[j + 1 ]. (x_m) .* sqrt (2 ) .* ϕ[ki + 1 ]. (2 * x_m))
107
+ ψ1_coefs[ki + 1 , :] .- = proj_ .* view (ψ1_coefs, j + 1 , :)
108
+ ψ2_coefs[ki + 1 , :] .- = proj_ .* view (ψ2_coefs, j + 1 , :)
109
109
end
110
110
111
- ψ1[ki+ 1 ] = ϕ_ (ψ1_coefs[ki+ 1 , :]; lb= 0. , ub= 0.5 )
112
- ψ2[ki+ 1 ] = ϕ_ (ψ2_coefs[ki+ 1 , :]; lb= 0.5 , ub= 1. )
113
-
114
- norm1 = sum (wm .* ψ1[ki+ 1 ]. (x_m) .* ψ1[ki+ 1 ]. (x_m))
115
- norm2 = sum (wm .* ψ2[ki+ 1 ]. (x_m) .* ψ2[ki+ 1 ]. (x_m))
116
-
111
+ ψ1[ki + 1 ] = ϕ_ (ψ1_coefs[ki + 1 , :]; lb = 0.0 , ub = 0.5 )
112
+ ψ2[ki + 1 ] = ϕ_ (ψ2_coefs[ki + 1 , :]; lb = 0.5 , ub = 1.0 )
113
+
114
+ norm1 = sum (wm .* ψ1[ki + 1 ]. (x_m) .* ψ1[ki + 1 ]. (x_m))
115
+ norm2 = sum (wm .* ψ2[ki + 1 ]. (x_m) .* ψ2[ki + 1 ]. (x_m))
116
+
117
117
norm_ = sqrt (norm1 + norm2)
118
- ψ1_coefs[ki+ 1 , :] ./= norm_
119
- ψ2_coefs[ki+ 1 , :] ./= norm_
118
+ ψ1_coefs[ki + 1 , :] ./= norm_
119
+ ψ2_coefs[ki + 1 , :] ./= norm_
120
120
zero_out! (ψ1_coefs)
121
121
zero_out! (ψ2_coefs)
122
-
123
- ψ1[ki+ 1 ] = ϕ_ (ψ1_coefs[ki+ 1 , :]; lb= 0. , ub= 0.5 + 1e-16 )
124
- ψ2[ki+ 1 ] = ϕ_ (ψ2_coefs[ki+ 1 , :]; lb= 0.5 + 1e-16 , ub= 1. )
122
+
123
+ ψ1[ki + 1 ] = ϕ_ (ψ1_coefs[ki + 1 , :]; lb = 0.0 , ub = 0.5 + 1e-16 )
124
+ ψ2[ki + 1 ] = ϕ_ (ψ2_coefs[ki + 1 , :]; lb = 0.5 + 1e-16 , ub = 1.0 )
125
125
end
126
-
126
+
127
127
return ϕ, ψ1, ψ2
128
128
end
129
129
@@ -137,22 +137,26 @@ function legendre_filter(k)
137
137
l = convert (Polynomial, gen_poly (Legendre, k))
138
138
x_m = roots (l (Polynomial ([- 1 , 2 ]))) # 2x-1
139
139
m = 2 .* x_m .- 1
140
- wm = 1 ./ k ./ legendre_der .(k, m) ./ gen_poly (Legendre, k- 1 ).(m)
141
-
142
- for ki in 0 : (k- 1 )
143
- for kpi in 0 : (k- 1 )
144
- H0[ki+ 1 , kpi+ 1 ] = 1 / sqrt (2 ) * sum (wm .* ϕ[ki+ 1 ]. (x_m/ 2 ) .* ϕ[kpi+ 1 ]. (x_m))
145
- G0[ki+ 1 , kpi+ 1 ] = 1 / sqrt (2 ) * sum (wm .* ψ (ψ1, ψ2, ki, x_m/ 2 ) .* ϕ[kpi+ 1 ]. (x_m))
146
- H1[ki+ 1 , kpi+ 1 ] = 1 / sqrt (2 ) * sum (wm .* ϕ[ki+ 1 ]. ((x_m.+ 1 )/ 2 ) .* ϕ[kpi+ 1 ]. (x_m))
147
- G1[ki+ 1 , kpi+ 1 ] = 1 / sqrt (2 ) * sum (wm .* ψ (ψ1, ψ2, ki, (x_m.+ 1 )/ 2 ) .* ϕ[kpi+ 1 ]. (x_m))
140
+ wm = 1 ./ k ./ legendre_der .(k, m) ./ gen_poly (Legendre, k - 1 ).(m)
141
+
142
+ for ki in 0 : (k - 1 )
143
+ for kpi in 0 : (k - 1 )
144
+ H0[ki + 1 , kpi + 1 ] = 1 / sqrt (2 ) *
145
+ sum (wm .* ϕ[ki + 1 ]. (x_m / 2 ) .* ϕ[kpi + 1 ]. (x_m))
146
+ G0[ki + 1 , kpi + 1 ] = 1 / sqrt (2 ) *
147
+ sum (wm .* ψ (ψ1, ψ2, ki, x_m / 2 ) .* ϕ[kpi + 1 ]. (x_m))
148
+ H1[ki + 1 , kpi + 1 ] = 1 / sqrt (2 ) *
149
+ sum (wm .* ϕ[ki + 1 ]. ((x_m .+ 1 ) / 2 ) .* ϕ[kpi + 1 ]. (x_m))
150
+ G1[ki + 1 , kpi + 1 ] = 1 / sqrt (2 ) * sum (wm .* ψ (ψ1, ψ2, ki, (x_m .+ 1 ) / 2 ) .*
151
+ ϕ[kpi + 1 ]. (x_m))
148
152
end
149
153
end
150
154
151
155
zero_out! (H0)
152
156
zero_out! (H1)
153
157
zero_out! (G0)
154
158
zero_out! (G1)
155
-
159
+
156
160
return H0, H1, G0, G1, I (k), I (k)
157
161
end
158
162
@@ -172,14 +176,19 @@ function chebyshev_filter(k)
172
176
# not needed for our purpose here, we use even k always to avoid
173
177
wm = π / k_use / 2
174
178
175
- for ki in 0 : (k- 1 )
176
- for kpi in 0 : (k- 1 )
177
- H0[ki+ 1 , kpi+ 1 ] = 1 / sqrt (2 ) * sum (wm .* ϕ[ki+ 1 ]. (x_m/ 2 ) .* ϕ[kpi+ 1 ]. (x_m))
178
- H1[ki+ 1 , kpi+ 1 ] = 1 / sqrt (2 ) * sum (wm .* ϕ[ki+ 1 ]. ((x_m.+ 1 )/ 2 ) .* ϕ[kpi+ 1 ]. (x_m))
179
- G0[ki+ 1 , kpi+ 1 ] = 1 / sqrt (2 ) * sum (wm .* ψ (ψ1, ψ2, ki, x_m/ 2 ) .* ϕ[kpi+ 1 ]. (x_m))
180
- G1[ki+ 1 , kpi+ 1 ] = 1 / sqrt (2 ) * sum (wm .* ψ (ψ1, ψ2, ki, (x_m.+ 1 )/ 2 ) .* ϕ[kpi+ 1 ]. (x_m))
181
- Φ0[ki+ 1 , kpi+ 1 ] = 2 * sum (wm .* ϕ[ki+ 1 ]. (2 x_m) .* ϕ[kpi+ 1 ]. (2 x_m))
182
- Φ1[ki+ 1 , kpi+ 1 ] = 2 * sum (wm .* ϕ[ki+ 1 ]. (2 .* x_m .- 1 ) .* ϕ[kpi+ 1 ]. (2 .* x_m .- 1 ))
179
+ for ki in 0 : (k - 1 )
180
+ for kpi in 0 : (k - 1 )
181
+ H0[ki + 1 , kpi + 1 ] = 1 / sqrt (2 ) *
182
+ sum (wm .* ϕ[ki + 1 ]. (x_m / 2 ) .* ϕ[kpi + 1 ]. (x_m))
183
+ H1[ki + 1 , kpi + 1 ] = 1 / sqrt (2 ) *
184
+ sum (wm .* ϕ[ki + 1 ]. ((x_m .+ 1 ) / 2 ) .* ϕ[kpi + 1 ]. (x_m))
185
+ G0[ki + 1 , kpi + 1 ] = 1 / sqrt (2 ) *
186
+ sum (wm .* ψ (ψ1, ψ2, ki, x_m / 2 ) .* ϕ[kpi + 1 ]. (x_m))
187
+ G1[ki + 1 , kpi + 1 ] = 1 / sqrt (2 ) * sum (wm .* ψ (ψ1, ψ2, ki, (x_m .+ 1 ) / 2 ) .*
188
+ ϕ[kpi + 1 ]. (x_m))
189
+ Φ0[ki + 1 , kpi + 1 ] = 2 * sum (wm .* ϕ[ki + 1 ]. (2 x_m) .* ϕ[kpi + 1 ]. (2 x_m))
190
+ Φ1[ki + 1 , kpi + 1 ] = 2 * sum (wm .* ϕ[ki + 1 ]. (2 .* x_m .- 1 ) .*
191
+ ϕ[kpi + 1 ]. (2 .* x_m .- 1 ))
183
192
end
184
193
end
185
194
@@ -189,6 +198,6 @@ function chebyshev_filter(k)
189
198
zero_out! (G1)
190
199
zero_out! (Φ0)
191
200
zero_out! (Φ1)
192
-
201
+
193
202
return H0, H1, G0, G1, Φ0, Φ1
194
203
end
0 commit comments