Gauss-Legendre-algoritmus

Kiejtés

  • IPA: [ ˈɡɒuʃlɛɡɛndrɛɒlɡoritmuʃ]

Főnév

Gauss-Legendre-algoritmus

  1. (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:

  1. Inicializálás:
    • ( a_0 = 1 )
    • ( b_0 = )
    • ( t_0 = )
    • ( p_0 = 1 )
  2. 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 )
  3. Végső érték:
    • A () értéke az (n)-edik iteráció után: [ ]



Algoritmus lépései

  1. Inicializáld az (a_0, b_0, t_0, p_0) értékeket.
  2. Iteratív számítás:
    • Frissítsd (a_{n+1}, b_{n+1}, t_{n+1}) és (p_{n+1}) értékeit.
  3. Konvergencia ellenőrzése:
    • Ha az (a_n) és (b_n) értékei egy bizonyos pontosságig megegyeznek, fejezd be az iterációt.
  4. 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

  1. Gyors konvergencia:
    • Az iterációk száma exponenciálisan növeli a számított () értékének pontosságát.
  2. Egyszerű számítások:
    • Az aritmetikai és geometriai átlagok egyszerűen számíthatók.
  3. Stabilitás:
    • Nagy pontosságú lebegőpontos számításokra alkalmas.



Hátrányok

  1. 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.
  2. Specifikus alkalmazhatóság:
    • Az algoritmus kizárólag () kiszámítására használható.



Alkalmazások

  1. Nagy pontosságú számítások:
    • Tudományos kutatások, ahol ()-t nagy pontossággal kell használni.
  2. Numerikus elemzések:
    • Geometriai és trigonometriai problémák pontos megoldása.
  3. 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.