Gauss-Legendre-algoritmus
Kiejtés
- IPA: [ ˈɡɒuʃlɛɡɛndrɛɒlɡoritmuʃ]
Főnév
- (matematika) A Gauss-Legendre-algoritmus egy numerikus módszer a π (pi) nagy pontosságú kiszámítására. Az algoritmust Carl Friedrich Gauss és Adrien-Marie Legendre fejlesztette ki, és iteratív módon használja az aritmetikai-geometriai átlagot (AGM) és a ()-val kapcsolatos egyenleteket.
Fő ötlet
Az algoritmus iteratívan közelíti a ()-t az aritmetikai és geometriai átlagok, valamint a peremterületi integrálok kapcsolatának felhasználásával. Ez az eljárás gyorsan konvergál, és minden iteráció megduplázza a pontos tizedesjegyek számát.
Formulák
Az iterációk a következő lépéseket követik:
- Inicializálás:
- ( a_0 = 1 )
- ( b_0 = )
- ( t_0 = )
- ( p_0 = 1 )
- Iteráció:
- ( a_{n+1} = ) (aritmetikai átlag)
- ( b_{n+1} = ) (geometriai átlag)
- ( t_{n+1} = t_n - p_n (a_n - a_{n+1})^2 )
- ( p_{n+1} = 2 p_n )
- Végső érték:
- A () értéke az (n)-edik iteráció után: [ ]
Algoritmus lépései
- Inicializáld az (a_0, b_0, t_0, p_0) értékeket.
- Iteratív számítás:
- Frissítsd (a_{n+1}, b_{n+1}, t_{n+1}) és (p_{n+1}) értékeit.
- Konvergencia ellenőrzése:
- Ha az (a_n) és (b_n) értékei egy bizonyos pontosságig megegyeznek, fejezd be az iterációt.
- Számítsd ki () értékét.
Python implementáció
import math
def gauss_legendre(n_iterations=10):
# Inicializálás
a = 1.0
b = 1.0 / math.sqrt(2)
t = 1.0 / 4.0
p = 1.0
for _ in range(n_iterations):
a_next = (a + b) / 2
b_next = math.sqrt(a * b)
t_next = t - p * (a - a_next) ** 2
p_next = 2 * p
a, b, t, p = a_next, b_next, t_next, p_next
# Számítsd ki a π-t
pi = ((a + b) ** 2) / (4 * t)
return pi
# Példa használat
pi_approximation = gauss_legendre(n_iterations=10)
print(f"Pi értéke (10 iteráció): {pi_approximation}")
Kimenet (10 iteráció után):
Pi értéke (10 iteráció): 3.141592653589793
C++ implementáció
#include <iostream>
#include <cmath>
#include <iomanip>
double gauss_legendre(int n_iterations) {
double a = 1.0;
double b = 1.0 / std::sqrt(2.0);
double t = 0.25;
double p = 1.0;
for (int i = 0; i < n_iterations; ++i) {
double a_next = (a + b) / 2.0;
double b_next = std::sqrt(a * b);
double t_next = t - p * std::pow(a - a_next, 2);
double p_next = 2.0 * p;
a = a_next;
b = b_next;
t = t_next;
p = p_next;
}
return std::pow(a + b, 2) / (4.0 * t);
}
int main() {
int iterations = 10;
double pi_approximation = gauss_legendre(iterations);
std::cout << std::setprecision(15) << "Pi értéke (" << iterations << " iteráció): " << pi_approximation << std::endl;
return 0;
}
Kimenet (10 iteráció után):
Pi értéke (10 iteráció): 3.14159265358979
Előnyök
- Gyors konvergencia:
- Az iterációk száma exponenciálisan növeli a számított () értékének pontosságát.
- Egyszerű számítások:
- Az aritmetikai és geometriai átlagok egyszerűen számíthatók.
- Stabilitás:
- Nagy pontosságú lebegőpontos számításokra alkalmas.
Hátrányok
- Számítási költség:
- Nagy pontosság eléréséhez szükség van többszörös iterációra és precíz lebegőpontos aritmetikára.
- Specifikus alkalmazhatóság:
- Az algoritmus kizárólag () kiszámítására használható.
Alkalmazások
- Nagy pontosságú számítások:
- Tudományos kutatások, ahol ()-t nagy pontossággal kell használni.
- Numerikus elemzések:
- Geometriai és trigonometriai problémák pontos megoldása.
- Matematikai oktatás:
- Iteratív algoritmusok és konvergencia bemutatása.
Összegzés
A Gauss-Legendre-algoritmus az egyik leggyorsabb numerikus módszer () értékének kiszámítására. A gyors konvergencia miatt hatékonyan használható olyan problémák esetén, ahol a nagy pontosság kiemelkedően fontos. Habár az algoritmus számításigényes, pontossága miatt a modern numerikus analízis fontos eszköze.
- Gauss-Legendre-algoritmus - Értelmező szótár (MEK)
- Gauss-Legendre-algoritmus - Etimológiai szótár (UMIL)
- Gauss-Legendre-algoritmus - Szótár.net (hu-hu)
- Gauss-Legendre-algoritmus - DeepL (hu-de)
- Gauss-Legendre-algoritmus - Яндекс (hu-ru)
- Gauss-Legendre-algoritmus - Google (hu-en)
- Gauss-Legendre-algoritmus - Helyesírási szótár (MTA)
- Gauss-Legendre-algoritmus - Wikidata
- Gauss-Legendre-algoritmus - Wikipédia (magyar)