精确分析复杂的递推关系(多项式函数的叠加)
设置a(n)=8*a(n-1)+3^n+7^n+n^2,按照以前的相同的处理方式有:
a(n-1)=8*a(n-2)+3^(n-1)+7^(n-1)+(n-1)^2
Go
上面两个式子(1)-7*(2)有:
a(n)-7*a(n-1)=8*{ a(n-1)- 7* a(n-2) } + 3^n - 7* 3^(n-1) + n^2-7*(n-1)^2
化简有:
a(n)-7*a(n-1)=8*{ a(n-1)- 7* a(n-2) } + - 4* 3^(n-1)+ n^2-7*(n-1)^2
递推有:
a(n-1)-7*a(n-2)=8*{ a(n-2)- 7* a(n-3) } + - 4* 3^(n-2)+ (n-1)^2-7*(n-2)^2
上面两个式子(1)-3*(2)有:
a(n)-a(n-1)-7*{a(n-1)-a(n-2)}=8*{ {a(n-1)-a(n-2)}-7*{a(n-2)-a(n-3)} }
+n^2-3*(n-1)^2+7*{(n-1)^2-(n-2)^2}
注意观察最后的尾项可以知道,虽然它陪着7^n,3^n进行了这些运算,但它的形式还是没有变化的,也就是说还是n^2的关系,还需要三次差分推导才能完全消除掉无关项。
所以特征方程可以化简为(x-7)*(x-8)*(x-3)*(x-1)^3=0
按照这种思维可以获得a(n)的通项公式:
a(n)=A*7^n+B*8^n+C*3^n+D*n^3+E*n^2+F*n
在这里先假定初始值为a(1),有如下方程组合:
A*7+B*8+C*3+D+E+F+G=a(1)
A*7^2+B*8^2+C*3^2+D*2^3+E*2^2+F*2^1+G=8*a(1)+7^2+3^2+2^2
A*7^3+B*8^3+C*3^3+D*3^3+E*3^2+F*3^1+G=8* { 8*a(1)+7^2+3^2+2^2 } +7^3+3^3+3^2
A*7^3+B*8^3+C*3^3+D*4^3+E*4^2+F*4^1+G=8* { 8* { 8*a(1)+7^2+3^2+2^2 } +7^3+3^3+3^2 } +7^3+3^3+4^2
A*7^3+B*8^3+C*3^3+D*5^3+E*5^2+F*5^1+G=8* { 8* { 8* { 8*a(1)+7^2+3^2+2^2 } +7^3+3^3+3^2 } +7^3+3^3+4^2 } +7^3+3^3+5^2
A*7^3+B*8^3+C*3^3+D*6^3+E*6^2+F*6^1+G=8* { { 8* { 8* { 8*a(1)+7^2+3^2+2^2 } +7^3+3^3+3^2 } +7^3+3^3+4^2 } +7^3+3^3+5^2 } +7^3+3^3+6^2
GO
不过我们可以用分部计算的方法,将ABC分为一组,将DEFG分为一组,分别针对对应的多项式解得:
A=-7
C=-3/5
因为对于1^2+2^2+3^2+..n^2=1/6*n*(n+1)*(2*n+1),而其中没有1^2,所以DEFG对应于多项式1/6*n*(n+1)*(2*n+1)-1
Go
1/6*(2*n^3+3*n^2+n)-1
所以
D=1/3
E=1/2
F=1/6
G=-1
回代入有:
a(1)=8*B-49-9/5+1/3+1/2+1/6-1
这里假设B=100
下面写程序来证明:
(defun pow (num count)
(if (or (> count 1) (eq count 1) )
(* num
(pow num
(- count 1) ) )
1))
(defun slayer ( count)
(if (or (> count 1) (eq count 1) )
(* count
(slayer
(- count 1) ) )
1))
(defun expr (n)
(if (eq n 1)
(+ (* 8.0
B)
-49
-9/5
1/3
1/2
1/6
-1)
(+ (* 8
(expr (- n
1)))
(pow 3
n)
(pow 7
n)
(pow n
2))))
(setq A -7)
(setq B 100)
(setq C -3/5)
(setq D 1/3)
(setq E 1/2)
(setq F 1/6)
(setq G -1)
(defun formula (n)
(+ (* A
(pow 7 n))
(* B
(pow 8.0 n))
(* C
(pow 3 n))
(* D
(pow n 3))
(* E
(pow n 2))
(* F
(pow n 1))
G))
(defun test (n)
(if (> n 0)
(progn
(print (expr n))
(print 'compare)
(print (formula n))
(test (- n 1)))
(print 'over)))
[16]> (test 1
1.0548799E11
COMPARE
1.0539682E11
1.3150682E10
COMPARE
1.3139285E10
1.6387886E9
COMPARE
1.6373641E9
2.0412715E8
COMPARE
2.0394923E8
2.5412672E7
COMPARE
2.5390508E7
3161782.3
COMPARE
3159059.3
393088.4
COMPARE
392773.4
48823.8
COMPARE
48795.8
6055.6
COMPARE
6055.6
749.2
COMPARE
749.2
OVER
OVER
从这个精确的计算过程中也可以看出结果大致是一样的,但其中有点误差。所以我们以前采用的分别计算ABC和DEFG的方法可能是不太准确的。