Courses
Bạn từng thắc mắc làm sao 1 + 2 + 4 + 8 + ... có thể được biểu diễn bằng một công thức gọn gàng duy nhất chưa?
Dãy tổng (series) đơn giản là tổng các hạng tử của một dãy số (sequence). Khi các hạng tử tăng (hoặc giảm) bằng cách mỗi lần nhân với cùng một số, bạn có một cấp số nhân. Hệ số nhân không đổi đó gọi là công bội (common ratio), và chính nó làm nên toàn bộ cấu trúc.
Cấp số nhân xuất hiện khắp nơi, từ khoản vay, suy giảm tín hiệu, đến phân tích thuật toán. Biết cách làm việc với chúng là kỹ năng toán học thiết yếu cho bất kỳ ai làm việc với dữ liệu.
Trong bài viết này, tôi sẽ trình bày các công thức chính, giải thích khi nào một cấp số nhân vô hạn thực sự có tổng hữu hạn, và đi qua các ví dụ thực tế.
Nếu bạn đã biết các kiến thức cơ bản về Python, bạn đã sẵn sàng học những điều thú vị. Hãy đăng ký khóa học Nền tảng Học máy bằng Python kéo dài 16 giờ của chúng tôi.
Cấp số nhân là gì?
Cấp số nhân là tổng các hạng tử mà mỗi hạng tử thu được bằng cách nhân hạng tử trước đó với một công bội không đổi.
Ví dụ, xét 1 + 2 + 4 + 8 + 16. Mỗi hạng tử gấp đôi hạng tử liền trước. Yếu tố gấp đôi đó chính là điều khiến nó là cấp số nhân.
Có hai giá trị xác định mọi cấp số nhân:
- Hạng tử đầu (
a) - giá trị khởi đầu của dãy tổng - Công bội (
r) - hệ số nhân không đổi áp dụng cho mỗi hạng tử để được hạng tử tiếp theo
Nếu a = 1 và r = 2, bạn được 1 + 2 + 4 + 8 + .... Nếu a = 3 và r = 0.5, bạn được 3 + 1.5 + 0.75 + ... Cấu trúc luôn như vậy.
Đó là toàn bộ ý tưởng. Mỗi cấp số nhân chỉ là phép nhân lặp lại, bắt đầu từ a và được co giãn bởi r ở mỗi bước.
Cấp số nhân rời rạc (sequence) vs cấp số nhân (series)
Hai thuật ngữ này thường bị lẫn lộn, nhưng sự khác biệt có thể giải thích trong đúng một câu.
Cấp số nhân dưới dạng dãy (sequence) chỉ là một danh sách số: 1, 2, 4, 8, 16, trong khi cấp số nhân dưới dạng tổng (series) là những gì bạn nhận được khi cộng chúng lại: 1 + 2 + 4 + 8 + 16 = 31.
Các số là giống hệt nhau, nhưng phép toán là khác nhau. Dãy thì liệt kê, dãy tổng thì cộng lại.
Công thức cho cấp số nhân hữu hạn
Tổng của n hạng tử đầu tiên của một cấp số nhân được xác định bởi công thức sau:

Công thức tổng n hạng tử đầu tiên
Trong đó:
-
a= hạng tử đầu -
r= công bội -
n= số lượng hạng tử
Hãy đi qua một ví dụ đơn giản. Giả sử bạn muốn cộng 4 hạng tử đầu của 1 + 2 + 4 + 8. Ở đây, a = 1, r = 2, và n = 4.

Ví dụ cấp số nhân đơn giản
Bạn có thể tự kiểm chứng: 1 + 2 + 4 + 8 = 15. Công thức đưa bạn đến kết quả chỉ trong một bước, điều này quan trọng khi n lớn.
Cấp số nhân vô hạn và tính hội tụ
Đây là một khái niệm không thường gặp: một dãy tổng vô hạn có thể có tổng hữu hạn.
Xét 1 + 0.5 + 0.25 + 0.125 + .... Bạn có thể tiếp tục cộng các hạng tử mãi, nhưng tổng không bao giờ vượt quá 2. Đó là vì mỗi hạng tử mới nhỏ hơn hạng tử trước - đủ nhỏ để tổng tiến dần đến một giá trị cố định thay vì tăng vô hạn.
Hành vi này gọi là hội tụ, và nó chỉ xảy ra dưới một điều kiện: |r| < 1.
Khi công bội nằm giữa -1 và 1 (loại trừ), mỗi hạng tử sẽ nhỏ dần khi bạn đi dọc theo dãy tổng. Các hạng tử tiến về 0, nghĩa là cộng thêm nữa đóng góp ngày càng ít vào tổng. Tổng sẽ ổn định.
Nếu |r| ≥ 1, các hạng tử không nhỏ lại. Chúng giữ nguyên hoặc tăng, và tổng cứ tiếp tục tăng. Đó là dãy phân kỳ - không có tổng hữu hạn.
Dấu giá trị tuyệt đối quanh r là điều cần chú ý. Công bội -0.5 cũng hội tụ, vì các hạng tử luân phiên dấu nhưng vẫn nhỏ dần về 0.
Công thức cho cấp số nhân vô hạn
Khi |r| < 1, bạn có thể cộng một cấp số nhân vô hạn bằng một công thức duy nhất:

Công thức cấp số nhân vô hạn
Trong đó a là hạng tử đầu và r là công bội. Thế thôi - không cần n, vì dãy tổng không bao giờ dừng.
Hãy dùng ví dụ ở phần trước: 1 + 0.5 + 0.25 + 0.125 + .... Ở đây, a = 1 và r = 0.5.

Ví dụ cấp số nhân vô hạn
Tổng vô hạn chính xác là 2. Bạn có thể cộng mãi nhưng không bao giờ vượt quá nó.
Điều quan trọng cần lưu ý là công thức này chỉ hoạt động khi |r| < 1. Nếu dãy phân kỳ, công thức sẽ không còn hiệu lực và cho ra kết quả vô nghĩa. Hãy luôn kiểm tra điều kiện hội tụ trước khi áp dụng.
Vì sao tính hội tụ quan trọng
Không phải mọi dãy tổng vô hạn đều tiến về một tổng hữu hạn. Một số chỉ đơn giản là tiếp tục tăng.
Xét 1 + 2 + 4 + 8 + .... Ở đây r = 2, nghĩa là mỗi hạng tử lớn hơn hạng tử trước. Tổng không có giới hạn - nó tăng vô hạn. Đó là một dãy phân kỳ, và áp dụng công thức tổng vô hạn cho nó sẽ cho kết quả vô nghĩa.
Điều tương tự xảy ra khi r = 1. Dãy 3 + 3 + 3 + 3 + ... không bao giờ ngừng cộng dồn, nên không có tổng hữu hạn để nói tới.
Đó là lý do tại sao việc kiểm tra |r| < 1 trước khi dùng công thức là bắt buộc. Nếu dãy phân kỳ, công thức không hỏng theo cách hiển nhiên - nó chỉ cho bạn một con số có vẻ hợp lý nhưng hoàn toàn sai.
Cấp số nhân trong Python
Hãy đưa mọi thứ đã đề cập vào mã. Tôi sẽ hiện thực cả công thức tổng hữu hạn lẫn vô hạn, kiểm chứng kết quả, và trực quan hóa cách tổng từng phần ứng xử khi thêm nhiều hạng tử.
Cấp số nhân hữu hạn
Đây là toàn bộ logic Python bạn cần để hiện thực công thức cấp số nhân hữu hạn:
def finite_geometric_sum(a, r, n):
if r == 1:
return a * n
return a * (1 - r**n) / (1 - r)
result = finite_geometric_sum(a=1, r=2, n=4)
print(f"Finite sum (a=1, r=2, n=4): {result}")

Cấp số nhân hữu hạn trong Python
Cấp số nhân vô hạn
Câu chuyện tương tự với dãy vô hạn, bạn chỉ cần phát sinh lỗi nếu vi phạm điều kiện:
def infinite_geometric_sum(a, r):
if abs(r) >= 1:
raise ValueError(f"Series diverges for |r| >= 1. Got r={r}.")
return a / (1 - r)
# Example: 1 + 0.5 + 0.25 + ... (a=1, r=0.5)
result = infinite_geometric_sum(a=1, r=0.5)
print(f"Infinite sum (a=1, r=0.5): {result}")

Cấp số nhân vô hạn trong Python
Hàm sẽ phát sinh lỗi khi |r| >= 1 để bạn không âm thầm nhận được một đáp án sai.
Trực quan hóa tính hội tụ
Đây là phần thú vị. Với dãy hội tụ, tổng từng phần sẽ tiến dần đến giới hạn lý thuyết khi n tăng. Hãy vẽ đồ thị điều đó.
import numpy as np
import matplotlib.pyplot as plt
COLOR_DARK = "#1a1a2e"
COLOR_GREEN = "#03EF62"
COLOR_LIGHT_GRAY = "#cccccc"
a, r = 1, 0.5
n_terms = 30
theoretical_limit = infinite_geometric_sum(a, r)
# Compute partial sums
terms = a * r ** np.arange(n_terms)
partial_sums = np.cumsum(terms)
# Plot
fig, ax = plt.subplots(figsize=(10, 5), facecolor=COLOR_DARK)
ax.set_facecolor(COLOR_DARK)
ax.plot(range(1, n_terms + 1), partial_sums, color=COLOR_GREEN, linewidth=2, label="Partial sums")
ax.axhline(y=theoretical_limit, color=COLOR_LIGHT_GRAY, linewidth=1, linestyle="--", label=f"Limit = {theoretical_limit}")
ax.scatter(range(1, n_terms + 1), partial_sums, color=COLOR_LIGHT_GRAY, s=30, zorder=3)
# Style
for spine in ax.spines.values():
spine.set_visible(False)
ax.spines["bottom"].set_visible(True)
ax.spines["bottom"].set_color(COLOR_LIGHT_GRAY)
ax.spines["bottom"].set_alpha(0.3)
ax.tick_params(colors=COLOR_LIGHT_GRAY)
ax.xaxis.label.set_color(COLOR_LIGHT_GRAY)
ax.yaxis.label.set_color(COLOR_LIGHT_GRAY)
ax.set_xlabel("Number of terms")
ax.set_ylabel("Partial sum")
ax.set_title("Convergence of geometric series (a=1, r=0.5)", color=COLOR_LIGHT_GRAY, pad=15)
legend = ax.legend(facecolor=COLOR_DARK, edgecolor=COLOR_LIGHT_GRAY, labelcolor=COLOR_LIGHT_GRAY)
legend.get_frame().set_alpha(0.3)
plt.tight_layout()
plt.show()

Trực quan hóa dãy hội tụ
Tổng từng phần tiến về 2.0 và dần phẳng ra, chính xác là những gì tính hội tụ trông như trong thực tế. Mỗi hạng tử bổ sung đóng góp ít hơn hạng tử trước, và đường cong ổn định ở giới hạn lý thuyết.
Ứng dụng phổ biến của cấp số nhân
Cấp số nhân mô hình hóa các quy luật thực tế xuất hiện trong tài chính, vật lý, và khoa học máy tính.
Tài chính là ví dụ quen thuộc nhất. Khi bạn đầu tư với lãi suất cố định, số dư mỗi kỳ là số dư kỳ trước nhân với một hệ số không đổi. Tổng giá trị lợi nhuận kép theo thời gian là một cấp số nhân. Cấu trúc tương tự áp dụng cho khấu hao khoản vay và tính toán niên kim.
Vật lý dùng cấp số nhân để mô hình hóa quá trình suy giảm. Phóng xạ, suy hao tín hiệu, và tiêu tán năng lượng đều tuân theo một quy luật mà mỗi bước giảm đại lượng theo một công bội cố định. Bạn có thể coi tổng lượng chất phân rã theo thời gian vô hạn như một cấp số nhân hội tụ.
Trong khoa học máy tính, cấp số nhân xuất hiện trong phân tích thuật toán. Các thuật toán đệ quy chia đôi kích thước bài toán ở mỗi bước - như tìm kiếm nhị phân hoặc trộn sắp - tạo ra một cấp số nhân khi bạn đếm tổng công việc trên tất cả các mức. Chúng cũng xuất hiện trong các sơ đồ cấp phát bộ nhớ và chiến lược kích thước cấu trúc dữ liệu nơi dung lượng tăng theo một bội số cố định.
Lỗi thường gặp với cấp số nhân
Hầu hết sai sót với cấp số nhân xuất phát từ vài định nghĩa bị hiểu sai và một lần áp dụng công thức không đúng.
Nhầm lẫn giữa dãy (sequence) và dãy tổng (series)
Đây là lỗi phổ biến nhất. Dãy là danh sách, dãy tổng là phép cộng. Nếu ai đó hỏi về "cấp số nhân" và bạn liệt kê các hạng tử thay vì cộng chúng lại, bạn đã trả lời sai câu hỏi. Sự phân biệt này đặc biệt quan trọng khi câu trả lời kỳ vọng là một con số duy nhất.
Áp dụng công thức tổng vô hạn khi |r| ≥ 1
Đây là lỗi âm thầm. Công thức S = a / (1 - r) chỉ đúng khi dãy hội tụ. Nếu bạn đặt r = 2 và nhận được một con số trông gọn gàng, con số đó là vô nghĩa. Luôn kiểm tra |r| < 1 trước.
Xác định sai công bội
Điều này khó hơn nghe qua. Công bội r luôn là giá trị bạn nhân vào để được hạng tử kế tiếp - không phải hiệu giữa các hạng tử, và không phải hạng tử đầu chia cho hạng tử thứ hai. Với 3 + 6 + 12 + 24, công bội là 2, không phải 3. Chia bất kỳ hạng tử nào cho hạng tử liền trước để được r, và kiểm tra lại với vài cặp liên tiếp để chắc chắn nó thực sự không đổi.
Kết luận
Cấp số nhân là phép nhân lặp lại rồi cộng lại. Mỗi hạng tử suy ra từ hạng tử trước theo cùng một công bội, điều này khiến mẫu hình có thể dự đoán và các công thức dễ hiểu.
Điều kiện hội tụ - |r| < 1 - là điều bạn phải nhớ. Nó phân biệt một dãy có tổng hữu hạn có ý nghĩa với một dãy tăng vô hạn. Nếu bạn kiểm tra sai điều kiện này, mọi kết quả nhận được sẽ không còn giá trị.
Về cơ bản chỉ có vậy. Xác định công bội, kiểm tra điều kiện hội tụ, áp dụng đúng công thức. Không hơn không kém.
Nếu bạn thấy cấp số nhân dễ, hãy đọc Khai triển Taylor: Từ xấp xỉ đến tối ưu hóa - bài viết gần đây của chúng tôi - phần toán không đơn giản bằng, nhưng lời giải thích vẫn rõ ràng như vậy.
Câu hỏi thường gặp về cấp số nhân
Cấp số nhân là gì?
Cấp số nhân là tổng các hạng tử mà mỗi hạng tử thu được bằng cách nhân hạng tử trước với một giá trị không đổi gọi là công bội. Ví dụ, 1 + 2 + 4 + 8 là một cấp số nhân với hạng tử đầu là 1 và công bội là 2. Khác biệt then chốt giữa dãy (sequence) và dãy tổng (series) cấp số nhân là dãy thì liệt kê các hạng tử còn dãy tổng thì cộng chúng lại.
Khi nào một cấp số nhân vô hạn hội tụ?
Một cấp số nhân vô hạn hội tụ khi trị tuyệt đối của công bội nhỏ hơn 1, viết là |r| < 1. Khi điều kiện này thỏa mãn, các hạng tử nhỏ dần về 0 đủ nhanh để tổng tiến đến một giá trị hữu hạn. Nếu |r| ≥ 1, dãy phân kỳ và không có tổng hữu hạn.
Cấp số nhân được dùng ở đời thực ở đâu?
Cấp số nhân xuất hiện trong tài chính, vật lý và khoa học máy tính. Trong tài chính, lãi kép và tính toán niên kim dựa vào cấu trúc cấp số nhân. Trong khoa học máy tính, chúng xuất hiện trong phân tích các thuật toán đệ quy chia đôi kích thước bài toán ở mỗi bước, như tìm kiếm nhị phân và trộn sắp.
Sự khác nhau giữa công thức cấp số nhân hữu hạn và vô hạn là gì?
Công thức hữu hạn, S_n = a(1 - r^n) / (1 - r), cộng chính xác n hạng tử và hoạt động với mọi giá trị r trừ 1. Công thức vô hạn, S = a / (1 - r), chỉ áp dụng khi |r| < 1 và cho tổng của mọi hạng tử khi dãy kéo dài vô hạn. Sử dụng công thức vô hạn mà không kiểm tra hội tụ trước là một trong những lỗi phổ biến nhất khi làm việc với cấp số nhân.
Làm sao tìm công bội của một cấp số nhân?
Chia bất kỳ hạng tử nào cho hạng tử đứng ngay trước nó. Ví dụ, trong 3 + 6 + 12 + 24, chia 6 cho 3 cho công bội bằng 2. Để chắc chắn dãy thực sự là cấp số nhân, hãy kiểm tra rằng công bội giống nhau giữa vài cặp liên tiếp khác - nếu nó không hằng, bạn không đang làm việc với cấp số nhân.
