有一种方法,供参考。
现在递推式是: a[i+2] = 2*a[i+1] -2*d + a[i]
现在 a[1],d 都是已知的,只要知道a[2]其实就可以计算出a[m]了。
可以用 a[N]列个方程计算a[2]。
由递推式可知,a[i] 是 a[2] 的一次方程。如:
a[3] = 2*a[2] - 2d + a[1]
a[4] = 2*a[3] - 2d + a[2] = 5*a[2] - 6d + 2*a[1]
......
因此,可以令 a[i] = x[i]*a[2] + y[i]
递推计算出每个x[i]和y[i]。 然后对
a[N] = x[N]*a[2] + y[N],通过a[N]计算出a[2],再从
a[m] = x[m]*a[2] + y[m],计算出a[m]。
x[i] 和 y[i] 的递推式很容易的:
1、首先 x[1] = 0, y[1] = a[1], x[2] = 1, y[2] = 0 。这些都是已知量。
2、由a[i+2] = 2*a[i+1] -2d + a[i] 可得
x[i+2] = 2*x[i+1] + x[i]
y[i+2] = 2*y[i+1] - 2d + y[i]
综合1、2、可以计算出所有得x,y 。
(前文的式子中已经给出 x[3],y[3],x[4],y[4],其他可自行验证)
特征根法算一下a[i]的通项公式
由题意
a[i] = (a[i-1] - a[i+1])/2 + d
因此
a[i+1] + 2a[i] - a[i-1] = 2d
故 a[i+1]-d + 2(a[i]-d) - (a[i-1)-d) = 0
令 b[i] = a[i]-d
则 b[i+1] + 2b[i] - b[i-1] = 0 (1)
(1)表明数列b[i]是个二阶齐次递推数列.因其特征方程
x^2 + 2x -1 = 0
有两个根 -1+sqrt(2) 与 -1-sqlrt(2)
因此b[i]的通项公式为
b[i] = p*(-1+sqrt(2))^i + q*(-1-sqlrt(2))^i
其中p与q为待定系数
因为a[i]=b[i]+d, 我们得到a[i]的通项公式如下:
a[i] = p*(-1+sqrt(2))^i + q*(-1-sqlrt(2))^i + d
利用边值条件(a[1]与a[N]的值)可算出p与q的值
若
a[i+1] + 2a[i] - a[i-1] = 2d
求a[i]的通项.
假设我们只有高中数学知识,关于数列只知道等差数列和等比数列的通项公式(而不知所谓的特征方
程为何物),让我们看看如何下手.
人们在遇到陌生事物时首先的想法就是把它与熟悉的事物对比.因此对此题而言,一个自然的思路就
是把a[i]通过某种变换转为我们熟悉的等差数列或等比数列.从直觉看变成等差数列可能性不大,那
就让我们从等比数列着手吧.
首先,等式右边的2d看着不顺眼,让我们想办法把它变成0
试令a[i] = b[i] + s, s是一个常数,则有
b[i+1] + 2b[i] - b[i-1] = 2d-2s
OK! 让s=d,右边就就为0了. 下一步任务是求b[i]的通项公式,b[i]满足:
b[i+1] + 2b[i] - b[i-1] = 0 ----------------- (1)
能把上式变成一个等比数列条件,如 c[i+1] = q*c[i] 吗?
一个比较可行的想法是下式:
b[i+1] + m*b[i] = k * (b[i] + m*b[i-1]) ---------------- (2)
其中m和k为常数. 这是一个等比数列条件式(对于数列c[i] = b[i] + m*b[i-1]),通过设m和k的值
有没有可能把(1)变成(2)呢?
其实到这一步后,解决问题就没有什么困难了.
(2)等价于
b[i+1] + (m-k)b[i] - k*m*b[i-1] = 0
和(1)相比,只需
m-k = 2
k*m = 1 --------------------- (3)
这是一个很简单的二元二次方程组,初中生都知道其解法.
解出m和k后,由(2)我们就知道
b[i+1] + m*b[i] = (b[2]+m*b[1]) * k^(i-1) --------------(4)
等等,有人会问,由(4)我们只知道b[i+1]+m*b[i]的通项,可还是不知道b[i]的通项呀?
实际上,(3)作为(判别式大于0)的二次方程有两个解.因此(4)实际上有两个等式.肖去其中的b[i+1]
就得到b[i]通项了.
最后插句题外话,(3)肖去m后得到
k*k + 2*k -1 = 0
这正是前面提到的特征方程.真是殊途同归.
他的想法,认为:所有的S[m]只与m有关。这是不对的。
实际上S[m]=a[1]+(a[1]-a[m])/2+(m-2)d+a[m]//此结果不仅与m有关,还与a[m]有关
而他的特殊之处只不过是求的S[N],而只有a[N]是已知的而已!
所以用S[m]之差表示a[m]是不可取的。
PS:另外这个S[m]的通项公式要对m=1,m=2等特殊值,特殊归纳才对
1、通过 a[1] 和 a[N] 求出 S[N] 。
2、用递推式 S[i] = S[i+1] - a[i+1] , i < N
3、再用公式 S[i]=a[1]+(a[1]-a[i])/2+(i-2)d+a[i] 求出 a[i]
循环2、3两步,直到计算出 a[m].
正确的递推式是: a[i+2] = -2*a[i+1] + 2*d + a[i]
现在 a[1],d 都是已知的,只要知道a[2]其实就可以计算出a[m]了。
可以用 a[N]列个方程计算a[2]。
由递推式可知,a[i] 是 a[2] 的一次方程。如:
a[3] = -2*a[2] + 2d + a[1]
a[4] = -2*a[3] + 2d + a[2] = 5*a[2] - 2d - 2*a[1]
......
因此,可以令 a[i] = x[i]*a[2] + y[i]
递推计算出每个x[i]和y[i]。 然后对
a[N] = x[N]*a[2] + y[N],通过a[N]计算出a[2],再从
a[m] = x[m]*a[2] + y[m],计算出a[m]。
其中,可由递推式得到x,y的通项公式:
x[1] = 0, y[1] = a[1], x[2] = 1, y[2] = 0
x[i+2] = -2*x[i+1] + x[i], i > = 1
y[i+2] = -2*y[i+1] + 2d + y[i], i > = 1
现在,就有三种方案了:特征值法,求和法(用S[n]),一次方程法(x*a[2] + y).