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

Home » Public Forums » archive » Convolution of Stick Spectra
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: Convolution of Stick Spectra [message #21739 is a reply to message #21722] Sun, 17 September 2000 00:00 Go to previous messageGo to previous message
Craig Markwardt is currently offline  Craig Markwardt
Messages: 1869
Registered: November 1996
Senior Member
mole6e23@hotmail.com (Todd Clements) writes:

> craigmnet@cow.physics.wisc.edu wrote:
>
>> After looking at your problem it looks like the widths of the lines
>> are as wide as your energy range. I guess this would be appropriate
>> [snip..]
>> so many exponentiations. You could have gotten a pretty big savings
>> if the lines were narrow, and you could restrict the computation to a
>> narrow region around the line center (say +/- 10 sigma with WHERE). I
>> recommend that anyway to get rid of underflow errors.
>> [snip..]
>> If for example your sigma term were
>> (((.12*sqrt(stick[0,i]/1000))/1.6651)*10) [ note the last factor is
>> smaller ] then things start to look interesting.
>
> That's because there's always a danger in taking code x and modifying it
> into simpler example y! As you suggested, I actually DO have a sigma term
> with a *10 instead of a *1000.
>
> I did what you suggested with the +/- 10*sigma with where (code below),
> and it drastically improved running time. For the 5000 element array, the
> running time went from 62.3 seconds to 4.9 seconds! I plot the error
> associated with the method, and I was actually able to go down to +/-
> 4*sigma before there was any noticable error.
>
> Thanks!
> Todd

You're welcome. But call me a pedant too. You can save yet more
computations by precomputing the gaussian argument.

Craig

xx = convoluted(0,*)
yy = convoluted(1,*)
for i = 0L, n_elements(stick)/2 -1 do begin
z1 = (xx-stick(0,i))/(((.12*sqrt(stick[0,i]/1000))/1.6651)*10)^2
wh = where(z1 LT (2.*4^2), ct) ;; Four sigma (remember the 1/2!)
if ct GT 0 then yy(wh) = yy(wh) + stick(1,i)*exp(-z1)
endfor
convoluted(1,*) = yy

I hope I got it all right, but you get the idea. By the way, as I
note above, the definition of the gaussian is exp(-x^2/(2*sigma^2)).
Is the 1/2 buried somewhere in your definition?

--
------------------------------------------------------------ --------------
Craig B. Markwardt, Ph.D. EMAIL: craigmnet@cow.physics.wisc.edu
Astrophysics, IDL, Finance, Derivatives | Remove "net" for better response
------------------------------------------------------------ --------------
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: cw_defroi for true color displays
Next Topic: Re: object graphic / direct graphic

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

Current Time: Fri Oct 10 22:47:39 PDT 2025

Total time taken to generate the page: 0.55963 seconds