@@ -39,20 +39,20 @@ function hermpts_asy( n::Int )
39
39
40
40
x0 = HermiteInitialGuesses ( n ) # get initial guesses
41
41
t0 = x0./ sqrt (2 n+ 1 )
42
- theta0 = acos (t0) # convert to theta-variable
42
+ theta0 = acos . (t0) # convert to theta-variable
43
43
val = x0;
44
44
for k = 1 : 20
45
45
val = hermpoly_asy_airy (n, theta0);
46
- dt = - val[1 ]. / (sqrt (2 )* sqrt (2 n+ 1 )* val[2 ]. * sin (theta0))
47
- theta0 = theta0 - dt; # Newton update
46
+ dt = - val[1 ]. / (sqrt (2 ). *sqrt (2 n+ 1 ). * val[2 ]. * sin . (theta0))
47
+ theta0 .- = dt; # Newton update
48
48
if norm (dt,Inf ) < sqrt (eps (Float64))/ 10
49
49
break
50
50
end
51
51
end
52
- t0 = cos (theta0)
52
+ t0 = cos . (theta0)
53
53
x = sqrt (2 n+ 1 )* t0 # back to x-variable
54
- ders = x.* val[1 ] + sqrt (2 )* val[2 ]
55
- w = ( exp (- x.^ 2 )./ ders.^ 2 ) ' ; # quadrature weights
54
+ ders = x.* val[1 ] . + sqrt (2 ). * val[2 ]
55
+ w = exp . (- x.^ 2 )./ ders.^ 2 ; # quadrature weights
56
56
57
57
x = (x, w)
58
58
end
@@ -66,14 +66,14 @@ val = x0
66
66
for kk = 1 : 10
67
67
val = hermpoly_rec (n, x0)
68
68
dx = val[1 ]. / val[2 ]
69
- dx[ isnan ( dx ) ] = 0
69
+ dx[ isnan . ( dx ) ] = 0
70
70
x0 = x0 - dx
71
71
if norm (dx, Inf )< sqrt (eps (Float64))
72
72
break
73
73
end
74
74
end
75
75
x = x0/ sqrt (2 )
76
- w = exp ( - x.^ 2 )./ val[2 ]. ^ 2 # quadrature weights
76
+ w = exp .(( - ) . ( x.^ 2 ) )./ val[2 ]. ^ 2 # quadrature weights
77
77
78
78
x = (x, w)
79
79
end
@@ -82,8 +82,8 @@ function hermpoly_rec( n::Int, x0)
82
82
# HERMPOLY_rec evaluation of scaled Hermite poly using recurrence
83
83
84
84
# evaluate:
85
- Hold = exp ( - x0.^ 2 / 4 )
86
- H = x0.* exp ( - x0.^ 2 / 4 )
85
+ Hold = exp .( x0.^ 2. / ( - 4 ) )
86
+ H = x0.* exp .( x0.^ 2. / ( - 4 ) )
87
87
for k = 1 : n- 1
88
88
Hold, H = H, (x0.* H./ sqrt (k+ 1 ) - Hold./ sqrt (1 + 1 / k))
89
89
end
@@ -97,15 +97,15 @@ function hermpoly_asy_airy(n::Int, theta)
97
97
# theta-space.
98
98
99
99
musq = 2 n+ 1 ;
100
- cosT = cos (theta)
101
- sinT = sin (theta)
102
- sin2T = 2 * cosT.* sinT
103
- eta = . 5 * theta - .25 * sin2T
100
+ cosT = cos . (theta)
101
+ sinT = sin . (theta)
102
+ sin2T = 2. * cosT.* sinT
103
+ eta = 0.5 . * theta .- 0 .25. * sin2T
104
104
chi = - (3 * eta/ 2 ). ^ (2 / 3 )
105
105
phi = (- chi./ sinT.^ 2 ). ^ (1 / 4 )
106
106
C = 2 * sqrt (pi )* musq^ (1 / 6 )* phi
107
- Airy0 = real ( airy (musq.^ (2 / 3 )* chi))
108
- Airy1 = real ( airy ( 1 , musq.^ (2 / 3 )* chi))
107
+ Airy0 = real .( airyai . (musq.^ (2 / 3 ). * chi))
108
+ Airy1 = real .( airyaiprime .( musq.^ (2 / 3 ). * chi))
109
109
110
110
# Terms in (12.10.43):
111
111
a0 = 1 ; b0 = 1
@@ -179,9 +179,9 @@ function HermiteInitialGuesses( n::Int )
179
179
# [2] F. G. Tricomi, Sugli zeri delle funzioni di cui si conosce una
180
180
# rappresentazione asintotica, Ann. Mat. Pura Appl. 26 (1947), pp. 283-300.
181
181
182
- # Error if n < 20 because initial guesses are based on asymptotic expansions:
183
- @assert n>= 20
184
-
182
+ # Error if n < 20 because initial guesses are based on asymptotic expansions:
183
+ @assert n>= 20
184
+
185
185
# Gatteschi formula involving airy roots [1].
186
186
# These initial guess are good near x = sqrt(n+1/2);
187
187
if mod (n,2 ) == 1
@@ -209,9 +209,9 @@ airyrts_exact = [-2.338107410459762 # Exact Airy roots.
209
209
- 12.828776752865757 ]
210
210
airyrts[1 : 10 ] = airyrts_exact # correct first 10.
211
211
212
- x_init = sqrt (abs (nu + 2 ^ (2 / 3 )* airyrts* nu^ (1 / 3 ) + 1 / 5 * 2 ^ (4 / 3 )* airyrts.^ 2 * nu^ (- 1 / 3 ) +
213
- (11 / 35 - a^ 2 - 12 / 175 * airyrts.^ 3 ) / nu + (16 / 1575 * airyrts+ 92 / 7875 * airyrts.^ 4 )* 2 ^ (2 / 3 )* nu^ (- 5 / 3 ) -
214
- (15152 / 3031875 * airyrts.^ 5 + 1088 / 121275 * airyrts.^ 2 )* 2 ^ (1 / 3 )* nu^ (- 7 / 3 )))
212
+ x_init = sqrt . (abs . (nu .+ ( 2 ^ (2 / 3 )) . * airyrts. * nu^ (1 / 3 ) .+ ( 1 / 5 * 2 ^ (4 / 3 )) . * airyrts.^ 2. * nu^ (- 1 / 3 ) . +
213
+ (11 / 35 - a^ 2 - 12 / 175 ) . * airyrts.^ 3. / nu . + (( 16 / 1575 ) . * airyrts.+ ( 92 / 7875 ) . * airyrts.^ 4 ). * 2 ^ (2 / 3 ). * nu^ (- 5 / 3 ) . -
214
+ (( 15152 / 3031875 ) . * airyrts.^ 5. + ( 1088 / 121275 ) . * airyrts.^ 2 ). * 2 ^ (1 / 3 ). * nu^ (- 7 / 3 )))
215
215
x_init_airy = real ( flipdim (x_init,1 ) )
216
216
217
217
# Tricomi initial guesses. Equation (2.1) in [1]. Originally in [2].
@@ -223,14 +223,14 @@ nu = (4*m+2*a+2)
223
223
rhs = (4 * m- 4 * collect (1 : m)+ 3 ). / nu* pi
224
224
225
225
for k = 1 : 7
226
- val = Tnk0 - sin (Tnk0) - rhs
227
- dval = 1 - cos (Tnk0)
226
+ val = Tnk0 . - sin . (Tnk0) . - rhs
227
+ dval = 1 . - cos . (Tnk0)
228
228
dTnk0 = val./ dval
229
- Tnk0 = Tnk0 - dTnk0
229
+ Tnk0 = Tnk0 . - dTnk0
230
230
end
231
231
232
- tnk = cos (Tnk0/ 2 ).^ 2
233
- x_init_sin = sqrt (nu* tnk - (5. / (4 * (1 - tnk). ^ 2 ) - 1. / (1 - tnk)- 1 + 3 * a^ 2 )/ 3 / nu)
232
+ tnk = cos . (Tnk0. /2 ).^ 2
233
+ x_init_sin = sqrt . (nu* tnk . - (5. / (4. * (1 - tnk). ^ 2 ) . - 1. / (1. - tnk). - 1. + 3 * a^ 2 ). / 3. / nu)
234
234
235
235
# Patch together
236
236
p = 0.4985 + eps (Float64)
251
251
function hermpts_gw ( n:: Int )
252
252
# Golub--Welsch algorithm. Used here for n<=20.
253
253
254
- beta = sqrt (. 5 * (1 : n- 1 )) # 3-term recurrence coeffs
254
+ beta = sqrt .( 0.5 . * (1 : n- 1 )) # 3-term recurrence coeffs
255
255
T = diagm (beta, 1 ) + diagm (beta, - 1 ) # Jacobi matrix
256
256
(D, V) = eig (T) # Eigenvalue decomposition
257
257
indx = sortperm (D) # Hermite points
@@ -263,4 +263,4 @@ function hermpts_gw( n::Int )
263
263
x = x[ii]
264
264
w = w[ii]
265
265
return (x,w)
266
- end
266
+ end
0 commit comments