distribution of function of random variables

Is there a general MATLAB method to calculate the expected value of a function of random variable?
For instance, if I have 3 random variables with known Probability density functions:
X with Probability density function f1 = @(x,sigma,mu) 1./sqrt(2*pi*sigma.^2).*exp(-(x-mu).^2./(2*sigma.^2));
Y with Probability density function f2 = @(y,sigma,mu) 1./sqrt(2*pi*sigma.^2).*exp(-(y-mu).^2./(2*sigma.^2));
Z with probabilty density function f2 = @(z,sigma,mu) 1./sqrt(2*pi*sigma.^2).*exp(-(z-mu).^2./(2*sigma.^2));
f1 f2 f3 Could be any function included uniform distributions.
Now I Have a big function F(X,Y,Z)
F= @(x,y,z) sqrt(x^2+y^2)*z^2
Is there a way to compute say the expected value of F(X,Y,Z) and to plot its numerically calculated Probability density function
Something like like:
Expected_value=unknow_matlabfunction(f1,f2,f3,F)
Thanks for any ideas.
Pierre
Here are my tootbox:
MATLAB Version 9.2 (R2017a)
Curve Fitting Toolbox Version 3.5.5 (R2017a)
Database Toolbox Version 7.1 (R2017a)
Image Processing Toolbox Version 10.0 (R2017a)
MATLAB Compiler Version 6.4 (R2017a)
MATLAB Compiler SDK Version 6.3.1 (R2017a)
Neural Network Toolbox Version 10.0 (R2017a)
Signal Processing Toolbox Version 7.4 (R2017a)
Statistics and Machine Learning Toolbox Version 11.1 (R2017a)

댓글 수: 2

Torsten
Torsten 2019년 4월 29일
Is there a general MATLAB method to calculate the expected value of a function of random variable?
No. Not even a general mathematical method.
Pierre Allain
Pierre Allain 2019년 4월 29일
편집: Pierre Allain 2019년 4월 29일
@Torsten How can you be so categorical? Is it a known unknown in Math? It seems to be a "classical" problem though.
After researching online, there seems to be some methods with Jacobians but I don't know if MATLAB implemented it in an automatic manner.

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

답변 (1개)

Jeff Miller
Jeff Miller 2019년 4월 30일

0 개 추천

In principle you can do this numerically for many distributions f1,f2,f3, and many functions F with the routines in Cupid at https://github.com/milleratotago/Cupid
The general approach is to build up the complex distribution step by step, which would look something like this for your example:
f1=Normal(10,1);
f2=Uniform(0,1);
f3=Beta(6,9);
f1sqr = PowerTrans(f1,2);
f2sqr = PowerTrans(f2,2);
f3sqr = PowerTrans(f3,2);
sumf1sqrf2sqr=Convolution(f1sqr,f2sqr);
sqrtsumf1sqrf2sqr=SqrtTrans(sumf1sqrf2sqr);
sqrtsumf1sqrf2sqr.UseSplineCDFOn(100);
sqrtsumf1sqrf2sqr.UseSplinePDFOn(100);
BigFun = Product(sqrtsumf1sqrf2sqr,f3sqr);
BigFun.Mean
BigFun.LowerBound
BigFun.UpperBound
BigFun.Median
BigFun.PlotDens
To increase speed, you would probably want to use spline approximations for some distributions, e.g.
sqrtsumf1sqrf2sqr.UseSplineCDFOn(100);
sqrtsumf1sqrf2sqr.UseSplinePDFOn(100);
In practice the numerical problems might be insurmountable, depending on your original f1, f2, and f3, and your F, but it might be worth a try.

제품

릴리스

R2017a

질문:

2019년 4월 29일

답변:

2019년 4월 30일

Community Treasure Hunt

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

Start Hunting!

Translated by