a problem while using an anonymous function

1 回表示 (過去 30 日間)
Eliraz Nahum
Eliraz Nahum 2018 年 10 月 10 日
コメント済み: Eliraz Nahum 2018 年 10 月 11 日
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 件のコメント
jonas
jonas 2018 年 10 月 10 日
編集済み: jonas 2018 年 10 月 10 日
The problem is that factorial only works for integers, so your function is only defined in those points. This is not my field of expertise, but wikipedia tells me you can use a gamma-function instead.
Bruno Luong
Bruno Luong 2018 年 10 月 10 日
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.

サインインしてコメントする。

採用された回答

the cyclist
the cyclist 2018 年 10 月 10 日
編集済み: the cyclist 2018 年 10 月 10 日
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 件のコメント
the cyclist
the cyclist 2018 年 10 月 10 日
編集済み: the cyclist 2018 年 10 月 10 日
Because internally, the integral function creates a vector from x(1) to x(end), and evaluates your function using that vector.
Eliraz Nahum
Eliraz Nahum 2018 年 10 月 11 日
Ok, understood now. Thanks

サインインしてコメントする。

その他の回答 (1 件)

Jos (10584)
Jos (10584) 2018 年 10 月 10 日
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.

カテゴリ

Help Center および File ExchangeEntering Commands についてさらに検索

製品


リリース

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by