Matlab에서이 3 중 정수를 신뢰할 수 있습니까?


15

전산 과학 사람들 :

나는 원래이 질문을 Math Stack Exchange에 게시 했으며 누군가 "여기에 훨씬 더 나은"답변을 얻을 수 있다고 언급했다.

저는 수치 법과 Matlab의 초보자입니다. 나는 두 개의 트리플 적분의 다음 합계를 평가하려고합니다 (명백하게 더 간단하게 작성할 수는 있지만 여전히 상징적으로 평가할 수는 없습니까 (?)). 를 여기에서 작동 시키는 데 문제가 있습니다. 그래서 마지 못해 조각으로 나 here습니다.LATEX

2((1/0.3)1)2(11/0.31r10r1r0F1(r0,r1,t)exp((0.3)2t24)dtdr0dr1),

2((1/0.3)1)2(11/0.31r1r1r0r1+r0F2(r0,r1,t)exp((0.3)2t24)dtdr0dr1),

어디

F1(r0,아르 자형1,)=2아르 자형0(0.3)2아르 자형1π

에프2(아르 자형0,아르 자형1,)=(0.3)π/2(아르 자형0+아르 자형1)4(2+2(아르 자형0+아르 자형1)(아르 자형1아르 자형0)2)2288(4π아르 자형0)(4π아르 자형1).

편집 (2013 년 3 월 2 일) : 누군가가 Mathematica가 적분을 상징적으로 수행하도록했습니다. 방금 (적분의 단순화 된 버전으로)이 작업을 시도했지만 Mathematica는 첫 번째 것 중 두 개만 할 수 있었고 두 번째 것에서는 멈추었습니다. 도움을 부탁드립니다. 여기 내가 한 일이 있습니다.

평가하려고했습니다

121아르 자형20아르 자형2아르 자형1아르 자형12특급(2)아르 자형2아르 자형1아르 자형2
통하다

적분 [r1 ^ 3 / r2 ^ 3 * t ^ 2 * Exp (-t ^ 2), {t, 0, r2-r1}, {r1, 1, r2}, {r2, 1, 2}]

Mathematica가 반환합니다 ( 결과가 길기 때문에 와 관련하여 문제가 발생했습니다. 두 방정식으로 나 anyone습니다. 누군가가 이것을 표시하는 좋은 방법을 알고 있다면 알려주십시오).이자형엑스

12164아르 자형22이자형1아르 자형22(2이자형2아르 자형2(25+아르 자형2(19+2아르 자형2(1+아르 자형2)))

이자형1+아르 자형22(32아르 자형2(2+아르 자형22))+π(11+4아르 자형22(9+아르 자형22))어프[1아르 자형2])아르 자형2.

그런 다음 평가하려고했습니다

121아르 자형2아르 자형2아르 자형1아르 자형2+아르 자형1

특급(2)(아르 자형1+아르 자형2)4(2+2(아르 자형1+아르 자형2)(아르 자형2아르 자형1)2)2아르 자형1아르 자형2아르 자형아르 자형2

사용

적분 [(r1 + r2-t) ^ 4 * (t ^ 2 + 2 * t * (r1 + r2)-3 * (r2-r1) ^ 2) ^ 2 * Exp [-t ^ 2] / r1 ^ 3 / r2 ^ 3, {r2, 1, 2}, {r1, 1, r2}, {t, r2-r1, r2 + r1}]

지금 막 Mathematica는 약 30 분 후에도 답을 얻지 못했습니다 (그러나 지금은 컴퓨터 네트워크에 문제가있어서 책임이 있습니다).

[3 월 2 일 편집의 끝]

추가 옵션없이 Matlab의 "triplequad"명령을 사용했습니다. 다른 방법을 몰랐기 때문에 헤비 사이드 함수를 사용하여 가변 적분 한계를 처리했습니다. Matlab은 나에게 주었다 . 0.007164820144202

Matlab이 좋은 소프트웨어라는 것을 알고 있지만, 수치 적 삼중 적분이 정확하게하기 어렵다고 들었고 수학자들은 회의적이어야하므로이 답의 정확성을 검증 할 방법을 원합니다. 적분은 특정 실험의 예상 값을 제공합니다 (원하는 경우 실험을 설명하기 위해이 질문을 편집 할 수 있음). 적절하게 임의로 생성 된 수, 백만 번을 사용하여 Matlab에서 실험을 구현하고 결과를 평균화했습니다. 나는이 과정을 네 번 반복했다. 결과는 다음과 같습니다 ( '평가판'이라는 단어를 잘못 사용하면 사과합니다).

시험판 1 :0.007133292603256

시험판 2 :0.007120455071989

시험 3 :0.007062595022049

시험판 4 :0.007154940168452

시험판 5 :0.007215000289130

각 시도에서 백만 개의 샘플을 사용했지만 시뮬레이션 값은 첫 번째 유효 숫자에서만 일치합니다. 그들은 숫자 삼중 적분이 정확한지 여부를 결정할 수있을 정도로 서로 가깝지 않습니다.

그렇다면 여기에서 "삼중 항"의 결과를 신뢰할 수 있는지, 어떤 상황에서 일반적인 것으로 믿을 수 있습니까?

Math Stack Exchange에서 얻은 한 가지 제안은 Mathematica, Octave, Maple 및 SciPy와 같은 다른 소프트웨어를 사용해 보는 것입니다. 이것이 좋은 조언입니까? 사람들은 실제로 Mathematica와 Maple에서 수치 작업을합니까? 옥타브는 일종의 Matlab 클론이므로 동일한 통합 알고리즘을 사용한다고 가정 할 수 있습니까? 나는 SciPy에 대해 들어 본 적이 없으며 그것에 대해 의견을 보내 주셔서 감사합니다.


업데이트 : Math Stack Exchange의 누군가 가 Maple에서 그것을하고 얻었 . 그것은 세 가지 중요한 수치에 대한 동의입니다. 좋은 징조입니다.0.007163085468

또한 스택 교환의 에 긴 여러 줄 표현을 입력하는 방법에 대한 제안에 감사드립니다 . 여기서 "정렬 된"환경을 사용할 수 있습니까? 시도했지만 작동하지 못했습니다.이자형엑스


2
시뮬레이션 결과는 Matlab이 반환 한 수치와 완벽하게 일치합니다. 평균 은 Matlab이 반환 한 것보다 표준 오류에 불과 합니다. FWIW에서 Mathematica 는 반환합니다 . 또한 다항식과 오차 함수의 관점에서 이러한 적분을 상징적으로 평가할 수 있습니다. 0.007137261.110.00716308537
whuber

@ whuber 감사합니다. 나는 메이플에서 상징적으로 그것을 시도했지만 메이플은 그것을 할 수 없다고 맹세 할 수있다. 메이플에서 다시 시도하고, 작동하지 않으면 Mathematica에서 시도합니다. BTW, 나는 메이플에서 비슷한 적분을했고 거대한 상징적 인 대답을 얻었습니다. 그것은 총계가 아주 작은 매우 큰 숫자의 합계와 차이 인 것처럼 보입니다. 최종 답변에서 반올림 오류가 발생한 것 같습니다. 이와 같은 문제에서 상징적 인 대답을 사용해야합니까, 아니면 적분을 수치 적으로해야합니까?
Stefan Smith

상징적 답변은 (종종) 임의의 정밀도로 효율적으로 계산 될 수있는 기능의 조합이라는 장점이 있습니다. 일반적으로 상징적 솔루션은 매개 변수가 변경 될 때 빠른 재 계산에 적합합니다. 이러한 이유로 상징적 인 솔루션을 찾는 것이 종종 가치가 있습니다.
whuber

@ whuber : Mathematica에서 본질적으로 동등한 적분 (일부 상수 변경 및 곱셈 상수 제거)을 시도했지만 Mathematica는 첫 번째 적분의 외부 두 적분 만 수행 할 수 있었고 두 번째 적분에 정지 한 것처럼 보입니다. 위의 코드와 결과를 게시했습니다.
Stefan Smith

1
3 월 2 일 다시 편집 : 트리플 적분을 상징적으로 하나의 적분 (적분의 첫 번째 절반)으로 줄임으로써 많은 성과를 거두었습니다. integrand는 매우 훌륭하게 작동하며 1 초 안에 매우 높은 정밀도로 수치 적으로 통합 될 수 있습니다.
whuber

답변:


9

108

메이플에서 오는 대답은 아마도 컴퓨터 대수에 의해 이루어 졌을 것이고 아마도 닫힌 솔루션을 찾은 다음 배정 밀도 부동 소수점을 사용하여 평가되었을 것입니다. 이것은 유한 합산으로 적분을 근사화하지 않고 근사 오차를 발생시키는 이점이 있지만 컴퓨터 대수 시스템은 적분에 대한 표현을 찾은 다음 평가할 수 있습니다. 물론,이 표현을 평가할 때는주의를 기울여야합니다 (반올림).

SciPy를 사용하여이 작업을 수행하려면 기본 Quadpack (Piessens et al.) 루틴을 사용하여 중첩 적응 가우스 구적법을 사용해야합니다. 옥타브에서는 동일한 접근 방식이 있습니다. Matlab이 Quadpack을 쿼드 러처 엔진으로 사용하더라도 놀라지 않을 것입니다 ( 참조 이므로 ).


@GretVdE : 정보 주셔서 감사합니다. 적분을 먼저 상징적으로 평가하려고 시도했지만 메이플은 그것을 할 수 없었습니다 (그래서 표준 기능으로는 불가능했을 것입니다). 어떤 알고리즘을 사용했는지 모르겠습니다.
Stefan Smith

@StefanSmith : Maple에서 정보 수준을 설정하여 찾을 수 있습니다 infolevel[`evalf/int`] := 4. Mape이 닫힌 솔루션을 찾을 수 없습니까? 적분은 너무 복잡해 보이지 않습니다. 메이플 시트를 어딘가에 공개 할 수 있습니까?
GertVdE

@StefanSmith : 위의 질문에 메이플 코드를 게시 할 것입니다.
GertVdE

지금 메이플이 내 시스템에서 작동하도록 할 수는 없지만 Mathematica에서 동등한 적분을 시도했지만 Mathematica는 첫 번째 트리플 적분의 내부 두 개만 수행했으며 두 번째 트리플 적분에 멈췄습니다. 편집 된 질문을 참조하십시오.
Stefan Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.