01단원과 02단원에서 미분을 세웠습니다. 이제 반대 방향입니다.
48강에서 한 변수 적분을 리만합으로 정의했습니다.
구간을 잘게 나누고, 각 조각에서 직사각형의 넓이를 더하고, 극한을 취했습니다.
변수가 둘이면 나누는 대상이 구간에서 영역으로 바뀝니다. 조각도 선분이 아니라 작은 직사각형이 되고, 더하는 것은 넓이가 아니라 기둥의 부피입니다.
정의는 이렇게 자연스러운데 계산이 문제입니다. 이중 극한을 직접 다룰 수는 없으니, 아는 것으로 환원해야 합니다. 그 답이 반복적분입니다.
한 번에 한 변수씩 적분하면 한 변수 적분 두 번이 됩니다. 48강부터 53강까지 익힌 기술이 그대로 쓰입니다.
이 강의는 그 환원이 언제 정당한지를 밝히고, 순서를 고르는 일이 계산의 성패를 가른다는 점을 보입니다.
문제. 를 직사각형 에서 봅니다.
(1) 각 변을 등분해 중점에서 값을 재는 리만합을 세우세요.
(2) 에서 계산하세요.
(3) 참값 에 수렴하는지 확인하고 오차의 거동을 보세요.
생각의 실마리. 48강에서 한 변수로 한 일을 그대로 합니다. 구간을 나눠 직사각형을 쌓았듯, 영역을 나눠 기둥을 쌓습니다.
풀이. (1) , 이고 각 작은 직사각형의 넓이가 입니다.
(2)와 (3) 검산에서 참값이 이고
| 리만합 | 오차 | |
|---|---|---|
| 4.167\times10^ | ||
| 1.042\times10^ | ||
| 2.604\times10^ | ||
| 6.510\times10^ | ||
| 1.628\times10^ | ||
| 4.069\times10^ |
이 두 배가 될 때마다 오차가 사분의 일이 됩니다. 중점법칙의 오차가 이기 때문이며, 51강에서 한 변수에 대해 본 것과 같습니다.
이 문제에서 배우는 것: 이중적분.
이중적분. 유계 영역 와 그 위의 유계함수 에 대해, 를 작은 직사각형으로 나누고
가 분할과 표본점 선택에 무관하게 존재하면 를 에서 적분가능하다 합니다.
한 변수와의 대응을 정리합니다.
| 항목 | 한 변수 | 두 변수 |
|---|---|---|
| 나누는 대상 | 구간 | 영역 |
| 조각 | 선분 | 작은 직사각형 |
| 조각의 크기 | ||
| 더하는 것 | 직사각형의 넓이 | 기둥의 부피 |
| 기하적 뜻 | 곡선 아래 넓이 | 곡면 아래 부피 |
이면 곡면 아래 부피입니다. 음수면 부호가 붙은 부피이고, 한 변수에서 축 아래 넓이를 음수로 센 것과 같습니다.
적분가능성의 조건은 한 변수와 비슷합니다.
정리. 가 유계이고 그 경계의 넓이가 이며 가 에서 유계이고 불연속점의 집합이 넓이 이면 는 적분가능합니다.
연속함수는 언제나 적분가능하므로 실무에서는 이 조건을 따질 일이 드뭅니다. 다만 "경계의 넓이가 "이라는 조건이 영역의 모양을 제한한다는 점은 기억해 둘 만합니다.
바로 확인 1.
확인 1-1. 이중적분의 기하적 뜻을 쓰세요.
답. 이면 곡면 아래의 부피입니다.
확인 1-2. 중점법칙의 오차 차수를 쓰세요.
답. 이며 이 두 배면 오차가 사분의 일입니다.
확인 1-3. 연속함수는 유계 영역에서 적분가능합니까?
답. 경계의 넓이가 이면 적분가능합니다.
문제. 같은 적분을 봅니다.
(1) 를 먼저 적분하는 반복적분을 세우고 계산하세요.
(2) 를 먼저 적분하는 반복적분을 세우고 계산하세요.
(3) 두 결과를 비교하세요.
생각의 실마리. 한 변수를 고정하면 나머지는 한 변수 적분입니다. 94강에서 편미분이 "다른 변수를 상수로 본다"였듯, 여기서도 같은 발상을 씁니다.
풀이. (1) 를 고정하고 로 먼저 적분합니다.
(2) 순서를 바꾸면
(3) 검산에서 둘 다 이며 문제 1의 리만합이 수렴한 값과 같습니다.
이 문제에서 배우는 것: 푸비니 정리.
푸비니 정리(직사각형). 가 에서 연속이면
입니다.
이 정리가 하는 일이 두 가지입니다.
| 하는 일 | 뜻 |
|---|---|
| 이중적분을 반복적분으로 | 아는 계산으로 환원합니다 |
| 순서를 자유롭게 | 편한 쪽을 고를 수 있습니다 |
첫째가 계산을 가능하게 하고 둘째가 계산을 쉽게 합니다.
**기하적으로는 "부피를 어떻게 자를 것인가"**입니다. 안쪽 적분이 한 방향으로 자른 단면의 넓이를 주고, 바깥 적분이 그 단면을 쌓아 부피를 만듭니다.
52강에서 회전체의 부피를 단면으로 구한 것과 같은 발상이며, 이번에는 단면이 원판이 아니라 일반적인 모양입니다.
주의할 점이 하나 있습니다. 정리에 "연속이면"이라는 조건이 붙어 있는데, 이것이 장식이 아닙니다. 심화 1에서 순서를 바꾸면 값이 달라지는 함수를 봅니다.
바로 확인 2.
확인 2-1. 푸비니 정리를 쓰세요.
답. 연속이면 이중적분이 두 순서의 반복적분과 모두 같습니다.
확인 2-2. 안쪽 적분의 기하적 뜻을 쓰세요.
답. 한 방향으로 자른 단면의 넓이입니다.
확인 2-3. 순서를 바꿔도 되는 근거는 무엇입니까?
답. 푸비니 정리이며 연속성 같은 조건이 필요합니다.
문제. 다음 적분을 봅니다.
(1) 주어진 순서로 계산해 보세요.
(2) 적분 영역을 그리고 순서를 바꾼 식을 쓰세요.
(3) 바꾼 순서로 계산하세요.
생각의 실마리. 은 초등함수로 부정적분이 없습니다. 안쪽 적분부터 막히니 순서를 바꿔야 합니다.
풀이. (1) 안쪽에서 를 구해야 하는데, 이 부정적분은 초등함수로 표현되지 않습니다. 막힙니다.
(2) 영역은 이고 이므로
즉 정사각형을 대각선으로 자른 아래쪽 삼각형입니다. 를 먼저 고정하면 가 에서 까지 움직이고 각 에 대해 가 에서 까지입니다.
(3) 안쪽 적분에서 이 에 무관하므로 상수로 나옵니다.
로 치환하면 이므로
검산에서 이고 수치 확인이 로 오차 입니다.
이 문제에서 배우는 것: 순서 선택이 전략입니다.
핵심은 가 나타난 것입니다. 이 가 치환에 필요한 인자를 공짜로 만들어 주었습니다. 순서를 바꾸는 것만으로 계산 불가능이 계산 가능으로 바뀌었습니다.
순서를 바꾸는 절차를 정리합니다.
| 단계 | 하는 일 |
|---|---|
| 적분 범위에서 영역 를 파악합니다 | |
| 를 그립니다 | |
| 다른 변수를 바깥으로 두고 범위를 다시 읽습니다 | |
| 새 반복적분을 세웁니다 |
둘째 단계를 건너뛰면 거의 틀립니다. 범위를 기계적으로 뒤집으면 안 되고, 영역의 모양을 봐야 합니다.
이 예에서 , 을 뒤집으면 , 입니다. 바깥 범위는 상수가 되어야 하고 안쪽 범위가 바깥 변수에 의존합니다.
언제 순서를 바꾸는지 정리합니다.
| 상황 | 대응 |
|---|---|
| 안쪽 부정적분이 없습니다 | 순서를 바꿉니다 |
| 안쪽 계산이 복잡합니다 | 순서를 바꿉니다 |
| 영역이 한쪽으로 단순합니다 | 그쪽을 안쪽으로 |
바로 확인 3.
확인 3-1. 의 부정적분이 있습니까?
답. 초등함수로는 없습니다.
확인 3-2. 순서를 바꾸기 전에 반드시 할 일을 쓰세요.
답. 적분 영역을 그립니다.
확인 3-3. 반복적분에서 바깥 범위는 어떤 값이어야 합니까?
답. 상수여야 합니다.
문제. 가 곡선 과 사이의 영역()이라 합니다.
(1) 를 바깥으로 두는 반복적분을 세우세요.
(2) 를 계산하세요.
(3) 수치로 확인하세요.
생각의 실마리. 직사각형이 아니면 안쪽 범위가 바깥 변수의 함수가 됩니다. 세로선을 그어 위아래 경계를 읽으면 됩니다.
풀이. (1) 에서 이므로 아래가 포물선이고 위가 직선입니다.
(2) 안쪽부터 계산합니다.
바깥을 계산하면
(3) 검산에서 이고 수치가 입니다.
이 문제에서 배우는 것: 두 가지 영역 유형.
유형 I(세로로 단순). 이면
유형 II(가로로 단순). 이면
"단순"이란 그 방향의 직선이 영역을 한 토막으로만 자른다는 뜻입니다. 세로선이 영역을 두 토막으로 자르면 유형 I이 아니고, 영역을 나눠 따로 적분해야 합니다.
이 규칙을 어기면 답이 변수에 남습니다. 반복적분의 결과는 수여야 하므로, 바깥 범위에 변수가 남았다면 반드시 틀린 것입니다.
두 유형 모두 되는 영역이 흔하며, 이 문제의 가 그렇습니다. 유형 II로 세우면
이고 같은 값이 나옵니다. 을 에 대해 풀면 이며, 에서 입니다.
어느 쪽이 편한지는 함수와 영역이 정합니다. 문제 3에서는 한쪽만 계산 가능했고, 여기서는 둘 다 되지만 유형 I이 조금 간단합니다.
바로 확인 4.
확인 4-1. 유형 I 영역의 반복적분을 쓰세요.
답. 입니다.
확인 4-2. 바깥 적분 범위는 무엇이어야 합니까?
답. 상수입니다.
확인 4-3. 답에 변수가 남으면 무엇을 뜻합니까?
답. 범위를 잘못 세웠다는 뜻입니다.
문제. 문제 4의 영역 를 봅니다.
(1) 의 넓이를 구하세요.
(2) 의 위 평균값을 구하세요.
(3) 피적분함수가 이면 적분값이 무엇인지 확인하세요.
생각의 실마리. 높이가 인 기둥의 부피는 밑면의 넓이와 같습니다.
풀이. (1) 검산에서
(2) 평균값은 총량을 넓이로 나눈 것입니다.
검산에서 입니다.
(3) 피적분함수가 이면 적분값이 정확히 넓이이며 검산에서 확인됩니다.
이 문제에서 배우는 것: 적분이 재는 것들.
넓이.
평균값.
50강에서 한 변수 평균값을 로 정의한 것과 같은 형태이며, 구간의 길이 자리에 영역의 넓이가 들어갑니다.
이중적분이 재는 양들을 정리합니다.
| 피적분함수 | 재는 것 |
|---|---|
| 넓이 | |
| 곡면 아래 부피 | |
| 판의 질량 | |
| 질량 모멘트 | |
| 확률 |
마지막 줄이 S6로 이어집니다. 136강의 결합확률밀도가 이중적분으로 확률을 주며, 전체 확률이 이라는 조건이
입니다. **"넓이가 인 부피"**라는 정규화이고, 137강의 조건부분포는 이 부피를 한 방향으로 자른 단면입니다.
주변분포도 여기서 나옵니다.
반복적분의 안쪽 적분이 곧 주변분포입니다. 문제 2에서 안쪽 적분이 단면의 넓이라 했는데, 확률에서는 그것이 한 변수만 남긴 분포입니다.
바로 확인 5.
확인 5-1. 영역의 넓이를 적분으로 쓰세요.
답. 입니다.
확인 5-2. 평균값의 정의를 쓰세요.
답. 적분값을 넓이로 나눈 것입니다.
확인 5-3. 확률밀도의 정규화 조건을 쓰세요.
답. 전체 영역에서의 이중적분이 입니다.
| 개념 | 내용 |
|---|---|
| 이중적분 | 리만합의 극한, 곡면 아래 부피 |
| 푸비니 정리 | 반복적분으로 환원하고 순서 교환 |
| 유형 I | |
| 유형 II | |
| 넓이 | |
| 평균값 | 적분값을 넓이로 나눔 |
| 순서를 바꾸는 절차 | |
|---|---|
| 범위에서 영역을 읽습니다 | |
| 그립니다 | |
| 다른 변수를 바깥으로 | |
| 새 범위를 세웁니다 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 범위를 기계적으로 뒤집습니다 | 영역을 그립니다 |
| 바깥 범위에 변수가 남습니다 | 반드시 상수입니다 |
| 순서를 무조건 바꿔도 된다고 봅니다 | 조건이 필요합니다 |
| 안쪽부터 막히면 포기합니다 | 순서를 바꿔 봅니다 |
문제 6. 를 계산하세요.
답. 안쪽이 이므로 입니다.
문제 7. 를 계산하세요.
답. 안쪽이 이므로 입니다.
문제 8. 에서 의 적분을 구하세요.
답. 입니다.
문제 9. 피적분함수가 이고 영역이 직사각형이면 어떻게 됩니까?
답. 두 한 변수 적분의 곱으로 분리됩니다.
문제 10. 삼각형 에서 를 구하세요.
답. 입니다.
문제 11. 같은 삼각형에서 를 구하세요.
답. 입니다.
문제 12. 문제 11에서 의 평균값을 구하세요.
답. 입니다.
문제 13. 의 순서를 바꾸세요.
답. 영역이 이므로 입니다.
문제 14. 를 계산하세요.
답. 순서를 바꾸면 입니다.
문제 15. 와 사이 영역을 유형 II로 쓰세요.
답. , 입니다.
문제 16. 반원 , 을 유형 I로 쓰세요.
답. , 입니다.
문제 17. 확률밀도의 정규화 조건을 쓰세요.
답. 입니다.
문제 18. 주변분포 를 적분으로 쓰세요.
답. 이며 반복적분의 안쪽 적분입니다.
심화 1. 순서를 바꾸면 값이 달라지는 예를 만들고 원인을 밝히세요.
푸비니 정리에 조건이 붙은 이유를 봅니다.
안쪽 적분을 정확히 계산합니다. 이므로
검산에서 확인합니다.
| 수치 | 이론 | |
|---|---|---|
바깥을 적분하면
순서를 바꾸면 부호가 뒤집힙니다. 이므로
| 수치 | 이론 | |
|---|---|---|
따라서 두 반복적분이 와 로 다릅니다.
원인은 절대적분가능성의 실패입니다. 검산에서 의 적분을 격자로 재면
| 격자 | \sum\lvert f\rvert/N^ |
|---|---|
격자를 촘촘히 할수록 커집니다. 수렴하지 않고 발산합니다.
원점 근처에서 이고 이므로 꼴이 되어 로그로 발산합니다.
푸비니-토넬리 정리. 이면 두 반복적분이 존재하고 서로 같으며 이중적분과도 같습니다.
조건이 "연속"이 아니라 "절대적분가능"인 것이 정확한 형태입니다. 유계 영역의 연속함수는 자동으로 절대적분가능하므로 문제 2의 형태로 충분했습니다.
같은 현상이 급수에서도 일어납니다. 조건수렴하는 급수는 순서를 바꾸면 값이 달라지고, 절대수렴하면 그렇지 않습니다. 33강 심화의 리만 재배열 정리와 같은 이야기이며, "무한히 많은 것을 더할 때 순서가 중요해지는" 하나의 원리입니다.
심화 2. 리만합의 수렴 차수를 설명하세요.
문제 1에서 오차가 이었습니다. 왜 그런지 봅니다.
한 조각에서 중점 표본을 쓰면, 100강의 테일러 전개로
이고 조각 위에서 적분하면 일차항이 대칭성으로 사라집니다. 중점을 중심으로 와 가 짝을 이루기 때문입니다.
남는 것은 이차항이고, 조각의 한 변이 이므로 조각당 오차가 입니다. 조각이 개이므로 총 오차가
검산의 사분의 일 감소와 맞습니다.
왼쪽 끝점을 쓰면 차수가 떨어집니다. 일차항이 상쇄되지 않아 조각당 이 되고 총 입니다.
| 표본점 | 조각당 오차 | 총 오차 |
|---|---|---|
| 왼쪽 끝 | ||
| 중점 | ||
| 사다리꼴 | ||
| 심프슨 |
51강에서 한 변수에 대해 본 표와 차수가 같습니다. 차원이 늘어도 한 축당 정확도는 그대로입니다.
문제는 비용입니다. 차원에서 한 축을 등분하면 점이 개입니다. 심화 3에서 다룹니다.
심화 3. 차원이 오르면 격자가 왜 무너지는지 보이세요.
심화 2에서 중점법칙의 오차가 였습니다. 차원과 무관합니다. 그런데 비용은 그렇지 않습니다.
오차를 으로 만들려면 이고, 그때 점의 수가
지수에 차원이 들어갑니다. 검산에서
| 한 축 칸 격자의 점 수 | 오차 에 필요한 점 수 | |
|---|---|---|
| 1.000\times10^ | 3.162\times10^ | |
| 1.000\times10^ | 1.000\times10^ | |
| 1.000\times10^ | 3.162\times10^ | |
| 1.000\times10^ | 1.000\times10^ | |
| 1.000\times10^ | 1.000\times10^ | |
| 1.000\times10^ | 1.000\times10^ |
이면 개입니다. 우주의 나이 동안 계산해도 끝나지 않습니다.
대안이 몬테카를로 적분입니다. 영역에서 무작위로 개를 뽑아 평균을 냅니다.
오차가 이고 차원과 무관합니다. 중심극한정리에서 나오며 145강에서 증명합니다.
같은 예산으로 비교합니다. 을 에서 적분하며 참값이 입니다.
| 격자(점) 오차 | 몬테카를로(점) 오차 | |
|---|---|---|
| 8.333\times10^ | 3.425\times10^ | |
| 1.667\times10^ | 3.504\times10^ | |
| 2.500\times10^ | 9.083\times10^ | |
| 5.000\times10^ | 2.740\times10^ |
에서 격자는 개를 쓰고도 몬테카를로보다 나쁩니다. 그리고 이면 격자는 개가 필요한데 몬테카를로는 여전히 개면 됩니다.
교차점이 대략 근처입니다. 그래서 이 단원의 계산법(반복적분, 극좌표, 변수변환)은 에서 쓰고, 그 이상은 표본 기반 방법으로 갑니다.
기계학습의 적분은 거의 모두 고차원입니다. 기댓값 에서 의 차원이 수백에서 수천이므로, 235강의 미니배치와 157강의 MCMC가 모두 이 문제에 대한 답입니다.
심화 4. 적분 순서 교환이 실무에서 왜 중요한지 논하세요.
문제 3에서 순서를 바꿔 계산이 가능해졌습니다. 같은 일이 여러 곳에서 일어납니다.
첫째, 기댓값과 합의 교환입니다.
기댓값이 적분이고 합이 또 하나의 적분(계수측도)이므로, 이 교환이 곧 푸비니입니다. 독립성이 필요 없다는 점이 중요하며, 133강에서 다룹니다.
둘째, 미분과 적분의 교환입니다.
이 교환이 최적화의 전제입니다. 손실이 기댓값 형태이고
일 때 이어야 미니배치 기울기가 참 기울기의 불편추정량이 됩니다. 235강의 확률적 경사하강법이 이 등식에 기대며, 이것도 푸비니의 한 형태입니다.
교환이 깨지는 경우도 있습니다. 적분 범위가 에 의존하면 라이프니츠 규칙의 추가 항이 붙고, 강화학습의 정책 경사에서 이 문제가 나타납니다. 284강에서 로그 미분 기법으로 우회합니다.
셋째, 조건부 기댓값의 탑 법칙입니다.
반복적분의 확률판이며 137강에서 다룹니다. 안쪽에서 를 고정해 평균을 내고 바깥에서 에 대해 평균을 냅니다. 문제 2에서 "단면의 넓이를 구해 쌓는다"고 한 것과 같은 구조입니다.
넷째, 계산 순서 최적화입니다. 97강 문제 5에서 야코비 곱의 순서가 비용을 배 갈랐습니다. 다중적분에서도 어느 변수를 먼저 적분하느냐가 비용을 바꿉니다. 텐서 축약의 최적 순서를 찾는 문제와 같은 구조입니다.
심화 5. 이중적분이 확률에서 어떻게 쓰이는지 예고하세요.
문제 5에서 확률밀도를 언급했습니다. S6에서 이 단원이 어떻게 쓰이는지 미리 정리합니다.
결합밀도가 부피를 확률로 만듭니다.
**"확률은 부피"**이며, 이 관점에서 이 단원의 모든 계산이 확률 계산이 됩니다.
| 이 단원 | S6에서 |
|---|---|
| 정규화 | 전체 확률 (136강) |
| 안쪽 적분 | 주변분포 (136강) |
| 단면 | 조건부분포 (137강) |
| 평균값 | 기댓값 (133강) |
| 순서 교환 | 탑 법칙 (137강) |
| 변수변환 | 확률변수의 변환 (139강) |
셋째 줄이 미묘합니다. 조건부분포는 단면을 그 단면의 총량으로 나눈 것입니다.
나누는 이유는 단면 자체가 확률분포가 아니기 때문입니다. 총합이 이 아니라 이므로 정규화가 필요합니다.
여섯째 줄이 105강과 이어집니다. 확률변수를 변환하면 밀도가 야코비 행렬식으로 나뉩니다.
98강 심화 2에서 흐름 기반 생성모형과 함께 예고한 식이며, 부피가 늘어난 만큼 밀도가 묽어진다는 뜻입니다. 105강에서 적분 쪽의 공식을 세우고 139강에서 확률 쪽으로 옮깁니다.
140강의 다변량 정규분포가 이 단원과 02단원을 함께 씁니다. 밀도의 지수부가 이차형식이고
등고선이 87강의 타원입니다. 그 적분을 계산하려면 104강의 극좌표가 필요하고, 정규화 상수 가 거기서 나옵니다.
심화 6. 104강부터 106강으로 어떻게 이어지는지 정리하세요.
이 강의에서 직교좌표의 격자로 영역을 나눴습니다. 영역이 원형이면 이 격자가 어울리지 않습니다.
위에서 적분하려면 유형 I로 이라 써야 하고, 안쪽 적분에 근호가 들어가 계산이 지저분해집니다.
104강이 좌표를 바꿉니다. 극좌표에서 원판은 직사각형입니다.
영역이 단순해지는 대신 넓이 요소가 바뀝니다. 98강 문제 4에서 이미 구했습니다.
이 붙는 이유가 야코비 행렬식이라는 점을 그때 확인했고, 104강에서 실제로 씁니다.
105강이 이를 일반화합니다. 어떤 변수변환이든
98강 문제 3에서 작은 정사각형의 상 넓이가 배였던 관찰이 여기서 정리가 됩니다. 그리고 79강에서 행렬식이 부피 배율이라 한 사실이 곡선 좌표계로 확장됩니다.
106강이 차원을 하나 더 올립니다. 삼중적분으로 부피를 재고, 원기둥좌표와 구면좌표의 야코비를 구합니다.
| 좌표계 | |
|---|---|
| 극 | |
| 원기둥 | |
| 구 |
03단원 전체가 하나의 이야기입니다.
04단원에서 최적화로 돌아갑니다. 03단원은 잠시 방향을 튼 셈이지만, 여기서 세운 적분이 S6의 확률 전체와 이어지고, 235강의 확률적 최적화에서 다시 만납니다.
import numpy as np
# --- 문제 1: 리만합이 부피로 수렴한다 -----------------------------------
f = lambda x, y: x**2 + y # [0,1]x[0,2] 위에서
exact = 1/3*2 + 1*2 # int x^2 dx * 2 + int y dy * 1 = 2/3 + 2
print(" 정확한 값 = 2/3 + 2 = %.10f" % exact)
print(" n 리만합(중점) 오차")
for n in [2, 4, 8, 16, 32, 64]:
xs = (np.arange(n) + 0.5)/n
ys = 2*(np.arange(n) + 0.5)/n
X, Y = np.meshgrid(xs, ys, indexing='ij')
s = f(X, Y).sum() * (1/n) * (2/n)
print(" %3d %18.10f %12.3e" % (n, s, abs(s - exact)))
# 정확한 값 = 2/3 + 2 = 2.6666666667
# n 리만합(중점) 오차
# 2 2.6250000000 4.167e-02
# 4 2.6562500000 1.042e-02
# 8 2.6640625000 2.604e-03
# 16 2.6660156250 6.510e-04
# 32 2.6665039062 1.628e-04
# 64 2.6666259766 4.069e-05
# n 이 두 배면 오차가 사분의 일입니다. 중점법칙의 O(1/n^2) 입니다.
# --- 문제 2: 반복적분으로 계산한다 --------------------------------------
print(" 안쪽 x 먼저: int_0^2 [ int_0^1 (x^2+y) dx ] dy = int_0^2 (1/3 + y) dy")
print(" = 2/3 + 2 = %.10f" % (2/3 + 2))
print(" 안쪽 y 먼저: int_0^1 [ int_0^2 (x^2+y) dy ] dx = int_0^1 (2x^2 + 2) dx")
print(" = 2/3 + 2 = %.10f" % (2/3 + 2))
# 안쪽 x 먼저: int_0^2 [ int_0^1 (x^2+y) dx ] dy = int_0^2 (1/3 + y) dy
# = 2/3 + 2 = 2.6666666667
# 안쪽 y 먼저: int_0^1 [ int_0^2 (x^2+y) dy ] dx = int_0^1 (2x^2 + 2) dx
# = 2/3 + 2 = 2.6666666667
# --- 문제 3: 순서를 바꾸면 쉬워지는 경우 --------------------------------
# int_0^1 int_x^1 sin(y^2) dy dx 를 순서 바꿔 계산
print(" D = {(x,y) : 0<=x<=1, x<=y<=1} 위의 sin(y^2)")
print(" y 를 먼저 하면 sin(y^2) 의 부정적분이 없습니다")
print(" x 를 먼저 하면 int_0^1 [ int_0^y dx ] sin(y^2) dy = int_0^1 y sin(y^2) dy")
val = (1 - np.cos(1.0))/2
print(" = (1 - cos 1)/2 = %.10f" % val)
N = 4000
ys = (np.arange(N) + 0.5)/N
num = np.sum(ys*np.sin(ys**2))/N
print(" 수치 확인 %.10f (오차 %.3e)" % (num, abs(num - val)))
# D = {(x,y) : 0<=x<=1, x<=y<=1} 위의 sin(y^2)
# y 를 먼저 하면 sin(y^2) 의 부정적분이 없습니다
# x 를 먼저 하면 int_0^1 [ int_0^y dx ] sin(y^2) dy = int_0^1 y sin(y^2) dy
# = (1 - cos 1)/2 = 0.2298488471
# 수치 확인 0.2298488421 (오차 5.005e-09)
# --- 문제 4: 일반 영역 위의 적분 ----------------------------------------
# D: y = x^2 과 y = x 사이, 0<=x<=1, 피적분 x*y
print(" D: x^2 <= y <= x, 0 <= x <= 1 위에서 x*y 를 적분")
print(" 안쪽 y: int_{x^2}^{x} x y dy = x(x^2 - x^4)/2")
print(" 바깥 x: int_0^1 (x^3 - x^5)/2 dx = (1/4 - 1/6)/2 = 1/24")
ex4 = 1/24
print(" = %.10f" % ex4)
M = 3000
xs = (np.arange(M) + 0.5)/M
inner = xs*(xs**2 - xs**4)/2
print(" 수치 확인 %.10f (오차 %.3e)" % (inner.sum()/M, abs(inner.sum()/M - ex4)))
# D: x^2 <= y <= x, 0 <= x <= 1 위에서 x*y 를 적분
# 안쪽 y: int_{x^2}^{x} x y dy = x(x^2 - x^4)/2
# 바깥 x: int_0^1 (x^3 - x^5)/2 dx = (1/4 - 1/6)/2 = 1/24
# = 0.0416666667
# 수치 확인 0.0416666713 (오차 4.630e-09)
# --- 문제 5: 넓이와 평균값 ----------------------------------------------
area = 1/2 - 1/3
print(" D 의 넓이 = int_0^1 (x - x^2) dx = 1/2 - 1/3 = %.10f" % area)
print(" f 의 평균값 = (1/24) / (1/6) = %.10f" % (ex4/area))
g = lambda x, y: 1.0
print(" 피적분이 1 이면 적분값이 넓이와 같은가:", abs(area - (xs - xs**2).sum()/M) < 1e-6)
# D 의 넓이 = int_0^1 (x - x^2) dx = 1/2 - 1/3 = 0.1666666667
# f 의 평균값 = (1/24) / (1/6) = 0.2500000000
# 피적분이 1 이면 적분값이 넓이와 같은가: True
# --- 심화 1: 순서를 바꾸면 값이 달라지는 예 -----------------------------
# f = (x^2 - y^2)/(x^2 + y^2)^2 on (0,1]^2
f2 = lambda x, y: (x**2 - y**2)/(x**2 + y**2)**2
N = 200000
s = (np.arange(N) + 0.5)/N
print(" f = (x^2-y^2)/(x^2+y^2)^2 의 안쪽 적분을 정밀하게 계산합니다")
print(" x int_0^1 f dy 이론 1/(1+x^2)")
for x in [0.1, 0.5, 1.0]:
print(" %.1f %+14.8f %+14.8f" % (x, f2(x, s).sum()/N, 1/(1+x**2)))
print(" y int_0^1 f dx 이론 -1/(1+y^2)")
for y in [0.1, 0.5, 1.0]:
print(" %.1f %+14.8f %+14.8f" % (y, f2(s, y).sum()/N, -1/(1+y**2)))
print(" 따라서 두 반복적분은 +pi/4 = %+.8f 와 -pi/4 = %+.8f" % (np.pi/4, -np.pi/4))
print(" 이유는 절댓값의 적분이 발산하기 때문입니다")
print(" 격자 N sum |f| / N^2")
for n in [200, 800, 3200]:
tt = (np.arange(n) + 0.5)/n
X2, Y2 = np.meshgrid(tt, tt, indexing='ij')
print(" %6d %14.4f" % (n, np.abs(f2(X2, Y2)).sum()/n**2))
# f = (x^2-y^2)/(x^2+y^2)^2 의 안쪽 적분을 정밀하게 계산합니다
# x int_0^1 f dy 이론 1/(1+x^2)
# 0.1 +0.99009901 +0.99009901
# 0.5 +0.80000000 +0.80000000
# 1.0 +0.50000000 +0.50000000
# y int_0^1 f dx 이론 -1/(1+y^2)
# 0.1 -0.99009901 -0.99009901
# 0.5 -0.80000000 -0.80000000
# 1.0 -0.50000000 -0.50000000
# 따라서 두 반복적분은 +pi/4 = +0.78539816 와 -pi/4 = -0.78539816
# 이유는 절댓값의 적분이 발산하기 때문입니다
# 격자 N sum |f| / N^2
# 200 5.2254
# 800 6.6117
# 3200 7.9980
# 촘촘히 할수록 커집니다. 수렴하지 않으므로 푸비니가 적용되지 않습니다.
# --- 심화 3: 차원이 오르면 격자가 무너진다 ------------------------------
print(" d 한 축 10 칸 격자의 점 수 오차 1e-3 에 필요한 점 수")
for d in [1, 2, 3, 6, 10, 20]:
print(" %3d %20.3e %20.3e" % (d, 10.0**d, (1e-3)**(-d/2.0)))
print(" 몬테카를로는 차원과 무관하게 오차가 N^{-1/2} 이라 1e-3 에 약 1e+06 점입니다")
rng = np.random.default_rng(20260809)
print(" 같은 예산으로 비교합니다. f = sum x_i^2 on [0,1]^d, 참값 d/3")
print(" d 격자(10^d 점) 오차 몬테카를로(10^6 점) 오차")
for d in [1, 2, 3, 6]:
ax = (np.arange(10) + 0.5)/10
G = np.meshgrid(*([ax]*d), indexing='ij')
grid_val = np.mean(np.sum([g**2 for g in G], axis=0))
Z = rng.random((10**6, d))
mc_val = np.mean(np.sum(Z**2, axis=1))
print(" %3d %18.3e %18.3e" % (d, abs(grid_val - d/3.0), abs(mc_val - d/3.0)))
# d 한 축 10 칸 격자의 점 수 오차 1e-3 에 필요한 점 수
# 1 1.000e+01 3.162e+01
# 2 1.000e+02 1.000e+03
# 3 1.000e+03 3.162e+04
# 6 1.000e+06 1.000e+09
# 10 1.000e+10 1.000e+15
# 20 1.000e+20 1.000e+30
# 몬테카를로는 차원과 무관하게 오차가 N^{-1/2} 이라 1e-3 에 약 1e+06 점입니다
# 같은 예산으로 비교합니다. f = sum x_i^2 on [0,1]^d, 참값 d/3
# d 격자(10^d 점) 오차 몬테카를로(10^6 점) 오차
# 1 8.333e-04 3.425e-04
# 2 1.667e-03 3.504e-04
# 3 2.500e-03 9.083e-04
# 6 5.000e-03 2.740e-04
# d=6 에서 격자는 10^6 점을 쓰고도 몬테카를로보다 나쁩니다.
심화 1의 표가 이 강의에서 가장 중요합니다. 안쪽 적분이 이론값과 소수 여덟째 자리까지 맞는데도 두 반복적분이 와 로 갈립니다.
104강에서 좌표를 바꿔 원형 영역을 다룹니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 이중적분 | 곡면 아래 부피입니다 | |
| 넓이 요소 | 직교좌표에서 입니다 | |
| 반복적분 | iterated integral | 한 변수씩 두 번 적분합니다 |
| 푸비니 정리 | Fubini | 순서 교환을 정당화합니다 |
| 토넬리 정리 | Tonelli | 절대적분가능이 조건입니다 |
| 유형 I | vertically simple | 세로선이 한 토막으로 자릅니다 |
| 유형 II | horizontally simple | 가로선이 한 토막으로 자릅니다 |
| 평균값 | 적분값을 넓이로 나눕니다 | |
| 차원의 저주 | curse of dimensionality | 비용이 로 늡니다 |
다음 104강에서는 극좌표에서의 적분을 다룹니다. 원형 영역이 극좌표에서 직사각형이 되며, 그 대가로 넓이 요소가 가 됩니다. 98강 문제 4에서 이미 구한 야코비 행렬식이 여기서 실제로 쓰이고, **가우스 적분 **가 이 좌표변환으로 계산됩니다. 그 값이 140강 정규분포의 정규화 상수입니다.