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}]