Numerical integration involving log(exp(f(x))) shows NaN

2 Ansichten (letzte 30 Tage)
YI-WEN PAN
YI-WEN PAN am 11 Jun. 2023
Bearbeitet: Torsten am 9 Sep. 2024
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)
Warning: Inf or NaN value encountered.
r1 = -Inf
f2 = @(x) -(x.^2)/2;
r2 = integral(f2,-100,100)
r2 = -3.3333e+05
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.

Akzeptierte Antwort

Animesh
Animesh am 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 Kommentare
wenji
wenji am 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)
Torsten
Torsten am 9 Sep. 2024
Bearbeitet: Torsten am 9 Sep. 2024
If you state your problem properly (what is c ? what are the limits of integration ?) - preferably in a new question - maybe someone will be able to help.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu MATLAB finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by