Post by bartekltgPost by DMROgólnie - rozwinięcie C i S w szereg jest znane i pewnie można sobie parametry
do aproksymacji policzyć.
Ale to już może na emeryturze... ;-)
To akurat nie takie trudne.
http://pl.wikipedia.org/wiki/Przybli%C5%BCenie_Pad%C3%A9#Obliczanie
http://en.wikipedia.org/wiki/Pad%C3%A9_table#Notation
Może jednak napiszę więcej.
F(x) nasza funkcja.
Taylor
G(x) = sum_{i=0}^{n+m} c_i x^i
Pade
H(x) = p(x)/q(x) = ( sum_{i=0}^{m} a_i x^i ) / ( sum_{i=0}^{n} b_i x^i )
b_0 = 1;
Chcemy, aby n ta pochodna w zero była identyczna
F^{k}(0) = G^{k}(0) = H^{k}(0) k<=m+n
Policzyć pochodne G łatwo, H nieco trudniej.
Z drugiej strony rozwinięcie w taylora
T[p(x)/q(x)] będzie się zgadzało z G(x) na m+n+1 miejscach.
T[p(x)/q(x)] = G(x) + Reszta(x)
Trochę machając rękami
p(x) = G(x)q(x) + Reszta(x)q(x)
Reszta*q jest stopnia co najmniej m+n+1
Możemy rozpisać równania na współczynniki p(x)
Dostajemy wzorek z wikipedii.
a_i = sum_{j=0}^i b_j*c_{i-j}
i warunki a_i=0 i>m
b_j = 0 j>n
*****************
Jak to teraz rozwiązać.
Najpierw trzeba zauważyć, ze równań nie jest m!
Jest ich m+n+1. Dla i>m mamy po prostu 0 = sum_{j=0}^i b_j*c_{i-j}
Dopiero gdy i = m+n+1 i następnych równanie nie dodaje nam informacji
i można je pominąć.
Równanie nadal jest niewygodne. Trzeba jeszcze jednej sztuczki.
sum_{j=0}^i b_j*c_{i-j} - a_i = 0
Niech wektor v składa się z współczynników a, następnie
współczynników b.
v = [a;b]
Równanie przybiera postać Av = 0
Takie rozwiązanie istnieje (dlaczego). v dobieramy tak,
aby odpowiednik b_0 =1
(można ułożyć lepsze równanie, tak, aby bezpośrednio szukać
rozwiązania, a nie przestrzeni zerowej, ale to już do zrobienia
na poziomie wklepywania równane do matalba/octave).
pzdr
bartekltg