Plot Can';t积分两个高斯CDF的减法[Wolfram Mathematica]

Plot Can';t积分两个高斯CDF的减法[Wolfram Mathematica],plot,wolfram-mathematica,gaussian,integrate,Plot,Wolfram Mathematica,Gaussian,Integrate,我有一个函数,它是由三(k)个因子组成的乘积。每个因子是随机变量R和L的两个高斯CDF的减法。这些随机变量根据4个参数定义 下面的代码显示了我如何绘制主函数(根据两个自变量d和e)以及如何计算随机变量 sigma = 1; k = 3; priors = {}; AppendTo[priors, 1/k + e]; Do[AppendTo[priors, 1/k - e/(k - 1)], {c, 2, k}]; L[priors_, sigma_, d_, i_] := Do[ maxV

我有一个函数,它是由三(k)个因子组成的乘积。每个因子是随机变量R和L的两个高斯CDF的减法。这些随机变量根据4个参数定义

下面的代码显示了我如何绘制主函数(根据两个自变量d和e)以及如何计算随机变量

sigma = 1;
k = 3;
priors = {};
AppendTo[priors, 1/k + e];
Do[AppendTo[priors, 1/k - e/(k - 1)], {c, 2, k}];

L[priors_, sigma_, d_, i_] := Do[
 maxVal = -Infinity;
 Do[
  val = (2*sigma^2*Log[priors[[i]]/priors[[j]]] + d^2 (j^2 - i^2 + 2 (i - j)))/(2 (j - i) d);
  If[val > maxVal, maxVal = val, Null];
 , {j, 1, i - 1}];
 Return[maxVal];
, {1}];

R[priors_, sigma_, d_, i_] := Do[
 minVal = Infinity;
 Do[
 val = (2*sigma^2*Log[priors[[j]]/priors[[i]]] + d^2 (i^2 - j^2 + 2 (j - i)))/(2 (i - j) d);
 If[val < minVal, minVal = val, Null];
 , {j, i + 1, k}];
 Return[minVal];
, {1}];

Print[
 Plot3D[
  Product[
   If[R[priors, sigma, d, c] < L[priors, sigma, d, c], 0, 
    (CDF[NormalDistribution[(c - 1) d, sigma], R[priors, sigma, d, c]] - 
     CDF[NormalDistribution[(c - 1) d, sigma], L[priors, sigma, d, c]])]
  , {c, 1, k}]
 , {d, 0.01, 5}
, {e, -1/k, 1 - 1/k}, PlotRange -> {All, All, All}, AxesLabel -> Automatic]];
sigma=1;
k=3;
先验={};
[priors,1/k+e]的附录;
Do[AppendTo[priors,1/k-e/(k-1)],{c,2,k}];
L[priors,sigma,d,i]:=Do[
maxVal=-无穷大;
做[
val=(2*sigma^2*Log[priors[[i]]/priors[[j]]]+d^2(j^2-i^2+2(i-j))/(2(j-i)d);
如果[val>maxVal,maxVal=val,Null];
,{j,1,i-1}];
返回[maxVal];
, {1}];
R[priors,sigma,d,i]:=Do[
最小值=无穷大;
做[
val=(2*sigma^2*Log[priors[[j]]/[i]]]+d^2(i^2-j^2+2(j-i))/(2(i-j)d);
如果[val{All,All,All},AxesLabel->Automatic]];

现在,我想积分d上的函数(与Plot3D在同一区域,d=0.01-5),并根据自变量e绘制结果

下面是我使用的代码

Print[
 Plot[
  Integrate[
   Product[
    If[R[priors, sigma, d, c] < L[priors, sigma, d, c], 0, 
     (CDF[NormalDistribution[(c - 1) d, sigma], R[priors, sigma, d, c]] - 
      CDF[NormalDistribution[(c - 1) d, sigma], L[priors, sigma, d, c]])]
   , {c, 1, k}]
  , {d, 0.01, 5}]
, {e, -1/k, 1 - 1/k}, PlotRange -> {All, All}, AxesLabel -> Automatic]];
打印[
密谋[
整合[
产品[
如果[R[priors,sigma,d,c]{All,All},AxesLabel->Automatic]];


然而,最终的情节并不是我所期望的。它是恒定的,在3D图中可以看出这是不可能发生的。是否有人知道发生了什么以及如何实现功能的真正集成?提前感谢。

当您在函数
L
R
中计算
val
时,结果是符号化的(因为未定义e)。因此,逻辑
val
是不确定的,因此
minVal
从未设置(因此
L
R
每次都返回无穷大)

(还清理了一些其他东西……)

sigma=1;
k=3;
priors=Join[{1/k+e},表[1/k-e/(k-1),{c,2,k}];
L[priors0,sigma,d,i,e0]:=模[{priors,maxVal,val,e},
Do[maxVal=-无穷大;
优先级=优先级0/.e->e0;
Do[val=(2*sigma^2*Log[priors[[i]]/priors[[j]]]]
d^2(j^2-i^2+2(i-j))/(2(j-i)d;
如果[val>maxVal,maxVal=val];,{j,1,i-1}];,{1}];maxVal];
R[priors0,sigma,d,i,e0]:=模[{priors,maxVal,val,e},
优先级=优先级0/.e->e0;
最小值[表[(2*sigma^2*Log[priors[[j]]/priors[[i]]]]
d^2(i^2-j^2+2(j-i))/(2(i-j)d),{j,i+1,k}]];
g[d_?数值Q,c_,e_q]:=
产品[如果[R[先验,西格玛,d,c,e]{All,All},AxesLabel->Automatic]

 sigma = 1;
 k = 3;
 priors = Join[ {1/k + e} , Table[1/k - e/(k - 1) , {c, 2, k} ] ];
 L[priors0_, sigma_, d_, i_, e0_] := Module[{priors, maxVal, val, e},
    Do[maxVal = -Infinity;
     priors = priors0 /. e -> e0 ;
     Do[val = (2*sigma^2*Log[priors[[i]]/priors[[j]]] + 
       d^2 (j^2 - i^2 + 2 (i - j)))/(2 (j - i) d);
        If[val > maxVal, maxVal = val];, {j, 1, i - 1}];, {1}]; maxVal];
 R[priors0_, sigma_, d_, i_, e0_] := Module[{priors, maxVal, val, e},
   priors = priors0 /. e -> e0;
   Min[Table[(2*sigma^2*Log[priors[[j]]/priors[[i]]] + 
      d^2 (i^2 - j^2 + 2 (j - i)))/(2 (i - j) d), {j, i + 1, k}]]];
 g[d_?NumericQ, c_, e_] := 
     Product[If[R[priors, sigma, d, c, e] < L[priors, sigma, d, c, e], 
0, 
  (CDF[NormalDistribution[(c - 1) d, sigma], R[priors, sigma, d, c, e]] - 
   CDF[NormalDistribution[(c - 1) d, sigma], L[priors, sigma, d, c, e]])],
   {c, 1, k}];
 Plot[NIntegrate[g[d, c, e], {d, 0.01, 5}], {e, -1/k, 1 - 1/k},
       PlotRange -> {All, All}, AxesLabel -> Automatic]