Numerical integration involving log(exp(f(x))) shows NaN
4 views (last 30 days)
Show older comments
Hi everyone,
As title mentioned, when I integrated the function log(exp(f(x))) within the range [-100,100], the result showed "-inf"
,but if I changed log(exp(f(x))) into the equivalent form which is f(x), the integral result was a numerical value.
f(x)=-(x^2)/2, btw.
The following code may explain clearly
f1 = @(x) log(exp(-(x.^2)/2));
r1 = integral(f1,-100,100)
f2 = @(x) -(x.^2)/2;
r2 = integral(f2,-100,100)
My question is why does r1 get "-Inf"?
Is there any way to let r1 equal to r2, if f1 has to be the form log(exp(f(x)))?
Thank you very much in advance.
0 Comments
Accepted Answer
Animesh
on 11 Jun 2023
The possible reason for getting r1=-Inf in the expression log(exp(f(x))), is due to the limited precision of floating point numbers. This can cause numeric underflow.
In this case the value of the term exp(-(x.^2)/2) will become very small as the magnitude of x grows large. Eventually the value will become so small that it will get rounded down to zero. This will cause the entire expression to evaluate to -Inf as log of 0 is negative infinity.
A workaround that you could try is using symbolic integration instead of numerical integration. This would allow you to simplify the expression log(exp(f(x))) and evaluate the integral analytically.
syms x;
f = log(exp(-(x.^2)/2));
r = simplify(int(f, x, -100, 100))
3 Comments
wenji
on 9 Sep 2024
Instead using int, is there any way to avoid this limited precision floating point number? i am working with a triple integration so I am afriad i could not simply use int....my function would be like f=@(a,b,c) exp(a)^-1*log(1+exp(a)*b^-2)
More Answers (0)
See Also
Categories
Find more on Numbers and Precision in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!