을 위해 그것을 포기하지 않을 -수렴. 즉, 적분은 수렴 하는가? 그렇다면 어떤 가치에 수렴 하는가? 수렴을 보장하는 적분 값이 있지만 그 값이 정확히 결정할 수는 없습니다 (1에서 무한대의 e^(- x^2) 적분을 시도하십시오). 정확하게 반환 할 수없는 경우 정확한 답은 수학적으로 가능하지 않으며 근사치 만 남습니다. Apache Commons는 여러 다른 근사 체계를 사용하지만, 모두 정확성을 위해 한정된 경계를 사용해야합니다.
적절한 답을 얻는 가장 좋은 방법은 한계가 계속 증가하면서 유한 적분을 반복적으로 평가하고 결과를 비교하는 것입니다. 의사 코드에서는 다음과 같이 보일 것입니다 :
double DELTA = 10^-6//your error threshold here
double STEP_SIZE = 10.0;
double oldValue=Double.MAX_VALUE;
double newValue=oldValue;
double lowerBound=-10; //or whatever you want to start with--for (-infinity,1), I'd
//start with something like -10
double upperBound=1;
do{
oldValue = newValue;
lowerBound-= STEP_SIZE;
newValue = integrate(lowerBound,upperBound); //perform your integration methods here
}while(Math.abs(newValue-oldValue)>DELTA);
결국, 적분 수렴 경우, 당신은 경계가 더 의미있는 정보를 생산하지 않습니다 확대한다는 점에서 중요한 물건을 충분히 얻을 것이다.
지혜로운 말 : 정수가 수렴하지 않으면 이런 종류의 일은 폭발적으로 나빠질 수 있습니다. 이 경우 두 가지 상황 중 하나가 발생할 수 있습니다. 종료 조건이 충족되지 않고 무한 루프에 빠지거나 적분 값이 무한대로 진동하여 종료 조건이 잘못 충족 될 수 있습니다. 잘못된 결과).
첫 번째를 방지하려면 가장 좋은 방법은 반환하기 전에 걸릴 최대 단계 수를 두는 것입니다. 이렇게하면 잠재적으로 발생할 수있는 무한 루프가 중지되어야합니다.
두 번째를 피하려면, 그것이 일어나지 않거나 필수 요소가 수렴되어야한다는 것을 (3 개의 미적분학을위한 건배?
정식으로 질문에 답하려면 아니요, Java에서 계산을 수행하는 다른 방법은 없습니다. 사실, 언어로 알고리즘을 사용하는 보장 된 방법이 없습니다. 수학은 우리가 원하는 방식대로 작동하지 않습니다. 그러나 실제적으로 실용적인 통합의 많은 부분 (비록 전부는 아니지만!)은 수렴합니다. 그 경험은 약 20 회 정도만 반복하면 합당한 정확도를 얻을 수 있으며, 아파치는 어리석게 오래 걸리지 않고 신속하게 처리 할 수 있어야합니다.
예, 무한대로 계산하는 데 약간의 시간이 걸리는 경향이 있습니다. – ChssPly76
다른 방식으로 문제를 조사해 보셨습니까? 1에서 적분을 시작하고 음의 무한대로 가면서, 용어가 작은 델타보다 더 많이 기여하지 않을 때 멈추는 것과 같습니다. – jabbie
Wolfram Alpha에서 함수를 던지려고 시도 했습니까 (가능한 경우)? –