<p><strong>Note:</strong> This is a more of a comment, but it was too long to fit in the comments section. </p>

<p>Matlab does not necessarily provide the fastest means of generating random numbers. One extreme case is the binomial random variable, which matlab generates through drawing <code>n</code> Bernoulli numbers and summing them together. Your example is simply another case. </p>

<p>I suggest you either </p>

<ul>
<li><p>implement a sampling yourself, thus you can tweak it for your needs,</p></li>
<li><p>or use the one by Chopin, see the paper <a href="https://arxiv.org/abs/1201.6140" rel="nofollow noreferrer">here</a>, which you can get <a href="http://miv.u-strasbg.fr/mazet/rtnorm/rtnormM.zip" rel="nofollow noreferrer">here</a>, which is (to my knowledge) the newest such algorithms</p></li>
</ul>

<p>Please note, that even though "truncating" sounds like it is making things easier/faster this is not necesarrily the case. Especially nowadays where there exist very fast generators for the normal distribution. On the other hand, the x1000 is too large of a penalty, compared to better methods.</p>
Why is random number generation from a kernel distribution up to 1000x slower if truncated?
<p>I would prefer to truncate my Distribution, but at the moment it is simply not possible given the time penalty.</p>

<p>Standard Kernel Distribution:</p>

<pre><code>expectation=fitdist(BTS,'kernel');
</code></pre>

<p>Result:</p>

<pre><code>tic;expectation.random(10000,1);toc;
Elapsed time is 0.000745 seconds.
</code></pre>

<p>Truncate Code:</p>

<pre><code>Exp{i,j}=truncate(expectation,min(BTS)-1,max(BTS)+1);
</code></pre>

<p>Result:</p>

<pre><code>tic;random(Exp{i,j},1,10000);toc
Elapsed time is 0.772295 seconds.
</code></pre>