# Numerical integration and NaN

조회 수: 5 (최근 30일)
James 2011년 5월 11일
I want to calculate the following integral:
integral( pdf(data_one) / pdf(data_two) )
I managed to do this, but I had to resort to a hack to avoid divisions by zero. This hack works but creates deviations that annoy me - what is the proper way to do this?
data_axis = 1:5;
data_one = [1,2,3,4,5];
data_two = [1,1,1,1,5];
% Calculate probability densities
pdf_one = histc(data_one,data_axis); % [0.2,0.2,0.2,0.2,0.2]
pdf_two = histc(data_two,data_axis); % [0.8,0.0,0.0,0.0,0.2]
% HACK: Histc may have generated 0-buckets
%pdf_one = (pdf_one + 0.1);
%pdf_two = (pdf_two + 0.1);
% Normalize the result
pdf_one = pdf_one./sum(pdf_one);
pdf_two = pdf_two./sum(pdf_two);
complicated_integral = trapz(pdf_one./pdf_two);

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

### 답변 (1개)

Walter Roberson 2011년 5월 11일
Probability Density is not defined for discrete distributions.
Not every probability distribution has a density function: the distributions of discrete random variables do not; nor does the Cantor distribution, even though it has no discrete component, i.e., does not assign positive probability to any individual point.
and
If a probability distribution admits a density, then the probability of every one-point set {a} is zero; the same holds for finite and countable sets.
This implies that you are asking to calculate something which is not defined, or else that your calculation is incorrect, perhaps attempting to sample the counts at a point rather than over a range.
##### 댓글 수: 5이전 댓글 3개 표시이전 댓글 3개 숨기기
Richard Crozier 2011년 5월 18일
If you know what the underlying form of the pdf of the data from some scientific knowledge of the system from which you have sampled the data, could you not fit the distribution to the datasets and integrate the resulting continuous functions? Of course the accuracy of this is doubtful for some distributions, e.g. an exponential distribution.
James 2011년 5월 18일
That is a nice idea which I will have to implement anyways for other parts of the project.
Though I fear that in this case, it would ultimately not solve my problem. My main problem currently comes from the fact that I am doing this:
pdf_one./pdf_two
= [0.2,0.2,0.2,0.2,0.2] ./ [0.8,0.0,0.0,0.0,0.2]
= [0.2500, Inf, Inf, Inf, 1.0000]
And then try to trapezoid-integrate over it, which is pretty stupid. Whenever there is no probability of a value appearing in said pdf_two (=0), I am diving by zero.

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

### 카테고리

Help CenterFile Exchange에서 Numerical Integration and Differentiation에 대해 자세히 알아보기

### Community Treasure Hunt

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

Start Hunting!

Translated by