На этом шаге мы рассмотрим, где и как используется этот полином.
В предыдущем шаге показано, что если кратность корней ri, соответствующих члену (х - ri) в разложении на множители характеристического полинома, равна 1, то формула для T(n) будет содержать член Cirin. Если же кратность m корня r больше 1, то, исходя из (x - r)m, T(n) будет содержать m членов вида "константа * полином * rn", при этом полиномы должны иметь различные степени n в диапазоне от 0 до m - 1. Например, член (х - 2)4 в разложении на множители характеристического полинома привёл бы к четырём следующим слагаемым в формуле для T(n):
C12n + C2n2n + C3n22n + C4n32n
T(n) = C1P1(n)r1n + ... + CkPk(n)rkn, (3.42)
В качестве примера рассмотрим следующее рекуррентное соотношение:
T(n) = 5T(n - 1) - 9T(n - 2) + 7T(n - 3) - 2T(n - 4),
T(n) - 5T(n - 1) + 9T(n - 2) - 7T(n - 3) + 2T(n - 4) = 0,
x4 - 5x3 + 9x2 - 7x + 2.
Его можно разложить на множители (например, с помощью правила Руффини) следующим образом:
(x - 1)3(x - 2),
T(n) = C1 * 1 * 1n + C2 * n * 1n + C3 * n2 * 1n + C4 * 1 * 2n = = C1 + C2n + C3n2 + C42n,
C1 + C4 = 0 = T(0) C1 + C2 + C3 + 2C4 = 2 = T(1) C1 + 2C2 + 4C3 + 4C4 = 11 = T(2) C1 + 3C2 + 9C3 + 8C4 = 28 = T(3)
Её решение:
C1 = -1, C2 = -2, C3 = 3 и C4 = 1.
T(n) = -1 - 2n + 3n2 + 2n ∈ Θ(2n)
1 2 3 4 5 6 |
import numpy as np A = np.array([[1, 0, 0, 1], [1, 1, 1, 2], [1, 2, 4, 4], [1, 3, 9, 8]]) b = np.array([0, 2, 11, 28]) x = np.linalg.solve(A, b) |
На следующем шаге мы рассмотрим неоднородные рекуррентные соотношения.