递归关系求解
问题
假设:一个反应器中有两类粒子α和β,设每秒钟一个α粒子分裂成3个β粒子,而每秒钟一个β粒子分裂成一个α粒子和两个β粒子。假如在t=0时:反应器中有一个α粒子,求t秒时反应器中α粒子和β粒子的数目。
根据关系列出递归关系
a(t) = b(t-1) b(t) = 3*a(t-1) + 2*b(t-1)
参考程序
#include <stdio.h> #include <stdlib.h> #define A_size 5 int aa(int size) //aa(t)表示t时刻α的个数 { if (size == 0) return 1; else return bb(size-1); } int bb(int size) //bb(t)表示t时刻β的个数 { if (size == 0) return 0; else return 3 * aa(size-1) + 2 * bb(size-1); } int main() { printf("%d\n", aa(A_size) + bb(A_size)); return 0; }
结果:243
a(t) = b(t-1) b(t) = 3*a(t-1) + 2b(t-1) 得: a(t-1)=b(t-2) b(t) = 3*a(t-1) +2*b(t-1) =3* b(t-2) + 2* b(t-1) (t>=2) 根据已知条件知:a(0)=1 a(1)=0 b(0)=0 b(1)=3
得到递归关系:b(t) = 2*b(t-1) + 3*b(t-2),这是一个常系数齐次线性方程。为了求解看下解常系数齐次线性方程的一般方法。
解常系数齐次线性方程的一般方法
首先区分
特征方程与特征值
求解通解的步骤
1.根据递归关系得出特征方程,求解方程得到特征根;
2.表示出通解的一般形式(分为是否有重根);
3.代入初始值得到系数,从而得到通解。
就本题演示一般步骤
1.把递归关系b(n)=2*b(t-1) + 3*b(t-2),表示为特征方程:x2=2x+3,得到特征值-1和3;
2.没有重根,通解表示为b(t) = c1*(-1)n + c2*(3)n;
3.带入初始值,得到c1=-3/4 c2 = 3/4,
从而得到通解:b(t) = -3/4 *(-1)n + 1/4 *(3)n+1
a(t) = -3/4 *(-1)n-1 + 1/4 *(3)n (t>=2)