Liealgebrabach
Liealgebrabach

Reputation: 101

Simulating the exponential function with pertubation

for some simulations, I need to make use of an approximation of the exponential function. Now, the problem that I have is that:

function s=expone(N,k)
s=0
for j=1:k
    s=s+(exp(-N+j*log(N)-log(factorial(j))));
end
end

is a pretty stable, in the sense that it is almost 1 for k large enough. However, as soon as N is bigger than 200, it quickly drops to zero. How can I improve that, I need large N. I cannot really change the mathematical why of writing this, since I have an additional pertubation, my final code will look something lie:

function s=expone(N,k)
s=0
for j=1:k
    s=s+(exp(-N+j*log(N)-log(factorial(j))))*pertubation(N,k);
end
end

THe pertubation is between 0 and 1, so that's no problem, but the prefactor seems not to work for N>200. Can anyone help? Thanks a lot!

Upvotes: 0

Views: 58

Answers (1)

daleonpz
daleonpz

Reputation: 581

The function log(x) - x has positive and negative part Graphic in Wolframalpha

while x - log(x!) is negative for x>= 0 Graphic in Wolframalpha

So the problem arise when (N - log(N) ) is much greater than (j - log(j) ). So the solution is to choose a j much bigger than N . Exp(negative) tends to zero

for example expone(20,1) = 7.1907e-05 but expone(20,20) = 0.5591 and expone (20,50) = 1.000

As conclusion, if you want to work with N big, j should be bigger, and as an extra tip you may want to change you function to avoid for loops:

function s = expone(N,k)
j = 1:k;
s = sum ((exp(-N+j*log(N)-log(factorial(j)))));
end

Upvotes: 1

Related Questions