help-octave
[Top][All Lists]

 From: Maxim Gawrilow Subject: Perform Gauss-broadening on line spectrum Date: Wed, 28 Aug 2019 14:57:38 +0200 User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0

```Dear Octave users,

```
I have created a bunch of spectral lines and would like to simulate the Gaussian broadened spectrum of these. The spectral lines are a Nx2 matrix where the first column contains the position and the second the intensity of each line. What I want is to place a Gaussian at each position, scale it with the appropriate intensity and calculate the sum. In theory, this code would do the job:
```
```
gauss = @(x,x0,Int,sigma) Int./(sigma.*sqrt(2*pi)).*exp(-0.5*((x-x0)./sigma).^2);
```x = linspace (0, 4000, 20000);
outdata = sum(gauss(x,inputdata(:,1),inputdata(:,2),0.8),1);
exportdata = [x', outdata'];

```
However, inputdata contains quite a few lines: at least half a million, sometimes even several dozen million entries. Execution of said code results in "out of memory of dimension too large for Octave's index type". Therefore I'd need a different approach.
```I am able to get the correct result in gnuplot with

plot "inputdata" smooth kdensity bandwidth 0.8

```
but this is extremely slow. Already for half a million entries it takes 5 minutes for a single plot, and will obviously take hours to compute cases with dozens of millions of entries.
```
```
Does anyone have an idea of speeding up this process? I guess convolution with a Gaussian would be a correct approach as well, but I didn't find any function that suits my case (conv only takes equidistant vectors, and I'm a bit of a loss at understanding kernel_density from econometrics).
```
With kind regards, Maxim

--
Maxim Gawrilow
Georg-August-Universität Göttingen
Institut für Physikalische Chemie
AG Suhm

Tammannstr. 6
37077 Göttingen

```