normpdf is taking zeros

조회 수: 4 (최근 30일)
hey yo
hey yo 2021년 9월 25일
댓글: hey yo 2021년 9월 25일
Hello, I am using the normpdf command to evaluate a function in MATLAB. When the argument of normpdf is too small, MATLAB reports a zero. Is is possible to get the exact value of normpdf instead of 0?
  댓글 수: 2
David Hill
David Hill 2021년 9월 25일
normpdf(-38);%this reports 1.097221051994971e-314, you want smaller than this?
hey yo
hey yo 2021년 9월 25일
Yes, for example normpdf(-77) returns 0. It is important for me to get the exact number because I multiply this value with other numbers to find the solution to a complicated function. Thank you.

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

채택된 답변

John D'Errico
John D'Errico 2021년 9월 25일
편집: John D'Errico 2021년 9월 25일
No. At least, not in double precision. The "exact" value there is impossible to represent in a double precision number.
The normal pdf at z = -77 should be:
mu = 0;
sig = 1;
x = sym(-77);
p = exp(-(x-mu).^2/sig^2/2)*1/(sig*sqrt(2*sym('pi')))
p = 
vpa(p)
ans = 
Do you understand this is a number with around 1288 zeros after the decimal point, before you see any digits?
As such, the result underflows in double precision. You get ZERO.
realmin
ans = 2.2251e-308
Actually, you can go about as far as -38 or so, before an underflow occurs, with the result as what is known as a denormalized number. But that is around the limit. And even most computations with those numbers at that level will still yield numerical garbage.
normpdf(-38)
ans = 1.0972e-314
You can want what you want, but this is not possible working in double precision. If you are willing to use higher precision tools, such as syms, then yes, you can.
  댓글 수: 1
hey yo
hey yo 2021년 9월 25일
Thank you for taking the time to post this reply. It is very valuable.

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

추가 답변 (0개)

태그

Community Treasure Hunt

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

Start Hunting!

Translated by