Wolfram mathematica NIntegrate将一个明显非零的积分计算为零。被积函数是一组变形为分布的数据点
我有一个代表概率分布的数据点列表。我需要整合这个分布。但是,由于我没有函数,只有一组数据点,因此我提出了以下代码来表示概率分布:Wolfram mathematica NIntegrate将一个明显非零的积分计算为零。被积函数是一组变形为分布的数据点,wolfram-mathematica,integration,distribution,Wolfram Mathematica,Integration,Distribution,我有一个代表概率分布的数据点列表。我需要整合这个分布。但是,由于我没有函数,只有一组数据点,因此我提出了以下代码来表示概率分布: dList1 = Import["Z-1.txt", "Table"]; dList2 = Import["Z_over-1.txt", "Table"]; dDist[X_,sym_] := ( dList = 0; If[sym, dList = dList1; , dList = dList2; ]; val = 0;
dList1 = Import["Z-1.txt", "Table"];
dList2 = Import["Z_over-1.txt", "Table"];
dDist[X_,sym_] := (
dList = 0;
If[sym,
dList = dList1;
,
dList = dList2;
];
val = 0;
If[Abs[X] < Pi,
i = 2;
While[dList[[i]][[1]] < X, i++];
width = dList[[i]][[1]] - dList[[i-1]][[1]];
difX = dList[[i]][[1]] - X;
difY = dList[[i]][[2]] - dList[[i-1]][[2]];
val = dList[[i-1]][[2]] + (1-(difX/width)) difY;
];
Return[val];
);
给出了:
鉴于,履行本协议:
NIntegrate[dDist[x, True], {x, -1, 1}]
计算结果为零,同时显示以下警告:
我尝试过增加最小递归,但没有效果。我不知道该怎么办,也愿意接受任何建议,包括修改dDist函数。由于没有数据可供使用,我建议使用这些表创建在不连续性处分开的分段函数。NIntegrate应该处理那些没有问题的问题。试试@HotLicks,这个问题不是数学问题。数学很好,mathematica出于某种原因计算错误。即使你使用的数据集很小,这也会有很大帮助。一般来说,您可以尝试在积分之前插值点或使用经验分布。
NIntegrate[dDist[x, True], {x, -1, 1}]