MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Marcum Q function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg25567] Re: [mg25526] Marcum Q function
  • From: BobHanlon at aol.com
  • Date: Sat, 7 Oct 2000 03:36:15 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

In a message dated 10/6/2000 12:29:24 AM, a.coccoli at guest.cnuce.cnr.it writes:

>I am trying to evaluate the Marcum Q function with Mathematica, but I am
>finding some problems. I would like to know if you could suggest me the
>right way to do it. (any suggestion to on-line papers about this problem
>are well accepted too).
>

MarcumQ::"usage" = 
    "MarcumQ[a, b] is the Marcum Q-function. \n\
MarcumQ[m,\[NonBreakingSpace]a,\[NonBreakingSpace]b] is the generalized \
Marcum Q-function. \nMarcumQ[a,\[NonBreakingSpace]b]\[NonBreakingSpace]=\
\[NonBreakingSpace]MarcumQ[1,\[NonBreakingSpace]a,\[NonBreakingSpace]b].  \n\
[Harry L. Van Trees; Detection, Estimation, and Modulation Theory; \nWiley, \
New York; 1968; pp. 394-395, 411]";

Unprotect[MarcumQ]; 

MarcumQ::invparam = "Invalid parameter.  `1` parameter must be `2`. Called 
with parameter = `3`"; 

MarcumQ[m_:1, a_, b_] /; m < 1/2 := Message[MarcumQ::invparam, "m", ">= 1/2", 
m]; 
MarcumQ[m_:1, a_, b_] /; Negative[a] := Message[MarcumQ::invparam, "a", 
"nonnegative", a]; 
MarcumQ[m_:1, a_, b_] /; Negative[b] := Message[MarcumQ::invparam, "b", 
"nonnegative", b]; 
MarcumQ[m_:1, a_, b_ /; b == 0] := 1; 
MarcumQ[m_:1, a_, Infinity] := 0; 
MarcumQ[m_:1, a_ /; a == 0, b_] := GammaRegularized[m, b^2/2]; 
MarcumQ[m_ /; m == 1, a_, b_] := MarcumQ[a, b]; 
MarcumQ[a_ /; NonNegative[a], a_] := 1/2*(1 + Exp[-a^2]*BesselI[0, a^2]); 
MarcumQ/: MarcumQ[a_, b_] + MarcumQ[b_, a_] := 1 + Exp[-(1/2)*(a^2 + 
b^2)]*BesselI[0, a*b]; 
MarcumQ[(a_)?NumericQ, (b_)?NumericQ] := 
    NIntegrate[x*Exp[-(1/2)*(a^2 + x^2)]*BesselI[0, a*x], {x, b, Infinity}]; 
MarcumQ[(m_)?NumericQ, (a_)?NumericQ, (b_)?NumericQ] := 
    NIntegrate[x*(x/a)^(m - 1)*Exp[-(1/2)*(a^2 + x^2)]*
    BesselI[m - 1, a*x], {x, b, Infinity}]; 

Derivative/: Derivative[0, 0, 1][MarcumQ][m_, a_, b_] := -b^m*a^(1 - 
m)*Exp[-(1/2)*(a^2 + b^2)]*
     BesselI[m - 1, a*b]; 
Derivative/: Derivative[0, 1][MarcumQ][a_, b_] := -b*Exp[-(1/2)*(a^2 + 
b^2)]*BesselI[0, a*b]; 

Protect[MarcumQ]; 

Table[Plot3D[MarcumQ[m, a, b], {a, 0, 4}, {b, 0, 5}, 
      ViewPoint -> {-2.148, -2.156, 1.479}], {m, 1/2, 7/2, 3/2}];


Bob Hanlon


  • Prev by Date: Re: Mathlink
  • Next by Date: Re: ? D[f,{x,n}]
  • Previous by thread: Marcum Q function
  • Next by thread: Graphic Size