Skip to main content
grammar
Source Link

I can see two possible improvements. As expected with a subject like this, considering these improvements require knowing a little something about the properties of the Kummer confluent hypergeometric function. Thankfully, such knowledge is easily available these days, at sites like the DLMF.

Here they are:

  1. One can use the Kummer transformation

$${}_1 F_1\left({{a}\atop{b}}\mid z\right)=\exp(z)\;{}_1 F_1\left({{b-a}\atop{b}}\mid -z\right)$$

to factor out exponential behavior in β (which only makes the task of finding zeroes on the real axis more difficult). That is,

Hypergeometric1F1[(2 - λ/β)/4, n + 1, β] 

is the same as

Exp[β] Hypergeometric1F1[n + 1 - (2 - λ/β)/4, n + 1, -β] 

and one can remove the Exp[β] factor for root-finding purposes.

Thus, one can write a scaled version of the function whose roots are being sought, like so:

eqScaled[n_, β_, λ_] := Hypergeometric1F1[n + 1 - (2 - λ/β)/4, n + 1, -β] 
  1. Using the asymptotic behavior of Kummer's function for large values of the upper parameter, one can easily develop a better starting approximation for FindRoot[] to polish:

    ED[n_, β_, k_Integer:1] := Block[{λ}, λ /. FindRoot[eqScaled[n, β, λ] == 0, {λ, BesselJZero[n, k]^2 - 2 n β}]]

k is an index for the roots, e.g. k = 1 for the first root.

We can now try Vitaliy's example:

roots = Table[ED[1, 1, k], {k, 10}] {13.0143, 47.552, 101.833, 175.854, 269.615, 383.115, 516.355, 669.334, 842.052, 1034.51} Plot[eqScaled[1, 1, λ], {λ, 0, 1310}, Epilog -> {AbsolutePointSize[4], Red, Point[{#, 0}] & /@ roots}] 

roots of the Kummer function

I can see two possible improvements. As expected with a subject like this, considering these improvements require knowing a little something about the properties Kummer confluent hypergeometric function. Thankfully, such knowledge is easily available these days, at sites like the DLMF.

Here they are:

  1. One can use the Kummer transformation

$${}_1 F_1\left({{a}\atop{b}}\mid z\right)=\exp(z)\;{}_1 F_1\left({{b-a}\atop{b}}\mid -z\right)$$

to factor out exponential behavior in β (which only makes the task of finding zeroes on the real axis more difficult). Thus one can write a scaled version of the function whose roots are being sought, like so:

eqScaled[n_, β_, λ_] := Hypergeometric1F1[n + 1 - (2 - λ/β)/4, n + 1, -β] 
  1. Using the asymptotic behavior of Kummer's function for large values of the upper parameter, one can easily develop a better starting approximation for FindRoot[] to polish:

    ED[n_, β_, k_Integer:1] := Block[{λ}, λ /. FindRoot[eqScaled[n, β, λ] == 0, {λ, BesselJZero[n, k]^2 - 2 n β}]]

k is an index for the roots, e.g. k = 1 for the first root.

We can now try Vitaliy's example:

roots = Table[ED[1, 1, k], {k, 10}] {13.0143, 47.552, 101.833, 175.854, 269.615, 383.115, 516.355, 669.334, 842.052, 1034.51} Plot[eqScaled[1, 1, λ], {λ, 0, 1310}, Epilog -> {AbsolutePointSize[4], Red, Point[{#, 0}] & /@ roots}] 

roots of the Kummer function

I can see two possible improvements. As expected with a subject like this, considering these improvements require knowing a little something about the properties of the Kummer confluent hypergeometric function. Thankfully, such knowledge is easily available these days, at sites like the DLMF.

Here they are:

  1. One can use the Kummer transformation

$${}_1 F_1\left({{a}\atop{b}}\mid z\right)=\exp(z)\;{}_1 F_1\left({{b-a}\atop{b}}\mid -z\right)$$

to factor out exponential behavior in β (which only makes the task of finding zeroes on the real axis more difficult). That is,

Hypergeometric1F1[(2 - λ/β)/4, n + 1, β] 

is the same as

Exp[β] Hypergeometric1F1[n + 1 - (2 - λ/β)/4, n + 1, -β] 

and one can remove the Exp[β] factor for root-finding purposes.

Thus, one can write a scaled version of the function whose roots are being sought, like so:

eqScaled[n_, β_, λ_] := Hypergeometric1F1[n + 1 - (2 - λ/β)/4, n + 1, -β] 
  1. Using the asymptotic behavior of Kummer's function for large values of the upper parameter, one can easily develop a better starting approximation for FindRoot[] to polish:

    ED[n_, β_, k_Integer:1] := Block[{λ}, λ /. FindRoot[eqScaled[n, β, λ] == 0, {λ, BesselJZero[n, k]^2 - 2 n β}]]

k is an index for the roots, e.g. k = 1 for the first root.

We can now try Vitaliy's example:

roots = Table[ED[1, 1, k], {k, 10}] {13.0143, 47.552, 101.833, 175.854, 269.615, 383.115, 516.355, 669.334, 842.052, 1034.51} Plot[eqScaled[1, 1, λ], {λ, 0, 1310}, Epilog -> {AbsolutePointSize[4], Red, Point[{#, 0}] & /@ roots}] 

roots of the Kummer function

Source Link

I can see two possible improvements. As expected with a subject like this, considering these improvements require knowing a little something about the properties Kummer confluent hypergeometric function. Thankfully, such knowledge is easily available these days, at sites like the DLMF.

Here they are:

  1. One can use the Kummer transformation

$${}_1 F_1\left({{a}\atop{b}}\mid z\right)=\exp(z)\;{}_1 F_1\left({{b-a}\atop{b}}\mid -z\right)$$

to factor out exponential behavior in β (which only makes the task of finding zeroes on the real axis more difficult). Thus one can write a scaled version of the function whose roots are being sought, like so:

eqScaled[n_, β_, λ_] := Hypergeometric1F1[n + 1 - (2 - λ/β)/4, n + 1, -β] 
  1. Using the asymptotic behavior of Kummer's function for large values of the upper parameter, one can easily develop a better starting approximation for FindRoot[] to polish:

    ED[n_, β_, k_Integer:1] := Block[{λ}, λ /. FindRoot[eqScaled[n, β, λ] == 0, {λ, BesselJZero[n, k]^2 - 2 n β}]]

k is an index for the roots, e.g. k = 1 for the first root.

We can now try Vitaliy's example:

roots = Table[ED[1, 1, k], {k, 10}] {13.0143, 47.552, 101.833, 175.854, 269.615, 383.115, 516.355, 669.334, 842.052, 1034.51} Plot[eqScaled[1, 1, λ], {λ, 0, 1310}, Epilog -> {AbsolutePointSize[4], Red, Point[{#, 0}] & /@ roots}] 

roots of the Kummer function