Thuật Toán VSOP87: Tính Tiết Khí Chính Xác Bằng Hoàng Kinh Mặt Trời
Chuyên mục: Thiên văn × Lập trình
Tiết khí (節氣, Solar Terms) là hệ thống phân chia năm mặt trời thành 24 khoảng, mỗi khoảng tương ứng với hoàng kinh Mặt Trời lệch 15°. Bài viết này giải thích cách tính toán chính xác thời điểm tiết khí bằng thuật toán VSOP87.
1. Hoàng Kinh Mặt Trời Là Gì?
Hoàng kinh (Ecliptic Longitude) là vị trí góc của Mặt Trời trên hoàng đạo, đo từ điểm Xuân Phân (0°). Một năm mặt trời = 360° hoàng kinh.
Tiết khí xảy ra khi hoàng kinh = bội số 15°:
Xuân Phân = 0° · Thanh Minh = 15° · Cốc Vũ = 30° · Lập Hạ = 45° · ... · Đông Chí = 270° · ... · Vũ Thủy = 330° · Kinh Trập = 345°
2. VSOP87 — Variations Séculaires des Orbites Planétaires
VSOP87 là lý thuyết chuyển động hành tinh do Pierre Bretagnon (Bureau des Longitudes, Paris) phát triển năm 1987. Nó mô hình hóa vị trí các hành tinh bằng chuỗi lượng giác với hơn 2000 số hạng cho Trái Đất.
Công thức cơ bản: L = L0(τ) + L1(τ)·τ + L2(τ)·τ² + L3(τ)·τ³ + ...
Trong đó: τ = (JDE - 2451545.0) / 365250 (Julian Millennia from J2000), Li(τ) = Σ Ak·cos(Bk + Ck·τ).
Độ chính xác: ±0.01 arcsecond (khoảng ±1 giây thời gian) cho giai đoạn -4000 đến +8000.
3. Tìm Thời Điểm Tiết Khí — Newton-Raphson
Bài toán: Cho hoàng kinh mục tiêu λ₀ (ví dụ 0° cho Xuân Phân), tìm thời điểm t sao cho L(t) = λ₀. Đây là bài toán tìm nghiệm phương trình phi tuyến, giải bằng phương pháp Newton-Raphson:
function findSolarTerm(targetLon, yearJDE) {
let t = estimateInitial(targetLon, yearJDE);
for (let i = 0; i < 50; i++) {
const L = sunLongitude(t); // VSOP87
const diff = normalizeAngle(L - targetLon);
if (Math.abs(diff) < 1e-8) break;
t -= diff / sunLongitudeRate(t);
}
return t;
}
Phương pháp hội tụ bậc hai — thường chỉ cần 3-5 vòng lặp để đạt độ chính xác đến giây.
4. Điểm Sóc (New Moon) — Thuật Toán Jean Meeus
Điểm Sóc (朔 Shuò) là thời điểm Mặt Trăng nằm giữa Trái Đất và Mặt Trời, đánh dấu ngày đầu tháng âm lịch. Thuật toán Jean Meeus (Astronomical Algorithms, Ch.49) dùng chuỗi đa thức + hiệu chỉnh nhiễu đối với các hành tinh.
Độ chính xác: ±2 phút cho giai đoạn 1900-2100.
5. Ứng Dụng: Xác Định Tháng Nhuận
Tháng nhuận (閏月) là tháng âm lịch không chứa Trung khí (中氣, hoàng kinh bội 30°). Thuật toán:
- Tính tất cả điểm Sóc trong năm (12-13 tháng)
- Tính 12 Trung khí (hoàng kinh 0°, 30°, 60°, ..., 330°)
- Tháng nào không chứa Trung khí → tháng nhuận
- Nếu có nhiều tháng → chọn tháng đầu tiên sau Đông Chí
Đây chính là lý do lịch âm VN và TQ đôi khi có tháng nhuận khác nhau — vì điểm Sóc và Trung khí được tính theo múi giờ khác nhau!