Eh bien, traitant des expressions symboliques dans Mathematica, il est préférable de garder les choses exactement, à savoir éviter le nombre approximatif:
In[36]:= pdf = PiecewiseExpand[Rationalize[E^(-(x^2/2) - y^2/2)*
(-1 + E^(-1.*(x + 0.1*y)*UnitStep[x + 0.1*y]))^2],
Element[{x, y}, Reals]]
Out[36]= Piecewise[{{E^(-2*x - x^2/2 - y/5 - y^2/2)*(-1 +
E^(x + y/10))^2, 10*x + y >= 0}}, 0]
Pour attaquer le problème, il est préférable de modifier les variables:
In[56]:= cvr =
First[Solve[{10 x + y == u, (10 y - x)/101 == v}, {x, y}]]
Out[56]= {x -> (10 u)/101 - v, y -> u/101 + 10 v}
Notez que les coefficients ont été choisis de telle sorte que jacobian est une unité:
In[42]:= jac = Simplify[Det[Outer[D, {x, y} /. cvr, {u, v}]]]
Out[42]= 1
Après le changement de variables, vous voyez que la densité factorise en un produit:
In[45]:= npdf = FullSimplify[jac*pdf /. cvr]
Out[45]= Piecewise[{{E^(-(u/5) - u^2/202 - (101*v^2)/2)*(-1 +
E^(u/10))^2, u >= 0}}, 0]
C'est, les variables maintenant « u » et « v » sont indépendants. La variable 'v' est NormalDistribution[0, 1/101]
, tandis que la variable 'u' est un peu plus compliquée, mais peut maintenant être traitée par ProbabilityDistribution
.
In[53]:= updf =
Refine[npdf/nc, u >= 0]/PDF[NormalDistribution[0, 1/Sqrt[101]], v]
Out[53]= (E^(-(u/5) - u^2/202)*(-1 + E^(u/10))^2*Sqrt[2/(101*Pi)])/
(1 - 2*E^(101/200)*Erfc[Sqrt[101/2]/10] +
E^(101/50)*Erfc[Sqrt[101/2]/5])
Vous pouvez maintenant définir la distribution conjointe pour le vecteur {u,v}
:
dist = ProductDistribution[NormalDistribution[0, 1/101],
ProbabilityDistribution[updf, {u, 0, Infinity}]];
Depuis la relation entre {u,v}
et {x,y}
est connu, générant des {x,y}
Taxipost est facile:
XYRandomVariates[len_] :=
RandomVariate[dist, len].{{-1, 10}, {10/101, 1/101}}
Vous pouvez encapsuler les connaissances accumulées en utilisant TransformedDistribution
:
origdist =
TransformedDistribution[{(10 u)/101 - v,
u/101 + 10 v}, {Distributed[v, NormalDistribution[0, 1/101]],
Distributed[u, ProbabilityDistribution[updf, {u, 0, Infinity}]]}];
.: par exemple
In[68]:= Mean[RandomVariate[origdist, 10^4]]
Out[68]= {1.27198, 0.126733}
Il serait utile de voir une déclaration plus complète du problème et votre approche pour le résoudre. Cependant, rappelez-vous que la marginalisation sur une variable est obtenue en l'intégrant, ce que Mathematica devrait être capable de faire si vous avez une forme algébrique pour la densité. Alternativement, il pourrait être utile de considérer la marginalisation comme un processus dans lequel vous prétendez essentiellement que vous n'avez jamais rien su de la variable que vous voulez marginaliser. – Microserf