Numerical integration involving log(exp(f(x))) shows NaN
4 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Animesh
2023-6-11
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 个评论
wenji
2024-9-9
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)
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Numbers and Precision 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!