NIntegrate将明显非零积分评估为零。被积函数是一组变换为分布的数据点

时间:2012-12-12 01:31:44

标签: 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;

  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];
);

其中数据点集在文本文件中。

执行以下命令:

Plot[dDist[x, True], {x, -1, 1}]

给出了这个:

Plot[dDist[x, True], {x, -1, 1}]

然而,执行此操作:

NIntegrate[dDist[x, True], {x, -1, 1}]

评估为零,以及此警告: Warning

我尝试过增加MinRecursion无济于事。我不知道该怎么做,并会接受任何建议,包括修改dDist功能。

1 个答案:

答案 0 :(得分:0)

没有你的数据可以使用,我建议使用表格来创建在非连续性处分开的分段函数。 NIntegrate应该处理没有问题的那些。