2017-10-18 26 views
1

Je viens de rencontrer un problème en utilisant integral2 ou integral3 pour calculer les CDF dans MATLAB. Supposons que j'ai deux variables aléatoires normales indépendantes X et Y, le vecteur de valeur moyenne est mu = [5;50], et la matrice de covariance est c = [3^2,0; 0,3^2].Utiliser integral2 ou integral3 pour calculer CDF dans MATLAB

Puisqu'ils sont indépendants, le PDF joint est la multiplication des deux fichiers PDF, j'ai utilisé le code suivant pour calculer la probabilité sur tout le domaine,

integral2(@(x,y) normpdf(x,5,3).*normpdf(y,50,3),-Inf,Inf,-Inf,Inf) 

Je pense qu'il devrait me donner 1 comme répondre, mais au contraire, il retourne

1.8174e-10 

Alors j'ai essayé la fonction mvncdf,

mvncdf([Inf,Inf],[5,50],diag([3,3].^2)) 

et il renvoie la bonne réponse, 1. J'ai également essayé la version 1D integral, qui fonctionne bien. Quelqu'un peut-il s'il vous plaît expliquer cela pour moi?

Répondre

0

Ceci est dû à numerical imprecision (combiné avec le fait que vos distributions ont des moyennes non nulles). Vous pouvez utiliser le 'AbsTol' option for integral2 pour augmenter la précision de la solution:

integral2(@(x,y)normpdf(x,5,3).*normpdf(y,50,3),-Inf,Inf,-Inf,Inf,'AbsTol',1e-16) 

retours quelque chose plus proche de 1. Vous pouvez éviter cela en tirant parti de symétrie par rapport au moyen de vos distributions, par exemple,

4*integral2(@(x,y)normpdf(x,5,3).*normpdf(y,50,3),5,Inf,50,Inf) 

Votre mvncdf exemple utilise une méthode complètement différente pour calculer directement quelque chose comme ceci:

normcdf(Inf,5,3)*normcdf(Inf,50,3)