之前沿研究常微分方程的冪級數解法時讀到了一篇寶藏級別的文獻,不襟感嘆簡直就是滄海遺珠。這篇上世紀九十年代文獻提供了一種求解 n 階線性變係數非齊次差分方程的方法。文章的內容信息量很大,我當時也是研究了幾天才搞明白這個方法。下面,我就將最為基礎的——求解二階線性變係數齊次差分方程的方法總結一下,這樣大家今後遇到此類差分方程就可以多一個解決辦法(說不定會用在高考數學的壓軸題中哦!)

首先,差分方程通俗地講就是我們所說的遞推關係。我們最熟悉的一個二階線性常係數的差分方程應該就是 Fibonacci 數列的差分方程了:

a_{k+2}=a_{k+1}+a_{k},     k=0,1,2,...

這是一個最簡單(而且不缺項)的二階常係數線性差分方程了,處理這個差分方程的方法大家都可以在網上找到,所以這裡就不在贅述了。我們今天所要討論的差分方程是:

a_{k+2}=f_{1}left(k
ight)cdot a_{k+1}+f_{2}left( k 
ight)cdot a_{k},     k=0,1,2,...

很顯然, a_{n+1}a_{n} 的係數都是隨 n 變化的。而今天的主角是——線性代數解法,在開始之前要先引入兩個算符:

left( 1 
ight)f_{alpha _{1}}left ( k-1 
ight )cdot f_{alpha _{2}}left ( k-2
ight )cdot...cdot  f_{alpha _{i}}left ( k-i 
ight ):=prod_{m=k-i}^{k-1}f_{alpha _{1}cupalpha _{2}cup ...cup alpha _{i} }left ( m 
ight )

f_{0}=1,     f_{i}=0    (i>n)

n 為差分方程的階數。

left( 2
ight)sum_{i}(prod_{m=k-i}^{k-1}f_{alpha _{1}cupalpha _{2}cup ...cup alpha _{i} }left ( m 
ight ))=sum_{alpha _{1}+alpha _{2}+...+alpha _{i}=i}(prod_{m=k-i}^{k-1}f_{alpha _{1}cupalpha _{2}cup ...cup alpha _{i} }left ( m 
ight ))=prod_{m=k-i}^{k-1}f_{icup0cup ...cup 0 }left ( m 
ight )

+prod_{m=k-i}^{k-1}f_{i-1cup0cup ...cup 1 }left ( m 
ight )+prod_{m=k-i}^{k-1}f_{i-2cup0cup ...cup 2cup 0 }left ( m 
ight )+prod_{m=k-i}^{k-1}f_{i-3cup0cup ...cup 3cup 0cup 0 }left ( m 
ight )+...+prod_{m=k-i}^{k-1}f_{1cup i-1cup ...cup 0 }left ( m 
ight )

+prod_{m=k-i}^{k-1}f_{i-2cup0cup ...cup 1cup 1 }left ( m 
ight )+prod_{m=k-i}^{k-1}f_{i-3cup0cup ...cup 2cup 0cup 1  }left ( m 
ight )+prod_{m=k-i}^{k-1}f_{i-3cup0cup ...cup 1cup 2cup 0 }left ( m 
ight )+prod_{m=k-i}^{k-1}f_{ i-3cup ...cup 1cup 1cup 1}left ( m 
ight )+...

+prod_{m=k-i}^{k-1}f_{ underbrace{1cup ...cup 1cup 1cup 1}_{	ext{i}}}left ( m 
ight )

首先,有必要說一下這兩個算符是如何進行運算的:

left( 1 
ight) :這個算符比較簡單,沒什麼好說的,比如:

prod_{m=k-4}^{k-1}f_{3cup2cup 1cup 0 }left ( m 
ight )=f_{3}left ( k-1 
ight )cdot f_{2}left ( k-2
ight )cdot f_{1}left ( k-3 
ight )cdot  f_{0}left ( k-4
ight )xrightarrow[ ]{f_{0}=1}f_{3}left ( k-1 
ight )cdot f_{2}left ( k-2
ight )cdot f_{1}left ( k-3 
ight )

第一個下標 alpha_{1} 對應上限(這裡指的是 alpha_{1}=3 ),最後一個下標對應下限(這裡指的是 alpha_{4}=0

left( 2
ight) :我猜這個一定不好理解,所以我們好好說一下

這個算符理解的難點在於下標的變化規律,比如下面的例子:

sum_{6}(prod_{m=k-6}^{k-1}f_{alpha _{1}cupalpha _{2}cup ...cup alpha _{6} }left ( m 
ight ))=sum_{alpha _{1}+alpha _{2}+...+alpha _{6}=6}(prod_{m=k-6}^{k-1}f_{alpha _{1}cupalpha _{2}cup ...cup alpha _{6} }left ( m 
ight ))left( igstar 
ight)

這就是說 f 所有下標之和為 6 ,即:

alpha _{1}+alpha _{2}+...+alpha _{6}=6

最後一個 alpha 的下標就是 i (這裡 i=6 )。但並不是所有和為 6 alpha_{i} 都滿足條件,比如 401010 就不行,這個 alpha_{i} 的取值是有規律的(以下是從 alpha_{1}alpha_{6} 的所有可能性):

600000

500001

400020,400011

300300,300201,300120,300111

204000,203001,202020,202011,201300,201201,201120,201111(star)

150000,140001,130020,130011,120300,120201,120120,120111,114000,113001,112020,112011,111300,111201,111120,111111

可見其變化的個數分別是: 2^{0},2^{0},2^{1},2^{2},2^{3},2^{4} 。即使這樣列出來我們恐怕也難以發現規律,所以,我們要仔細研究一下這些數字究竟是如何變化的:

首先,一個比較明顯的規律是:

600000
ightarrow500001
ightarrow400011
ightarrow300111
ightarrow201111
ightarrow111111

第一位每減少 1 就從最後一位開始向前將 0 變為 1 ,始終保持和為 6

另外一個比較明顯的規律是:

600000
ightarrow500001
ightarrow400020
ightarrow300300
ightarrow204000
ightarrow150000

第一位第一次減少 1 就把最後一位的 0 變為 1 ;第二次減少 1 就把倒數第二位的 0 變為 2並將倒數第二位之後的所有數字清零;第三次減少 1 就把倒數第三位的 0 變為 3 並將倒數第三位之後的所有數字清零;...以此類推,始終保持和為 6

下面便是比較不容易發現的規律了:

20
ightarrow 11

300
ightarrow 201
ightarrow 120
ightarrow 111

4000
ightarrow 3001
ightarrow 2020
ightarrow 2011
ightarrow 1300
ightarrow 1201
ightarrow 1120
ightarrow 1111

50000
ightarrow40001
ightarrow30020
ightarrow30011
ightarrow20300
ightarrow20201
ightarrow20120
ightarrow20111
ightarrow14000
ightarrow13001
ightarrow12020
ightarrow12011
ightarrow11300
ightarrow11201
ightarrow11120
ightarrow11111

按理來講,有規律的東西應該可以利用一個公式進行描述,但很可惜,原文中並沒有給出這樣一個公式,而我雖可以發現規律,但卻也不能夠發現這條公式。所以,我只能盡量用文字把這些數字之間的變化規律講清楚。(如果有哪位見多識廣的大佬能夠發現或者知道規律公式的,還請留在評論中,不勝感激!)

我就從上面選一條不長也不短的式子進行解釋好了(全部開頭數字是 20,我就省略不寫了 ):

(star)4000
ightarrow 3001
ightarrow 2020
ightarrow 2011
ightarrow 1300
ightarrow 1201
ightarrow 1120
ightarrow 1111

首先是四條總則:

  • 最後面的兩位只要是 20 就先變成 11
  • 要把所有數字全部變為 1
  • 只要後面是 1 便無法在更變,開始新一輪的更變。
  • 開頭變為 1 之後便可保留不動,以第二位數字為新的開頭數字並重複之前過程(詳見下)。

在總則的基礎上,我們再詳細看看這些數字是如何變化的:

left( 1 
ight) 除開頭數字以外,其餘所有數字都為零,就把最後一位變為 1 ,然後將開頭數字減 1

4000
ightarrow 3001

left( 2 
ight) 最後一位數字變為 1 之後便無法在改變。此時,將最後兩位數字變為 20 ,同時將開頭數字減 1

 3001
ightarrow 2020

left( 3 
ight) 使用總則第一條:

2020
ightarrow 2011

left( 4 
ight) 此時最後兩位已是 11 ,便無法在變化。於是將最後三位的數字變為 300 同時將開頭數字減 1

 2011
ightarrow 1300

left( 5 
ight) 此時首位已變為 1 則保留首位,變化後面所有位。此時 3 變為了新的開頭數字,則以 3 為新的開頭數字重複過程 left( 1 
ight)-left( 4 
ight) 即可。

1300
ightarrow 1201
ightarrow 1120
ightarrow 1111

其餘所有其他變化均滿足以上規律,只不過是變化數量多少的問題。顯然,從 600000-111111 總的變化也符合該規律。

所以,利用第一個算符, left( igstar 
ight) 式展開為 left( f_0=1 
ight)

sum_{6}(prod_{m=k-6}^{k-1}f_{alpha _{1}cupalpha _{2}cup ...cup alpha _{6} }left ( m 
ight ))=sum_{alpha _{1}+alpha _{2}+...+alpha _{6}=6}(prod_{m=k-6}^{k-1}f_{alpha _{1}cupalpha _{2}cup ...cup alpha _{6} }left ( m 
ight ))

=f_{6}(k-1)+f_{5}(k-1)f_{1}(k-6)+f_{4}(k-1)f_{2}(k-5)+f_{3}(k-1)f_{3}(k-4)+f_{2}(k-1)f_{4}(k-3)+f_{1}(k-1)f_{5}(k-2)

+f_3(k-1)f_2(k-3)f_1(k-6)+f_3(k-1)f_1(k-4)f_2(k-5)+f_3(k-1)f_1(k-4)f_1(k-5)f_1(k-6)

+f_2(k-1)f_3(k-3)f_1(k-6)+f_2(k-1)f_2(k-3)f_2(k-5)+f_2(k-1)f_2(k-3)f_1(k-5)f_1(k-6)

+f_2(k-1)f_1(k-3)f_3(k-4)+f_2(k-1)f_1(k-3)f_2(k-4)f_1(k-6)+f_2(k-1)f_1(k-3)f_1(k-4)f_2(k-5)

+f_2(k-1)f_1(k-3)f_2(k-4)f_1(k-5)f_1(k-6)+f_1(k-1)f_4(k-2)f_1(k-6)+f_1(k-1)f_3(k-2)f_2(k-5)

+f_1(k-1)f_3(k-2)f_1(k-5)f_1(k-6)+f_1(k-1)f_2(k-2)f_3(k-4)+f_1(k-1)f_2(k-2)_2(k-4)f_1(k-6)

+f_1(k-1)f_2(k-2)f_1(k-4)f_2(k-5)+f_1(k-1)f_2(k-2)f_1(k-4)f_1(k-5)f_1(k-6)+f_1(k-1)f_1(k-2)f_4(k-3)

+f_1(k-1)f_1(k-2)f_3(k-3)f_1(k-6)+f_1(k-1)f_1(k-2)f_2(k-3)f_2(k-5)+f_1(k-1)f_1(k-2)f_2(k-3)f_1(k-5)f_1(k-6)

+f_1(k-1)f_1(k-2)f_1(k-3)f_3(k-4)+f_1(k-1)f_1(k-2)f_1(k-3)f_2(k-4)f_1(k-6)

+f_1(k-1)f_1(k-2)f_1(k-3)f_1(k-4)f_2(k-5)+f_1(k-1)f_1(k-2)f_1(k-3)f_1(k-4)f_1(k-5)f_1(k-6)

知道了這兩個算符是如何進行計算之後,我們就可以進入正題了:

對於這樣的一個二階線性差分方程,我們將其改寫成為矩陣形式:

a_{k+2}=f_{1}left(k
ight)cdot a_{k+1}+f_{2}left( k 
ight)cdot a_{k}Leftrightarrowegin{pmatrix} a_{k+1}\  a_{k+2} end{pmatrix}=egin{pmatrix} 0 & 1\  f_2(k) & f_1(k) end{pmatrix}cdot egin{pmatrix} a_{k}\  a_{k+1} end{pmatrix}

現定義:

vec{A}(k+1):=egin{pmatrix} a_{k+1}\  a_{k+2} end{pmatrix},     vec{A}(k):=egin{pmatrix} a_{k}\  a_{k+1} end{pmatrix},     vec{A}(0):=egin{pmatrix} a_{0}\  a_{1} end{pmatrix}

Fleft( k 
ight):=egin{pmatrix} 0 & 1\  f_2(k) & f_1(k) end{pmatrix}

vec{A}(0)初值矢量。從而,上式可以改寫為:

vec{A}(k+1)=F(k)cdotvec{A}(k)

引理1: vec{A}(k+1)=prod_{i=0}^{k}F(i)cdotvec{A}(0)

Proof

利用數學歸納法: vec{A}(1)=F(0)cdotvec{A}(0) left( i 
ight)vec{A}(2)=F(1)cdotvec{A}(1)=F(1)cdot F(0)cdotvec{A}(0) 假設 k=n 時成立: left( ii 
ight)vec{A}(n+1)=prod_{i=0}^{n}F(i)cdotvec{A}(0)

k=n+1 時:

(iii)vec{A}(n+2)=prod_{i=0}^{n+1}F(i)cdotvec{A}(0)=F(n+1)cdot vec{A}(n+1) Q.E.D

現在再定義:

G(h):=F(k)cdot F(k-1)cdot...cdot F(k-h)=prod_{i=k-h}^{k}F(i):=left[ g_{2	imes2}left( h 
ight)
ight]=egin{pmatrix} g_{11}(h) & g_{12}(h)\  g_{21}(h) & g_{22}(h) end{pmatrix}

所以:

G(k)=prod_{i=0}^{k}F(i)

vec{A}(k+1)=G(k)cdotvec{A}(0)

即:

egin{pmatrix} a_{k+1}\  a_{k+2} end{pmatrix}=egin{pmatrix} g_{11}(k) & g_{12}(k)\  g_{21}(k) & g_{22}(k) end{pmatrix}cdotegin{pmatrix} a_{0}\  a_{1} end{pmatrix}=egin{pmatrix} a_{0}cdot g_{11}(k)+a_{1}cdot g_{12}(k)\  a_{0}cdot g_{21}(k)+a_{1}cdot g_{22}(k) end{pmatrix}

Rightarrow a_{k+1}=a_{0}cdot g_{11}(k)+a_{1}cdot g_{12}(k)=sum_{j=1}^{2}{a_{j-1}cdot g_{1j}}(k)

當然,對於二階矩陣 G(h) 也有對應的遞推公式:

G(h+1)=G(h)cdot F(k-h-1)

其等價寫法是:

g_{11}(h+1)=g_{12}(h)cdot f_{2}(k-h-1)

g_{12}(h+1)=g_{11}(h)+g_{12}(h)cdot f_{1}(k-h-1)

且:

left{egin{matrix} g_{11}(0)=0\  g_{12}(0)=1 end{matrix}
ight.,     left{egin{matrix} g_{11}(1)=f_{2}(k-1)\  g_{12}(1)=f_{1}(k-1) end{matrix}
ight.

引理2:

g_{11}(h)=sum_{i=1}^{h-1}f_{h+1-i}(k-i-1)cdot[sum_{i}(prod_{m=k-i}^{k-1}f_{alpha _{1}cupalpha _{2}cup ...cup alpha _{i} }left ( m 
ight ))]

g_{12}(h)=f_{h}(k-1)+sum_{i=1}^{h-1}f_{h-i}(k-i-1)cdot [sum_{i}(prod_{m=k-i}^{k-1}f_{alpha _{1}cupalpha _{2}cup ...cup alpha _{i} }left ( m 
ight ))],     (hgeq2 )wedge (pgeq3,f_{p}=0)wedge (f_{0}=1)

由於證明過程太繁瑣,這個引理就不進行證明了。可以利用數學歸納法進行證明。

  • 算例:

求: a_{k+2}=kcdot a_{k+1}+kcdot a_{k},     ( k=0,1,2,...) ,初值矢量 vec{A}(0)=left( 1,1 
ight)^{mathrm{T}} 已知的通項公式 a_{k }

解:

由該差分方程對應之前的一般形式的二階線性差分方程發現:

f_{0}=1,     f_{2}=f_{1}=k

Fleft( k 
ight):=egin{pmatrix} 0 & 1\  k & k end{pmatrix}

且由引理1及其後續我們知道:

a_{k+1}=a_{0}cdot g_{11}(k)+a_{1}cdot g_{12}(k)=sum_{j=1}^{2}{a_{j-1}cdot g_{1j}}(k)

再拿到引理2,當 h=k 時有:

g_{11}(k)=sum_{i=1}^{k-1}f_{k+1-i}(k-i-1)cdot[sum_{i}(prod_{m=k-i}^{k-1}f_{alpha _{1}cupalpha _{2}cup ...cup alpha _{i} }left ( m 
ight ))]

g_{12}(k)=f_{k}(k-1)+sum_{i=1}^{k-1}f_{k-i}(k-i-1)cdot [sum_{i}(prod_{m=k-i}^{k-1}f_{alpha _{1}cupalpha _{2}cup ...cup alpha _{i} }left ( m 
ight ))],     (kgeq2 )wedge (pgeq3,f_{p}=0)wedge (f_{0}=1)

則當 k=1 時:

g_{11}(1)=g_{12}(1)=0

kgeq2 時:

g_{11}(k)=f_{k}(k-2)f_{1}(k-1)+f_{k-1}[f_{2}(k-1)f_{1}(k-1)f_{2}(k-2)]+f_{k-2}(k-4)[f_3(k-1)f_2(k-1)f_1(k-2)

+f_{1}(k-1)f_{2}(k-2)f_{1}(k-1)f_{1}(k-2)f_{1}(k-3)]+...+f_{2}(0)[f_{k-1}(k-1)+...+f_{1}(k-1)f_{1}(k-2)...f_{1}(1)]

考慮到: pgeq3,f_{p}=0 ,故 g_{11}(k)=0

g_{12}(k)=f_{k}(k-1)+f_{k-1}(k-2)f_{1}(k-1)+f_{k-2}(k-3)[f_{2}(k-1)+f_{1}(k-1)f_{1}(k-2)]

+f_{k-3}(k-4)[f_{3}(k-1)+f_{2}(k-1)f_{1}(k-3)+f_{1}(k-1)f_{2}(k-2)+f_{1}(k-1)f_{1}(k-2)f_1(k-3)]

+f_2(1)[f_{k-2}(k-1)+f_{k-3}(k-1)f_1(2)+...+f_{1}(k-1)f_{2}(k-2)f_1(2)]

+f_1(0)[f_{k-1}(k-1)+...+f_{1}(k-1)f_{2}(k-2)...f_1(1)]

=left{egin{matrix} 1,     k=2\  sum_{k-2}(prod_{m=2}^{k-1}f_{1cup2cup ...cup k-2 }left ( m 
ight )),     kgeqslant 3 end{matrix}
ight.

綜上所述:

a_{k+1}=left{egin{matrix} 0,     k=1\  1,     k=2\  sum_{k-2}(prod_{m=2}^{k-1}f_{1cup2cup ...cup k-2 }left ( m 
ight )),     kgeqslant 3 end{matrix}
ight.

=left{egin{matrix} 0,     k=1\  1,     k=2\  f_{k-2}(k-1)+f_{k-3}(k-1)f_{1}(2)+...+f_1(k-1)f_1(k-2)...f_1(2),     kgeqslant 3 end{matrix}
ight.

其中:

f_{0}=1,     f_{2}=f_{1}=k,     vec{A}(0)=left( 1,1 
ight)^{mathrm{T}},     f_0=1,     pgeq3,f_{p}=0

參考文獻:

[1]. 《變係數差分方程的求解》.蔣興國、朱道元. 東南大學學報. 1995年11月.


還沒關注專欄《數學及自然科學》的朋友們請趕快關注吧!您的支持是我最大動力!

本專欄既有乾貨又有科普,一定會有您想看的文章~

也順便關注一下作者好啦~聽說長得好看的人都點了關注吶!

看完記得點贊哦~


推薦閱讀:
相关文章