2011-09-26 28 views
8

Aşağıdaki kimliği kontrol ettim, bunu Mathematica'da nasıl uygulayabilirim? muhtemelen yerleşik işlevleri için kuralları ekleyerek yer alacağı talep ne yapacağınıBir entegrasyon kuralı nasıl uygulanır?

(* {\[Alpha] \[Element] Reals, \[Beta] \[Element] Reals, \[Mu] \[Element] Reals, \[Sigma] > 0} *) 

Integrate[CDF[NormalDistribution[0, 1], \[Alpha] + \[Beta] x] PDF[ 
NormalDistribution[\[Mu], \[Sigma]], 
x], {x, -\[Infinity], \[Infinity]}] -> CDF[NormalDistribution[0, 1], (\[Alpha] + 
\[Beta] \[Mu])/Sqrt[1 + \[Beta]^2 \[Sigma]^2]] 

cevap

7

En yolları (örneğin Integrate, CDF, PDF, vb), iyi bir seçenek olmayabilir hangi. İşte biraz daha yumuşak bir yol Block hile kullanarak, bir - tabanlı makro:

In[27]:= 
withIntegrationRule[a=Integrate[CDF[NormalDistribution[0,1],\[Alpha]+\[Beta] x] 
    PDF[NormalDistribution[\[Mu],\[Sigma]],x],{x,-\[Infinity],\[Infinity]}]]; 
a 

Out[28]= 1/2 Erfc[-((\[Alpha]+\[Beta] \[Mu])/(Sqrt[2] Sqrt[1+\[Beta]^2 \[Sigma]^2]))] 

kuralımız uymuyor zaman, çalışmaya devam eder, otomatik olarak: Burada

ClearAll[withIntegrationRule]; 
SetAttributes[withIntegrationRule, HoldAll]; 
withIntegrationRule[code_] := 
    Block[{CDF, PDF, Integrate, NormalDistribution}, 
     Integrate[ 
     CDF[NormalDistribution[0, 1], \[Alpha]_ + \[Beta]_ x_] PDF[ 
      NormalDistribution[\[Mu]_, \[Sigma]_], x_], {x_, -\[Infinity], \[Infinity]}] := 
       CDF[NormalDistribution[0, 1], (\[Alpha] + \[Beta] \[Mu])/ 
        Sqrt[1 + \[Beta]^2 \[Sigma]^2]]; 
     code]; 

biz kullanabiliyoruz nasıl Normal değerlendirme yoluna geçiş:

Ben kapalı bir halde olası entegrasyonunu yapmak varsayımlara 0 için \[Alpha] set
In[36]:= 
    Block[{$Assumptions = \[Alpha]>0&&\[Beta]==0&&\[Mu]>0&&\[Sigma]>0}, 
    withIntegrationRule[b=Integrate[CDF[NormalDistribution[0,1],\[Alpha]+\[Beta] x] 
     PDF[NormalDistribution[\[Mu],\[Sigma]],x],{x,0,\[Infinity]}]]] 

Out[36]= 1/4 (1+Erf[\[Alpha]/Sqrt[2]]) (1+Erf[\[Mu]/(Sqrt[2] \[Sigma])]) 

.

Başka bir alternatif kendi özel amaçlı entegratörünüzü uygulamak olabilir.

+0

Birisi, "(CDF [NormalDistribution [0, 1], \ [Alpha] + \ [Beta] x] + CDF [NormalDistribution [0, 1] için integral için çalışacak şekilde nasıl HoldAll'i serbest bırakabilir? ], \ [Gama] + \ [Delta] x]) PDF [NormalDağıtım [\ [Mu], \ [Sigma]], x] '? 'Dağıt' denedim ama işe yaramadı. –

+0

@ b.gatessucks Bu, "HoldAll" sorunu değil. Bunu serbest bıraksam, makronuzun içindeki integral, makrosunun görmesini beklemeden önce normal güzergahı üzerinden değerlendirecektir, bu bizim istemediğimiz şeydir. Ancak 'Block' içinde,' 'Blocked''' işlevleri tümüyle unutabilirsiniz. Dolayısıyla, bu çözüm içinde, tek seçenek 'Entegrele' (Integarte [x_ + y_, varlims _]: = Entegre [x, varlims] + Integrate [y, varlims] 'gibi bir başka kural eklemektir. Sonunda, yine de, bütün Entegrasyonu yeniden hayata geçirecektiniz, bu yüzden başından beri almak istediğiniz şeyi kısıtlamak mantıklı olabilir. –