Re: Why this function does not return a single value
- To: mathgroup at smc.vnet.net
- Subject: [mg60195] Re: Why this function does not return a single value
- From: Marek <marekbr at gmail.com>
- Date: Wed, 7 Sep 2005 04:03:53 -0400 (EDT)
- References: <dfiv9c$p99$1@smc.vnet.net> <dfj9h7$rga$1@smc.vnet.net>
- Reply-to: marekbr at gmail.com
- Sender: owner-wri-mathgroup at wolfram.com
Hi Paul
Thanks for reply. I do not understand Your comments fully yet but let me
read up on stuff. For now I have only one thing to say. Those
multiplication signs appear out of nowhere when I convert the call with
function definition from Input Form to Standard Form. I can remove the m
while in Standard form but as soon as I execute this cell (or convert it to
Standard Form) they reappear.
Is that the way it is suppose to be?
Marek
Paul Abbott wrote:
> In article <dfiv9c$p99$1 at smc.vnet.net>,
> Marek Bromberek <marek at chopin.physics.mun.ca> wrote:
>
>> I was wondering if somebody could tell me what am I doing wrong here.
>
> A number of things:
>
> [1] The syntax is incorrect. You cannot use (a[1]*_)?NumericQ. This
> means a[1] times a blank, which is not what you intend.
>
> If you enter
>
> (x_)?NumericQ // FullForm
>
> and
>
> (a[1]*_)?NumericQ // FullForm
>
> you will see the difference.
>
> [2] A much better syntax is to define a test for numerical lists, say
>
> num[c_List] := And @@ (NumericQ /@ c)
>
> and then use it in your definition, say
>
> VoigtSum[x_?NumericQ, a_List?num, b_List?num, ...] := ...
>
>> I am constructing a function (for fitting purposes) which is a sum of 15
>> Voigt functions + one Gaussian peak and and exponential background.
>> However when I want to check if that function works and try to evaluate
>> it it does not return a value.
>
> [3] There is no need to restrict attention to 15 Voight functions or to
> test the length of each list. Now your arguments are lists, instead
> write your definition so that it works for _any_ number of Voight
> functions (mapping the function over the lists of arguments), and use
> the last two elements of the lists a, b, and \[Delta]G to give the
> Gaussian peak and exponential background, i.e.,
>
> a[[-2]] Exp[(-Log[2]) ((x - b[[-2]])^2/\[Delta]G[[-2]]^2)] +
>
> a[[-1]] Exp[-x/b[[-1]]]
>
> [4] You have
>
>> Sum[a[i]*((2.*Log[2.]*\[Delta]L[i])/(N[Pi^(3/2)]*\[Delta]G[i]))*
>> NIntegrate[Exp[-t^2]/((Sqrt[Log[2.]]*(\[Delta]L[i]/\[Delta]G[i]))^2
>> +
>> (Sqrt[4.*Log[2.]]*((x - b[i])/\[Delta]G[i]) - t)^2), {t,
>> -Infinity,
>> Infinity}], {i, 1, 15}] +
>> a[16]*Exp[(-Log[2.])*((x - b[16])^2/\[Delta]G[16]^2)] +
>> a[17]*Exp[-x/b[17]]
>
> There is no need -- and it is usually a bad idea -- to numericalize
> constants. Since you are computing a numerical integral, all exact
> numerical values will be coerced to numerical ones (of the same
> precision). Try entering
>
> 2. Pi
>
> to see what I mean.
>
> [5] Although Mathmatica cannot compute your integral directly,
>
> Integrate[Exp[-t^2]/((Sqrt[Log[2.]] (\[Delta]L[i]/\[Delta]G[i]))^2 +
> (Sqrt[4.*Log[2.]]*((x - b[i])/\[Delta]G[i]) - t)^2),
> {t, -Infinity, Infinity}]
>
> or the equivalent integral
>
> Integrate[Exp[-t^2]/(a^2 + (b - t)^2), {t, -Infinity, Infinity}]
>
> it is possible to compute this in closed form (at least for a and b
> real). I get
>
> int[a_, b_] = -((1/(2 a)) (I (((-I) Pi Erf[a + I b] -
> Log[1/(I a - b)] + Log[1/(b - I a)])/E^(b - I a)^2 -
> (I Pi Erf[a - I b] - Log[-(1/(I a + b))] + Log[1/(I a + b)])/
> E^(I a + b)^2)))
>
> Although this involves I, numerical evaluation for real a and b (to any
> desired precision, followed by Chop, yields the same answer as
>
> nint[a_, b_, opts___] := NIntegrate[Exp[-t^2]/(a^2 + (b - t)^2),
> {t, -Infinity, Infinity}, opts]
>
> For example,
>
> nint[2,3]
> 0.14563
>
> int[2.,3.]//Chop
> 0.14563
>
> nint[2,3,WorkingPrecision->30]
> 0.14562973135699681308
>
> int[2`30,3`30]//Chop
> 0.1456297313569968130774404707
>
> Cheers,
> Paul
>
> _______________________________________________________________________
> Paul Abbott Phone: 61 8 6488 2734
> School of Physics, M013 Fax: +61 8 6488 1014
> The University of Western Australia (CRICOS Provider No 00126G)
> AUSTRALIA http://physics.uwa.edu.au/~paul