comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: Array Integration
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Re: Array Integration [message #80814] Fri, 13 July 2012 20:01
Maryam is currently offline  Maryam
Messages: 16
Registered: July 2012
Junior Member
Yes, it should be W[i], but I don't think I got it right:


pro ind_intg

delta=1.0
W=[0.0212330,0.0424661,0.127398,0.212330,0.297263,0.424661,0 .530826,0.636991,0.743157,0.849322,0.955487,1.06165,1.16782, 1.27398]

num_elements=n_elements(W)

P = fltarr(num_elements)

for i = 0, num_elements-1 do begin
P[i] = {w:w[i], delta:delta}
my_expression = '((2.*!pi*(P.delta)^4) * x * (1+(P.delta)^2*x^2)^(-3) * exp(-(P.w)^2*x^2) )'
endfor

A = fltarr(num_elements)

for i = 0, num_elements-1 do begin
A[i] = qpint1d(my_expression, /expression, 0, +Inf, P)
endfor
print, A


stop
END
Re: Array Integration [message #80815 is a reply to message #80814] Fri, 13 July 2012 19:35 Go to previous message
Craig Markwardt is currently offline  Craig Markwardt
Messages: 1869
Registered: November 1996
Senior Member
On Friday, July 13, 2012 10:26:16 PM UTC-4, Maryam wrote:
> delta stays the same, but you are right about "W".
>
> I know how to do this if W was an integer, not an array. I would simply define a function and then use the QROMO command to find the value of the integral for a specific "W", but I don't know how to do this if W is an array. I tried to use the common block, but it doesn't work. I appreciate your help.

You mean like this?
P = {w:w[i], delta:delta}
Re: Array Integration [message #80816 is a reply to message #80815] Fri, 13 July 2012 19:26 Go to previous message
Maryam is currently offline  Maryam
Messages: 16
Registered: July 2012
Junior Member
delta stays the same, but you are right about "W".

I know how to do this if W was an integer, not an array. I would simply define a function and then use the QROMO command to find the value of the integral for a specific "W", but I don't know how to do this if W is an array. I tried to use the common block, but it doesn't work. I appreciate your help.
Re: Array Integration [message #80817 is a reply to message #80816] Fri, 13 July 2012 19:04 Go to previous message
Craig Markwardt is currently offline  Craig Markwardt
Messages: 1869
Registered: November 1996
Senior Member
On Friday, July 13, 2012 5:01:49 PM UTC-4, Maryam wrote:
> Thank you, Sir, for your quick reply. I tried the following which produces a 14 element array of NaN's...:
...
> P = {w:w, delta:delta}


I'm guessing you want to make a new "P" for each loop iteration, with W[i] (and delta[i]?).
Re: Array Integration [message #80822 is a reply to message #80817] Fri, 13 July 2012 14:01 Go to previous message
Maryam is currently offline  Maryam
Messages: 16
Registered: July 2012
Junior Member
Thank you, Sir, for your quick reply. I tried the following which produces a 14 element array of NaN's...:



pro ind_intg

delta=1.0
W=[0.0212330,0.0424661,0.127398,0.212330,0.297263,0.424661,0 .530826,0.636991,0.743157,0.849322,0.955487,1.06165,1.16782, 1.27398]

P = {w:w, delta:delta}
my_expression = '((2.*!pi*(P.delta)^4) * x * (1+(P.delta)^2*x^2)^(-3) * exp(-(P.w)^2*x^2) )'

num_elements=n_elements(W)
A = fltarr(num_elements)

for i = 0, num_elements-1 do begin
A[i] = qpint1d(my_expression, /expression, 0, +inf, P)
endfor

print, A

stop
END
Re: Array Integration [message #80828 is a reply to message #80822] Fri, 13 July 2012 12:45 Go to previous message
Craig Markwardt is currently offline  Craig Markwardt
Messages: 1869
Registered: November 1996
Senior Member
On Friday, July 13, 2012 2:51:01 PM UTC-4, Maryam wrote:
> Hello.
>
> I am trying to perform a numerical integration in IDL where one of my variables is an array. Here is what I wrote:
>
> pro ind_intg
>
> delta=1.0
> W=[0.0212330,0.0424661,0.127398,0.212330,0.297263,0.424661,0 .530826,0.636991,0.743157,0.849322,0.955487,1.06165,1.16782, 1.27398]
> num_elements=14
> A = fltarr(num_elements)
> for i = 0, num_elements-1 do begin
> A(i) = qpint1d('((2.*!pi*deltan^4) * x * (1+deltan^2*x^2)^(-3) * exp(-wn^2*x^2) )', $
> /expression, 0., +inf)
> endfor
> print, A
>
> stop
> end
>
>
> But I get the following error message:
>
> % QPINT1D: USAGE:
> % QPINT1D: G = QPINT1D(FUNCNAME, A, B, $
> % QPINT1D: [EPSABS=, EPSREL=, ERROR=, STATUS=])
> % QPINT1D: (or)
> % QPINT1D: G = QPINT1D(EXPR, A, B, /EXPRESSION, $
> % QPINT1D: [EPSABS=, EPSREL=, ERROR=, STATUS=])
> NaN NaN NaN NaN NaN NaN NaN NaN NaN
> NaN NaN NaN NaN NaN
>
>
> Can anyone please let me know where I could be making a mistake? Thanks...

You need to pass PRIVATE data to your expression. At the time QPINT1D evaluates your expression, it doesn't know about DELTAN or WN.

Try this instead,
P = {wn:wn, deltan:deltan}
my_expression = '((2.*!pi*(P.deltan)^4) * x * (1+(P.deltan)^2*x^2)^(-3) * exp(-(P.wn)^2*x^2) )'
A[i] = qpint1d(my_expression, /expression, 0, +inf, P, ...)
Here "P" is the PRIVATE variable.

Craig
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Re: Contour Plot Issues
Next Topic: serial.dll for serial port under IDL

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 15:36:47 PDT 2025

Total time taken to generate the page: 0.00506 seconds