Asked by Eliraz Nahum
on 10 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')

Answer by the cyclist
on 10 Oct 2018

Edited by the cyclist
on 10 Oct 2018

Accepted Answer

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

Eliraz Nahum
on 10 Oct 2018

the cyclist
on 10 Oct 2018

Eliraz Nahum
on 11 Oct 2018

Ok, understood now. Thanks

Sign in to comment.

Answer by 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.

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 2 Comments

## jonas (view profile)

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/423316-a-problem-while-using-an-anonymous-function#comment_620549

## Bruno Luong (view profile)

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/423316-a-problem-while-using-an-anonymous-function#comment_620590

Sign in to comment.