스레드에서 주운 문제를 한 번 풀어 보자
by
gg582 · 2026-09-22 06:32:28 · 89 views · 5 min read
Table of contents
x \ge 1
f(x) = \int_{1}^{x} \frac{t^{2025} + t^{2024} + 1}{t^{2025} + t^{1885} + 1} \, dt
분모와 분수를 최고차항 t^{2025}로 나누어 정리하면:
f(x) = \int_{1}^{x} \frac{1 + t^{-1} + t^{-2025}}{1 + t^{-140} + t^{-2025}} \, dt
"무한은 곱하거나 나누어도 무한이다." 라는 문장이 최근 읽은 우리나라 수학책에 나왔습니다. 18세기 서양 뿐만 아니라 청을 통해 18-19세기 조선에도 무한의 개념은 일부 알려졌습니다. 산학 총서들에도 짧게나마 맥락이 나오고요. 따라서 최고차항으로 나누어 정리하는 것 역시 자연스러운 수리적 맥락입니다. 하지만 조선 시대에는 극한이나 무한 개념이 지적 유희로 여겨져 각광받지 못한 것도 사실이라서, 여러모로 독서할 때 아쉽습니다.
미적분학의 기본 정리에 의해 피적분함수가 곧 도함수이므로:
f'(x) = \frac{x^{2025} + x^{2024} + 1}{x^{2025} + x^{1885} + 1} = 1 + \frac{x^{2024} - x^{1885}}{x^{2025} + x^{1885} + 1}
무한히 커질 때 가장 발산 속도가 빠른 항을 따라가므로:
\lim_{x \to \infty} f'(x) = 1
구하고자 하는 식:
\lim_{n \to \infty} \sum_{k=2}^{10} \frac{f(n+2k) - f(n)}{(k-1)k(k+1)}
이때 분자 항을 정리하면:
f(n+2k) - f(n) = \int_{n}^{n+2k} f'(x) \, dx = \int_{n}^{n+2k} \left( 1 + \frac{x^{2024} - x^{1885}}{x^{2025} + x^{1885} + 1} \right) dx
n \to \infty일 때 피적분함수의 나머지 항은 \mathcal{O}(x^{-1}) 수준으로 감쇄하고 적분 구간의 길이는 2k로 고정되어 있으므로:
\lim_{n \to \infty} [f(n+2k) - f(n)] = \int_{n}^{n+2k} 1 \, dx = 1 \times (n+2k - n) = 2k
이를 원래 식에 대입하면 n의 영향이 사라지므로:
\sum_{k=2}^{10} \frac{2k}{(k-1)k(k+1)}
분모는 두 방정식의 곱입니다. 약분 가능하게 만들기 위해 두 식을 더하고 뺴는 관계로 2를 다시 표현해 줍시다.
기본적인 발상은 '이미 있는 것 두 개를 조합해서, 표기를 맞추기'로 생각해 주시면 마음이 편합니다. 암기하지 말고, 짝을 맞추고 다듬는 공업적 감각으로 봅시다.
= \sum_{k=2}^{10} \frac{2}{(k-1)(k+1)} = \sum_{k=2}^{10} \frac{(k+1) - (k-1)}{(k-1)(k+1)}
= \sum_{k=2}^{10} \left( \frac{1}{k-1} - \frac{1}{k+1} \right)
우리가 사랑하는 '항이 소거되는 수열'입니다.
= \left( 1 - \frac{1}{3} \right) + \left( \frac{1}{2} - \frac{1}{4} \right) + \left( \frac{1}{3} - \frac{1}{5} \right) + \left( \frac{1}{4} - \frac{1}{6} \right) + \left( \frac{1}{5} - \frac{1}{7} \right) + \left( \frac{1}{6} - \frac{1}{8} \right) + \left( \frac{1}{7} - \frac{1}{9} \right) + \left( \frac{1}{8} - \frac{1}{10} \right) + \left( \frac{1}{9} - \frac{1}{11} \right)
= \left( 1 + \frac{1}{2} \right) - \left( \frac{1}{10} + \frac{1}{11} \right) = \frac{3}{2} - \frac{21}{110}
= \frac{165 - 21}{110} = \frac{144}{110} = \frac{72}{55}
부족한 것과 꽉 찬 것이 대응하며 사라집니다.
러스트 코드로 짜 보자
fn res(n: u64) -> f64 {
assert!(n >= 2, "n >= 2 assertion failed.");
let n = n as f64;
1.5 - (2.0 * n + 1.0) / (n * n + n)
}
fn main() {
println!("{}", res(10));
}
1.3\dot{0}\dot{9} = 72/55
한 가지 확장 문제
그럼 마지막에 나온 2에서 10까지의 시그마를 극한으로 보내봅시다.
\sum_{k=2}^{10} \left( \frac{1}{k-1} - \frac{1}{k+1} \right)
를,
\lim_{n \to \infty} \sum_{k=2}^{n} \left( \frac{1}{k-1} - \frac{1}{k+1} \right)
으로 하면 어디로 수렴할까요?
러스트로 짜서 수치를 봅시다.
use std::io;
fn res(n: u64) -> f64 {
assert!(n >= 2, "n >= 2 assertion failed.");
let n = n as f64;
1.5 - (2.0 * n + 1.0) / (n * n + n)
}
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let tokens: Vec<&str> = input.split_whitespace().collect();
if tokens.len() == 1 {
let n: u64 = tokens[0].parse().unwrap();
println!("{}", res(n));
}
}
data = [
(2, "0.6666666666666666"),
(20, "1.4023809523809523"),
(200, "1.4900248756218906"),
(2000, "1.4990002498750625"),
(20000, "1.499900002499875"),
(200000, "1.499990000025"),
(200000000000000, "1.49999999999999")
]
for inp, out in data:
print(f"| {inp} | {out} |")
| 2 | 0.6666666666666666 |
| 20 | 1.4023809523809523 |
| 200 | 1.4900248756218906 |
| 2000 | 1.4990002498750625 |
| 20000 | 1.499900002499875 |
| 200000 | 1.499990000025 |
| 200000000000000 | 1.49999999999999 |
| 입력 | 결과 |
|---|---|
| 2 | 0.6666666666666666 |
| 20 | 1.4023809523809523 |
| 200 | 1.4900248756218906 |
| 2000 | 1.4990002498750625 |
| 20000 | 1.499900002499875 |
| 200000 | 1.499990000025 |
| 200000000000000 | 1.49999999999999 |
n = \infty
일 때는 1.5로 수렴하는 것으로 보입니다. 실제로 풀어 봅시다.
\sum_{k=2}^{n} \left( \frac{1}{k-1} - \frac{1}{k+1} \right)
= \left( 1 - \frac{1}{3} \right) + \left( \frac{1}{2} - \frac{1}{4} \right) + \left( \frac{1}{3} - \frac{1}{5} \right) + \dots + \left( \frac{1}{n-2} - \frac{1}{n} \right) + \left( \frac{1}{n-1} - \frac{1}{n+1} \right)
= 1 + \frac{1}{2} - \frac{1}{n} - \frac{1}{n+1}
= \frac{3}{2} - \left( \frac{1}{n} + \frac{1}{n+1} \right)
= \frac{3}{2} - \frac{(n+1) + n}{n(n+1)}
= \frac{3}{2} - \frac{2n+1}{n^2+n}
\lim_{n \to \infty} \sum_{k=2}^{n} \left( \frac{1}{k-1} - \frac{1}{k+1} \right) = \lim_{n \to \infty} \left( \frac{3}{2} - \frac{2n+1}{n^2+n} \right) = \frac{3}{2} - 0 = \frac{3}{2} = 1.5
P.S
yjlee@elegant:~/learn-math/쓰레드에서주운문제들/problem-1$ cargo run
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/problem-1`
100000000000000000
1.5
yjlee@elegant:~/learn-math/쓰레드에서주운문제들/problem-1$
64비트 실수형의 소수점 정밀도를 넘어가면 1.5로 수렴하는 걸 보일 수는 있습니다.
하지만 정말 수렴하는 게 맞는지 보이려면 엄밀히는 수식을 풀어야죠. 물론 프로그래밍에선 수식을 일일이 계산하지 않더라도, n의 범위를 보고 충분히 큰 n에 1.5 상수를 박아도 좋겠네요.
복잡하고 잘 알려져 생략한 것들 몇 가지
- 미적분학의 기본 정리 (Fundamental Theorem of Calculus)
- 제임스 그레고리(James Gregory)가 1668년 《Geometriae Pars Universalis》에서 기본정리에 해당하는 명제를 출판하고 증명
- 망원급수 (Telescoping Series)
- 피에트로 멩골리(Pietro Mengoli)가 1650년 《Novæ Quadraturæ Arithmetica》에서 망원식으로 소거되는 급수의 합을 명시적으로 계산
- 부분분수 분해 (Partial Fraction Decomposition)
- 고트프리트 빌헬름 라이프니츠(Gottfried Wilhelm Leibniz)와 요한 베르누이(Johann Bernoulli)가 1702년 독립적으로 부분분수 분해법을 발견
- 유한차분법 (Calculus of Finite Differences)
- 브룩 테일러(Brook Taylor)가 1715년 《Methodus Incrementorum Directa et Inversa》에서 유한차분을 체계적인 계산법으로 발전시킴
- 적분의 평균값 정리 (Mean Value Theorem for Integrals)
- 오귀스탱루이 코시(Augustin-Louis Cauchy)가 1823년 적분의 평균값 정리를 해석학적 일반형으로 정식화하고 증명
- 조임정리 (Squeeze Theorem)
- 베르나르 볼차노(Bernard Bolzano)가 1817년 수렴하는 양을 상하에서 끼워 극한을 결정하는 엄밀한 논법을 전개하고, 오귀스탱루이 코시(Augustin-Louis Cauchy)가 이를 1821년 해석학에 체계적으로 사용
- 균등수렴 (Uniform Convergence)
- 오귀스탱루이 코시(Augustin-Louis Cauchy)가 1821년 균등수렴에 해당하는 조건을 사용하고, 크리스토프 구데르만(Christoph Gudermann)이 1838년 이를 명시적으로 다루었으며, 카를 바이어슈트라스(Karl Weierstrass)가 19세기 중반 현대적인 개념으로 체계화
- 르베그 지배 수렴 정리 (Lebesgue's Dominated Convergence Theorem)
- 앙리 르베그(Henri Lebesgue)가 1908년 현대적인 형태의 지배 수렴 정리를 제시
- 고차 차분 및 보간법 (Higher-Order Differences and Interpolation)
- 유탁(劉焯)이 약 600년경 2차 보간법을 사용하고, 브라마굽타(Brahmagupta)가 625년경 독립적으로 2차 보간법을 제시했으며, 일행(一行)이 727년 부등간격 2차 보간법으로 발전시키고, 곽수경(郭守敬)이 1280년 3차 보간법을 사용했으며, 주세걸(朱世傑)이 1303년 고차 차분 계산법을 정립함.
- IEEE 754 부동소수점 연산 표준 (IEEE Standard for Floating-Point Arithmetic)
- 윌리엄 카한(William Kahan)이 주도한 IEEE 작업반이 1985년 IEEE 754-1985 최초판을 제정하여 이진 부동소수점 산술을 표준화
맞는지 찾아보기 귀찮아서 LLM 에이전트한테 몇 번 정정 요청해서 모아 왔습니다. 틀렸을 수도 있어요.