v numerická analýza , Clenshawův algoritmus , také zvaný Clenshawův součet , je rekurzivní metoda pro vyhodnocení lineární kombinace Čebyševovy polynomy .[1] [2] Jedná se o zobecnění Hornerova metoda pro vyhodnocení lineární kombinace monomials .
Zobecňuje se na více než jen Čebyševovy polynomy; vztahuje se na jakoukoli třídu funkcí, kterou lze definovat třemi termíny relace opakování .[3]
Clenshawův algoritmus V plné obecnosti algoritmus Clenshaw počítá vážený součet konečné řady funkcí ϕ k ( X ) { displaystyle phi _ {k} (x)} :
S ( X ) = ∑ k = 0 n A k ϕ k ( X ) { displaystyle S (x) = součet _ {k = 0} ^ {n} a_ {k} phi _ {k} (x)} kde ϕ k , k = 0 , 1 , … { displaystyle phi _ {k}, ; k = 0,1, ldots} je posloupnost funkcí, které uspokojují vztah lineární rekurence
ϕ k + 1 ( X ) = α k ( X ) ϕ k ( X ) + β k ( X ) ϕ k − 1 ( X ) , { displaystyle phi _ {k + 1} (x) = alpha _ {k} (x) , phi _ {k} (x) + beta _ {k} (x) , phi _ {k-1} (x),} kde koeficienty α k ( X ) { displaystyle alpha _ {k} (x)} a β k ( X ) { displaystyle beta _ {k} (x)} jsou známy předem.
Algoritmus je nejužitečnější, když ϕ k ( X ) { displaystyle phi _ {k} (x)} jsou funkce, které se komplikovaně počítají přímo, ale α k ( X ) { displaystyle alpha _ {k} (x)} a β k ( X ) { displaystyle beta _ {k} (x)} jsou obzvláště jednoduché. V nejběžnějších aplikacích α ( X ) { displaystyle alpha (x)} nezávisí na k { displaystyle k} , a β { displaystyle beta} je konstanta, která nezávisí na žádném X { displaystyle x} ani k { displaystyle k} .
Provést součet pro danou řadu koeficientů A 0 , … , A n { displaystyle a_ {0}, ldots, a_ {n}} , spočítat hodnoty b k ( X ) { displaystyle b_ {k} (x)} podle vzorce „zpětného“ opakování:
b n + 1 ( X ) = b n + 2 ( X ) = 0 , b k ( X ) = A k + α k ( X ) b k + 1 ( X ) + β k + 1 ( X ) b k + 2 ( X ) . { displaystyle { begin {aligned} b_ {n + 1} (x) & = b_ {n + 2} (x) = 0, b_ {k} (x) & = a_ {k} + alpha _ {k} (x) , b_ {k + 1} (x) + beta _ {k + 1} (x) , b_ {k + 2} (x). end {zarovnáno}}} Všimněte si, že tento výpočet neobsahuje žádný přímý odkaz na funkce ϕ k ( X ) { displaystyle phi _ {k} (x)} . Po výpočtu b 2 ( X ) { displaystyle b_ {2} (x)} a b 1 ( X ) { displaystyle b_ {1} (x)} , lze požadovaný součet vyjádřit pomocí nich a nejjednodušších funkcí ϕ 0 ( X ) { displaystyle phi _ {0} (x)} a ϕ 1 ( X ) { displaystyle phi _ {1} (x)} :
S ( X ) = ϕ 0 ( X ) A 0 + ϕ 1 ( X ) b 1 ( X ) + β 1 ( X ) ϕ 0 ( X ) b 2 ( X ) . { displaystyle S (x) = phi _ {0} (x) , a_ {0} + phi _ {1} (x) , b_ {1} (x) + beta _ {1} ( x) , phi _ {0} (x) , b_ {2} (x).} Viz Fox a Parker[4] pro více informací a analýzy stability.
Příklady Horner jako zvláštní případ Clenshawa Obzvláště jednoduchý případ nastane při hodnocení polynomu formy
S ( X ) = ∑ k = 0 n A k X k { displaystyle S (x) = součet _ {k = 0} ^ {n} a_ {k} x ^ {k}} .Funkce jsou jednoduše
ϕ 0 ( X ) = 1 , ϕ k ( X ) = X k = X ϕ k − 1 ( X ) { displaystyle { begin {aligned} phi _ {0} (x) & = 1, phi _ {k} (x) & = x ^ {k} = x phi _ {k-1} (x) end {zarovnáno}}} a jsou vytvářeny koeficienty rekurence α ( X ) = X { displaystyle alpha (x) = x} a β = 0 { displaystyle beta = 0} .
V tomto případě je vzorec opakování pro výpočet součtu
b k ( X ) = A k + X b k + 1 ( X ) { displaystyle b_ {k} (x) = a_ {k} + xb_ {k + 1} (x)} a v tomto případě je součet jednoduše
S ( X ) = A 0 + X b 1 ( X ) = b 0 ( X ) { displaystyle S (x) = a_ {0} + xb_ {1} (x) = b_ {0} (x)} ,což je přesně obvyklé Hornerova metoda .
Speciální případ pro Čebyševovu sérii Zvažte zkrácenou Čebyševova série
p n ( X ) = A 0 + A 1 T 1 ( X ) + A 2 T 2 ( X ) + ⋯ + A n T n ( X ) . { displaystyle p_ {n} (x) = a_ {0} + a_ {1} T_ {1} (x) + a_ {2} T_ {2} (x) + cdots + a_ {n} T_ {n }(X).} Koeficienty v relaci rekurze pro Čebyševovy polynomy jsou
α ( X ) = 2 X , β = − 1 , { displaystyle alpha (x) = 2x, quad beta = -1,} s původními podmínkami
T 0 ( X ) = 1 , T 1 ( X ) = X . { displaystyle T_ {0} (x) = 1, quad T_ {1} (x) = x.} Opakování tedy je
b k ( X ) = A k + 2 X b k + 1 ( X ) − b k + 2 ( X ) { displaystyle b_ {k} (x) = a_ {k} + 2xb_ {k + 1} (x) -b_ {k + 2} (x)} a konečná částka je
p n ( X ) = A 0 + X b 1 ( X ) − b 2 ( X ) . { displaystyle p_ {n} (x) = a_ {0} + xb_ {1} (x) -b_ {2} (x).} Jedním ze způsobů, jak to vyhodnotit, je pokračovat v opakování ještě o jeden krok a vypočítat
b 0 ( X ) = 2 A 0 + 2 X b 1 ( X ) − b 2 ( X ) , { displaystyle b_ {0} (x) = 2a_ {0} + 2xb_ {1} (x) -b_ {2} (x),} (všimněte si zdvojnásobení A 0 koeficient) následovaný
p n ( X ) = 1 2 [ b 0 ( X ) − b 2 ( X ) ] . { displaystyle p_ {n} (x) = { frac {1} {2}} vlevo [b_ {0} (x) -b_ {2} (x) vpravo].} Délka poledníku na elipsoidu Clenshawův součet se hojně používá v geodetických aplikacích.[2] Jednoduchá aplikace spočítá trigonometrickou řadu k výpočtu poledníkový oblouk vzdálenost na povrchu elipsoidu. Ty mají formu
m ( θ ) = C 0 θ + C 1 hřích θ + C 2 hřích 2 θ + ⋯ + C n hřích n θ . { displaystyle m ( theta) = C_ {0} , theta + C_ {1} sin theta + C_ {2} sin 2 theta + cdots + C_ {n} sin n theta. } Ponechání počáteční C 0 θ { displaystyle C_ {0} , theta} termín, zbytek je součtem příslušné formy. Neexistuje žádný vedoucí termín, protože ϕ 0 ( θ ) = hřích 0 θ = hřích 0 = 0 { displaystyle phi _ {0} ( theta) = sin 0 theta = sin 0 = 0} .
The relace opakování pro hřích k θ { displaystyle sin k theta} je
hřích ( k + 1 ) θ = 2 cos θ hřích k θ − hřích ( k − 1 ) θ { Displaystyle sin (k + 1) theta = 2 cos theta sin k theta - sin (k-1) theta} ,vytváření koeficientů v relaci rekurze
α k ( θ ) = 2 cos θ , β k = − 1. { displaystyle alpha _ {k} ( theta) = 2 cos theta, quad beta _ {k} = - 1.} a vyhodnocení série je dáno
b n + 1 ( θ ) = b n + 2 ( θ ) = 0 , b k ( θ ) = C k + 2 cos θ b k + 1 ( θ ) − b k + 2 ( θ ) , F Ó r n ≥ k ≥ 1. { displaystyle { begin {sladěno} b_ {n + 1} ( theta) & = b_ {n + 2} ( theta) = 0, b_ {k} ( theta) & = C_ {k} +2 cos theta , b_ {k + 1} ( theta) -b_ {k + 2} ( theta), quad mathrm {pro } n geq k geq 1. end {zarovnáno }}} Poslední krok je obzvláště jednoduchý, protože ϕ 0 ( θ ) = hřích 0 = 0 { displaystyle phi _ {0} ( theta) = sin 0 = 0} , takže konec opakování je jednoduše b 1 ( θ ) hřích ( θ ) { displaystyle b_ {1} ( theta) sin ( theta)} ; the C 0 θ { displaystyle C_ {0} , theta} termín je přidán samostatně:
m ( θ ) = C 0 θ + b 1 ( θ ) hřích θ . { displaystyle m ( theta) = C_ {0} , theta + b_ {1} ( theta) sin theta.} Všimněte si, že algoritmus vyžaduje pouze vyhodnocení dvou trigonometrických veličin cos θ { displaystyle cos theta} a hřích θ { displaystyle sin theta} .
Rozdíl v délkách oblouku poledníku Někdy je nutné vypočítat rozdíl dvou oblouků meridiánů způsobem, který udržuje vysokou relativní přesnost. Toho je dosaženo použitím trigonometrických identit k zápisu
m ( θ 1 ) − m ( θ 2 ) = C 0 ( θ 1 − θ 2 ) + ∑ k = 1 n 2 C k hřích ( 1 2 k ( θ 1 − θ 2 ) ) cos ( 1 2 k ( θ 1 + θ 2 ) ) . { displaystyle m ( theta _ {1}) - m ( theta _ {2}) = C_ {0} ( theta _ {1} - theta _ {2}) + součet _ {k = 1 } ^ {n} 2C_ {k} sin { bigl (} { textstyle { frac {1} {2}}} k ( theta _ {1} - theta _ {2}) { bigr) } cos { bigl (} { textstyle { frac {1} {2}}} k ( theta _ {1} + theta _ {2}) { bigr)}.} V tomto případě lze použít Clenshawův součet[5] za předpokladu, že současně počítáme m ( θ 1 ) + m ( θ 2 ) { displaystyle m ( theta _ {1}) + m ( theta _ {2})} a provést maticový součet,
M ( θ 1 , θ 2 ) = [ ( m ( θ 1 ) + m ( θ 2 ) ) / 2 ( m ( θ 1 ) − m ( θ 2 ) ) / ( θ 1 − θ 2 ) ] = C 0 [ μ 1 ] + ∑ k = 1 n C k F k ( θ 1 , θ 2 ) , { displaystyle { mathsf {M}} ( theta _ {1}, theta _ {2}) = { begin {bmatrix} (m ( theta _ {1}) + m ( theta _ {2 })) / 2 (m ( theta _ {1}) - m ( theta _ {2})) / ( theta _ {1} - theta _ {2}) end {bmatrix}} = C_ {0} { begin {bmatrix} mu 1 end {bmatrix}} + sum _ {k = 1} ^ {n} C_ {k} { mathsf {F}} _ {k} ( theta _ {1}, theta _ {2}),} kde
δ = 1 2 ( θ 1 − θ 2 ) , μ = 1 2 ( θ 1 + θ 2 ) , F k ( θ 1 , θ 2 ) = [ cos k δ hřích k μ hřích k δ δ cos k μ ] . { displaystyle { begin {aligned} delta & = { textstyle { frac {1} {2}}} ( theta _ {1} - theta _ {2}), mu & = { textstyle { frac {1} {2}}} ( theta _ {1} + theta _ {2}), { mathsf {F}} _ {k} ( theta _ {1}, theta _ {2}) & = { begin {bmatrix} cos k delta sin k mu displaystyle { frac { sin k delta} { delta}} cos k mu konec {bmatrix}}. end {zarovnáno}}} První prvek M ( θ 1 , θ 2 ) { displaystyle { mathsf {M}} ( theta _ {1}, theta _ {2})} je průměrná hodnota m { displaystyle m} a druhým prvkem je průměrný sklon. F k ( θ 1 , θ 2 ) { displaystyle { mathsf {F}} _ {k} ( theta _ {1}, theta _ {2})} uspokojuje recidivu
F k + 1 ( θ 1 , θ 2 ) = A ( θ 1 , θ 2 ) F k ( θ 1 , θ 2 ) − F k − 1 ( θ 1 , θ 2 ) , { displaystyle { mathsf {F}} _ {k + 1} ( theta _ {1}, theta _ {2}) = { mathsf {A}} ( theta _ {1}, theta _ {2}) { mathsf {F}} _ {k} ( theta _ {1}, theta _ {2}) - { mathsf {F}} _ {k-1} ( theta _ {1 }, theta _ {2}),} kde
A ( θ 1 , θ 2 ) = 2 [ cos δ cos μ − δ hřích δ hřích μ − hřích δ δ hřích μ cos δ cos μ ] { displaystyle { mathsf {A}} ( theta _ {1}, theta _ {2}) = 2 { begin {bmatrix} cos delta cos mu & - delta sin delta sin mu - displaystyle { frac { sin delta} { delta}} sin mu & cos delta cos mu end {bmatrix}}} nahrazuje α { displaystyle alpha} v relaci opakování a β = − 1 { displaystyle beta = -1} Na výtěžek lze nyní použít standardní algoritmus Clenshaw
B n + 1 = B n + 2 = 0 , B k = C k Já + A B k + 1 − B k + 2 , F Ó r n ≥ k ≥ 1 , M ( θ 1 , θ 2 ) = C 0 [ μ 1 ] + B 1 F 1 ( θ 1 , θ 2 ) , { displaystyle { begin {aligned} { mathsf {B}} _ {n + 1} & = { mathsf {B}} _ {n + 2} = { mathsf {0}}, { mathsf {B}} _ {k} & = C_ {k} { mathsf {I}} + { mathsf {A}} { mathsf {B}} _ {k + 1} - { mathsf {B} } _ {k + 2}, qquad mathrm {pro } n geq k geq 1, { mathsf {M}} ( theta _ {1}, theta _ {2}) & = C_ {0} { begin {bmatrix} mu 1 end {bmatrix}} + { mathsf {B}} _ {1} { mathsf {F}} _ {1} ( theta _ {1 }, theta _ {2}), end {zarovnáno}}} kde B k { displaystyle { mathsf {B}} _ {k}} jsou matice 2 × 2. Konečně máme
m ( θ 1 ) − m ( θ 2 ) θ 1 − θ 2 = M 2 ( θ 1 , θ 2 ) . { displaystyle { frac {m ( theta _ {1}) - m ( theta _ {2})} { theta _ {1} - theta _ {2}}} = { mathsf {M} } _ {2} ( theta _ {1}, theta _ {2}).} Tuto techniku lze použít v omezit θ 2 = θ 1 = μ { displaystyle theta _ {2} = theta _ {1} = mu} a δ = 0 { displaystyle delta = 0 ,} současně počítat m ( μ ) { displaystyle m ( mu)} a derivát d m ( μ ) / d μ { displaystyle dm ( mu) / d mu} , za předpokladu, že při hodnocení F 1 { displaystyle { mathsf {F}} _ {1}} a A { displaystyle { mathsf {A}}} ,bereme lim δ → 0 ( hřích δ ) / δ = 1 { displaystyle lim _ { delta rightarrow 0} ( sin delta) / delta = 1} .
Viz také Reference ^ Clenshaw, C. W. (červenec 1955). „Poznámka k shrnutí Čebyševovy série“ . Matematické tabulky a další pomůcky k výpočtu . 9 (51): 118. doi :10.1090 / S0025-5718-1955-0071856-0 . ISSN 0025-5718 . Všimněte si, že tento článek je napsán ve smyslu Posunuto Čebyševovy polynomy prvního druhu T n ∗ ( X ) = T n ( 2 X − 1 ) { displaystyle T_ {n} ^ {*} (x) = T_ {n} (2x-1)} .^ A b Tscherning, C. C .; Poder, K. (1982), „Některé geodetické aplikace Clenshawovy sumace“ (PDF) , Bolletino di Geodesia e Scienze Affini , 41 (4): 349–375, archivovány od originál (PDF) dne 12.6.2007, vyvoláno 2012-08-02 ^ Stiskněte, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP (2007), „Oddíl 5.4.2. Clenshawův opakovací vzorec“ , Numerické recepty: Umění vědecké práce na počítači (3. vyd.), New York: Cambridge University Press, ISBN 978-0-521-88068-8 ^ Fox, Leslie; Parker, Ian B. (1968), Čebyševovy polynomy v numerické analýze , Oxford University Press, ISBN 0-19-859614-6 ^ Karney, C. F. F. (2014), Clenshawovo vyhodnocení diferencovaných částek