2012-12-12 3 views
1

확률 분포를 나타낼 데이터 포인트 목록이 있습니다. 이 배포본에 통합해야합니다.NIntegrate는 분명히 0이 아닌 적분을 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]; 
); 

데이터 포인트의 세트가 텍스트 파일에 : 나는 기능을하지 않았고 난 단지 데이터 포인트의 집합을했다 그러나 이후, 나는 확률 분포를 나타 내기 위해 다음 코드를 내놓았다 .

다음 명령을 수행 :

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

이 제공 :

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

반면이 수행 :

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

이 경고와 함께 제로로 평가 Warning

나는 MinRecursion을 무용지물로 늘리려고 노력했다. 나는 무엇을 해야할지 잘 모르겠다. 그리고 dDist 기능을 수정하는 것을 포함하여 어떤 제안에 대해서도 열려있을 것이다.

+0

시도하십시오. http://math.stackexchange.com/ –

+0

@HotLicks, 문제는 수학적 문제가 아닙니다. 수학은 괜찮습니다. mathematica는 어떤 이유로 그것을 잘못 계산합니다. – adhanlon

+0

사용하는 데이터가 최소한이라도 있으면 도움이 될 것입니다. 일반적으로, 통합 전에 포인트를 보간하거나'EmpiricalDistribution'을 사용할 수도 있습니다. –

답변

0

놀 수있는 데이터가 없으므로 표를 사용하여 disontinuities에서 분리 된 조각 단위 함수를 만드는 것이 좋습니다. NIntegrate는 문제없이 처리해야합니다.

관련 문제