a problem while using an anonymous function
1 view (last 30 days)
Show older comments
Eliraz Nahum
on 10 Oct 2018
Commented: Eliraz Nahum
on 11 Oct 2018
hello,
I can't understand what's wrong. I will appreciate any help. I have a problem while trying to using the integral function with the handle of an anonymous function. I am adding a photo of the output error.
clear all
close all
clc
lamda=5;
x=[1:1:30];
p=zeros(1,length(x));
poiss_PDF=zeros(1,length(x));
poiss_int=zeros(1,length(x));
step=0;
poiss_pdf=@(x) (1/factorial(x))*(lamda^x)*exp(-lamda);
for x_i=x
step=step+1;
p(step)=poiss_pdf(x_i);
poiss_PDF(step)=poisspdf(x_i,lamda);
poiss_int(step)=integral(poiss_pdf,x(1),x(end));
end
plot(x,p,'b')
title (['Poisson PDF (calculated) with the parameter lamda= ',num2str(lamda)])
xlabel('x')
ylabel ('Distribution')
xlim([x(1) x(end)])
hold on
plot (lamda,poiss_pdf(lamda),'dr')
figure
plot(x,poiss_PDF,'g')
title (['Poisson PDF (from Matlab) with the parameter lamda= ',num2str(lamda)])
xlabel('x')
ylabel ('Distribution')
xlim([x(1) x(end)])
hold on
plot (lamda,poisspdf(lamda,lamda),'dr')
figure
plot(x,poiss_int,'k')
title (['Poisson integral (calculated) with the parameter lamda= ',num2str(lamda)])
xlabel('x')
ylabel ('Probability')
xlim([x(1) x(end)])
hold on
plot (lamda,poiss_pdf(lamda),'dr')
2 Comments
Bruno Luong
on 10 Oct 2018
Why you are using integral to handle discrete PDF like Poisson? For discrete you need to do a sum.
Or transform the discrete PDF to a sum of weighted dirac, not sur integral can handle though.
Accepted Answer
the cyclist
on 10 Oct 2018
Edited: the cyclist
on 10 Oct 2018
Replace
poiss_pdf=@(x) (1/factorial(x))*(lamda^x)*exp(-lamda);
with
poiss_pdf=@(x) (1./gamma(x+1)).*(lamda.^x).*exp(-lamda);
and your code will execute to completion. I did not try to figure out if the output is sensible.
Note that I did two things here:
- Replaced your factorial with the appropriate gamma function
- Used element-wise operations in the function, which I'm pretty sure is what you intended
3 Comments
the cyclist
on 10 Oct 2018
Edited: the cyclist
on 10 Oct 2018
Because internally, the integral function creates a vector from x(1) to x(end), and evaluates your function using that vector.
More Answers (1)
Jos (10584)
on 10 Oct 2018
You do not show the whole error message!
But I also assume that the problem is indeed in the use of factorial inside the function poiss_pdf that is being passed to integral. The function factorial(x) is only defined for integer values of x. You can use gamma(x+1) instead. See the documentation of gamma for more details.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!