@@ -16,47 +16,47 @@ function legendre_ϕ_ψ(k)
1616 p = Polynomial ([- 1 , 2 ]) # 2x-1
1717 p2 = Polynomial ([- 1 , 4 ]) # 4x-1
1818
19- for ki in 0 : (k- 1 )
19+ for ki in 0 : (k - 1 )
2020 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))
2323 end
24-
24+
2525 ψ1_coefs = zeros (k, k)
2626 ψ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 )]
3232 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 , :)
3535 end
3636
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 , :]
4040 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 , :)
4343 end
4444
45- a = ψ1_coefs[ki+ 1 , :]
45+ a = ψ1_coefs[ki + 1 , :]
4646 norm1 = proj_factor (a, a)
4747
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 )
5050 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_
5353 zero_out! (ψ1_coefs)
5454 zero_out! (ψ2_coefs)
5555 end
5656
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]
6060
6161 return ϕ, ψ1, ψ2
6262end
@@ -68,14 +68,14 @@ function chebyshev_ϕ_ψ(k)
6868 p = Polynomial ([- 1 , 2 ]) # 2x-1
6969 p2 = Polynomial ([- 1 , 4 ]) # 4x-1
7070
71- for ki in 0 : (k- 1 )
71+ for ki in 0 : (k - 1 )
7272 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 / π)
7575 else
7676 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))
7979 end
8080 end
8181
@@ -87,43 +87,43 @@ function chebyshev_ϕ_ψ(k)
8787 # 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)
8888 # not needed for our purpose here, we use even k always to avoid
8989 wm = π / k_use / 2
90-
90+
9191 ψ1_coefs = zeros (k, k)
9292 ψ2_coefs = zeros (k, k)
9393
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)
9696
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 , :)
103103 end
104104
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 , :)
109109 end
110110
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+
117117 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_
120120 zero_out! (ψ1_coefs)
121121 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 )
125125 end
126-
126+
127127 return ϕ, ψ1, ψ2
128128end
129129
@@ -137,22 +137,26 @@ function legendre_filter(k)
137137 l = convert (Polynomial, gen_poly (Legendre, k))
138138 x_m = roots (l (Polynomial ([- 1 , 2 ]))) # 2x-1
139139 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))
148152 end
149153 end
150154
151155 zero_out! (H0)
152156 zero_out! (H1)
153157 zero_out! (G0)
154158 zero_out! (G1)
155-
159+
156160 return H0, H1, G0, G1, I (k), I (k)
157161end
158162
@@ -172,14 +176,19 @@ function chebyshev_filter(k)
172176 # not needed for our purpose here, we use even k always to avoid
173177 wm = π / k_use / 2
174178
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 ))
183192 end
184193 end
185194
@@ -189,6 +198,6 @@ function chebyshev_filter(k)
189198 zero_out! (G1)
190199 zero_out! (Φ0)
191200 zero_out! (Φ1)
192-
201+
193202 return H0, H1, G0, G1, Φ0, Φ1
194203end
0 commit comments