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

조회 수: 2 (최근 30일)
YI-WEN PAN
YI-WEN PAN 2023년 6월 11일
편집: Torsten 2024년 9월 9일
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.

채택된 답변

Animesh
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
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)
Torsten
Torsten 2024년 9월 9일
편집: Torsten 2024년 9월 9일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

태그

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by