52700.fb2
F = Q ∗ G
Переписав F , G и Q в нашем представлении, получим
f + xF 1 = ( q + xQ 1) ∗ G = qG + xQ 1 ∗ G = q( g + xG 1) + xQ 1 ∗ G
= qg + x( qG 1 + Q 1 ∗ G)
Следовательно
q
= f / g
Q 1 = ( F 1 − qG 1)/ G
Если g = 0 деление имеет смысл только в том случае, если и f = 0. Переведём на Haskell:
184 | Глава 11: Ленивые чудеса
class Fractional a => Fractional (Ps a) where
(0 :+: fs) / (0 :+: gs) = fs / gs
(f :+: fs) / (g :+: gs) = q :+: ((fs - q .* gs)/(g :+: gs))
where q = f/g
fromRational x = p0 (fromRational x)
Производная и интеграл
Производная одного члена ряда вычисляется так:
d xn = nxn− 1
dx
Из этого выражения по свойствам производной
d
d
d
( f ( x) + g( x)) =
f ( x) +
g( x)
dx
dx
dx
d ( k ∗ f( x)) = k ∗ d f( x)
dx
dx
мы можем получить формулу для всего ряда:
d F( x) = f 1 + 2 f 2 x + 3 f 3 x 2 + 4 f 4 x 3 + ...
dx
Для реализации нам понадобится вспомогательная функция, которая будет обновлять значение допол-
нительного множителя n в выражении nxn− 1:
diff :: Num a => Ps a -> Ps a
diff (f :+: fs) = diff’ 1 fs
where diff’ n (g :+: gs) = (n * g) :+: (diff’ (n+1) gs)
Также мы можем вычислить и интеграл степенного ряда:
int :: Fractional a => Ps a -> Ps a
int (f :+: fs) = 0 :+: (int’ 1 fs)
where int’ n (g :+: gs) = (g / n) :+: (int’ (n+1) gs)
Элементарные функции
Мы можем выразить элементарные функции через операции взятия производной и интегрирования. К
примеру уравнение для ex выглядит так:
dy = y
dx