Lanczosova aproximace - Lanczos approximation - Wikipedia

v matematika, Lanczosova aproximace je metoda výpočtu funkce gama číselně, publikováno Cornelius Lanczos v roce 1964. Jedná se o praktickou alternativu k populárnějším Stirlingova aproximace pro výpočet funkce gama s pevnou přesností.

Úvod

Lanczosova aproximace se skládá ze vzorce

pro funkci gama, s

Tady G je konstantní které lze libovolně zvolit s výhradou omezení, které Re (z) > 1/2.[1] Koeficienty p, na kterých závisí G, jsou o něco obtížnější vypočítat (viz níže). I když zde uvedený vzorec platí pouze pro argumenty ve správném komplexu polorovina, lze ji rozšířit na celý složité letadlo podle reflexní vzorec,

Série A je konvergentní, a mohou být zkráceny pro získání aproximace s požadovanou přesností. Výběrem vhodného G (obvykle malé celé číslo), k výpočtu funkce gama s typickými je zapotřebí pouze 5–10 členů řady singl nebo dvojnásobek plovoucí bod přesnost. Pokud je opraveno G je možné zvolit koeficienty předem a součet je přepracován do následující podoby:

Výpočet funkce gama se tedy stává věcí vyhodnocení pouze malého počtu základní funkce a vynásobením uloženými konstantami. Lanczosovu aproximaci popularizoval Numerické recepty, podle kterého se výpočet funkce gama stává „ne mnohem obtížnějším než jiné vestavěné funkce, které považujeme za samozřejmost, například sinX nebo EX". Metoda je také implementována v Vědecká knihovna GNU.

Koeficienty

Koeficienty jsou dány vztahem

kde představuje (n, m) th prvek prvku matice koeficientů pro Čebyševovy polynomy, které lze vypočítat rekurzivně z těchto identit:

Godfrey (2001) popisuje, jak získat koeficienty a také hodnotu zkrácené řady A jako maticový produkt.[2]

Derivace

Lanczos odvodil vzorec Leonhard Euler je integrální

provedení sledu základních manipulací k získání

a odvození řady pro integrál.

Jednoduchá implementace

Následující implementace v Programovací jazyk Python pracuje pro složité argumenty a obvykle dává 15 správných desetinných míst. Upozorňujeme, že vynechání nejmenších koeficientů nevede k rychlejší, ale o něco méně přesné implementaci; koeficienty musí být přepočítány od nuly pro expanzi s méně výrazy.

z cmath import hřích, čtv, pi, expp = [676.5203681218851    ,-1259.1392167224028    ,771.32342877765313    ,-176.61502916214059    ,12.507343278686905    ,-0.13857109526572012    ,9.9843695780195716e-6    ,1.5056327351493116e-7    ]EPSILON = 1e-07def drop_imag(z):    -li břišní svaly(z.imag) <= EPSILON:        z = z.nemovitý    vrátit se zdef gama(z):    z = komplex(z)    -li z.nemovitý < 0.5:        y = pi / (hřích(pi * z) * gama(1 - z))  # Reflexní vzorec    jiný:        z -= 1        X = 0.99999999999980993        pro (i, pval) v vyjmenovat(p):            X += pval / (z + i + 1)        t = z + len(p) - 0.5        y = čtv(2 * pi) * t ** (z + 0.5) * exp(-t) * X    vrátit se drop_imag(y)"""Výše uvedené použití odrazu (tedy struktury if-else) je nutné, i když může to vypadat divně, protože umožňuje rozšířit aproximaci na hodnoty z kde Re (z) <0,5, kde Lanczosova metoda není platná."""tisk(gama(1))tisk(gama(5))   tisk(gama(0.5))

Viz také

Reference

  1. ^ Pugh, Glendon (2004). Analýza aproximace gama Lanczos (PDF) (Ph.D.).
  2. ^ Godfrey, Paul (2001). „Lanczosova implementace funkce gama“. Numericana.