Plot Can';t积分两个高斯CDF的减法[Wolfram Mathematica]
我有一个函数,它是由三(k)个因子组成的乘积。每个因子是随机变量R和L的两个高斯CDF的减法。这些随机变量根据4个参数定义 下面的代码显示了我如何绘制主函数(根据两个自变量d和e)以及如何计算随机变量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
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]