1

確率分布を表すデータ ポイントのリストがあります。このディストリビューションに統合する必要があります。ただし、関数がなく、データ ポイントのセットしかないため、確率分布を表す次のコードを思い付きました。

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

次の警告とともにゼロに評価されます。 警告

MinRecursion を無駄に増やしてみました。何をすべきかわからないので、dDist 関数の変更など、どんな提案も受け付けます。

4

1 に答える 1

0

使用するデータがない場合は、テーブルを使用して、不連続性で分離された区分的関数を作成することをお勧めします。NIntegrateは、これらを問題なく処理する必要があります。

于 2012-12-13T02:47:40.017 に答える