『具体数学』第2章 和式

2.1 和式的记号

  主要是一些 符号使用上的问题,有以下几点原则与建议:

  • 在处理和式时尽可能用在 符号下列出指标关系的形式,处理时更不易出错。
  • 在使用确定界限形式时常算上取 0 值的项来保证理解的有效性。
  • [P(x)] 的形式来表示表达式 P(x) 的 bool 值,若值为 0 则忽略该式中其他因式的值是否被定义。

2.2 将和式转换为递归式求封闭形式

  这一部分已在第一章提到过,此处不在赘述。

2.3 将递归式转换为和式

  当一个递归式的求解十分困难,用已知的成套方法几乎不可能解决时,我们可以采取将递归式转换为和式的方法,再用求解和式的各种技巧求得式子的封闭形式。

又是 hanoi 塔

  再次回到我们的老朋友这里。这次我们将使用更加一般性的方法使得他的推导更加地理所当然,而不是用归纳法证明一个猜测出的结论。列出hanoi塔的递归式为:

T0=0;Tn=2Tn1+1,n>0.

两边都除以 2n ,我们将会得到:

T0/20=0;Tn/2n=Tn1/2n1+1/2n,n>0.

让我们来换个元,令 Sn=Tn/2n ,则有:

S0=0;Sn=Sn1+2n,n>0.

  由此就可以得到 Sn=k=1n2k ,而这就是几何级数的和,在后面将会证明它等于 1(12)n ,所以最后我们得到 Tn=2nSn=2n1

一般的情况

  前面的 hanoi 塔解法其实就是这种方法的一种应用形式。这种具有一般性的方法将能够解决任何形如

anTn=bnTn1+cn

的递归式。而该方法的主要思想就是利用一个求和因子 sn 来乘两边,得到:

snanTn=snbbTn1+sncn

只要能够恰当的选取 sn ,使它满足 snbn=sn1an1 ,那么记 Sn=snanTn ,我们就能够得到一个可以转换为和式的递归式:

Sn=Sn1+sncnSn=k=1nskck

这样转换之后原递归式的解就是

Tn=1snan(s1b1T0+k=1nskck)

  想要进行这一套操作,求和因子 sn 至关重要,因此我们十分迫切地需要一个方法来找到合适的 sn 。我们把求和因子与 a,b 的关系式 snbn=sn1an1 展开,可以得到

sn=an1an1a1bnbn1b2

或这个值的任意常数倍都可以是一个合适的求和因子。带入hanoi塔的任意的 a=1,b=2 能够计算出 sn=2n 会是一个求和因子。

  值得注意的是, 0 不能作为除数,因此在计算求和因子时应注意 a,b 是否会存在 0 项。

和式的处理

  对和式进行处理,其实就是将一个和式改换成另一个更简单或更易于达成某个目的的和式。想要做到这一点,一些基本的变换法则是必要的。设 K 为任意有限整数集合, K 中元素的和式可以用下面的三条法则进行变换:

kKcak=ckKak()kK(ak+bk)=kKak+kKbk()kKak=p(k)Kap(k)()

分配律可以允许我们将常数移入和移出和式;结合律可以把一个和式分为两个部分;交换律可以将和式的求和项排成合适的顺序

  这三个法则一个很经典的应用就是高斯小时候爆算 i=1100i 的技巧。这个技巧也同样适用于所有的等差数列求和:

S=0kn(a+bk)

对于该式子,我们先使用交换律将其变形为:

S=0nkn(a+b(nk))=0kn(a+bnbk)

运用结合律把该式子和原式加起来,我们可以得到:

2S=0kn((a+bk)+(a+bnbk))=0kn(2a+bn)

现在 内的就是常数,我们用分配律提出来,然后就是平凡的和式了:

2S=(2a+bn)0kn1=(2a+bn)(n+1)

所以我们就证明了:

0kn(a+bk)=(a+12bn)(n+1)

  在交换律的使用中,往往要注意 p(k) 的值应为整数,否则交换律就不能成立。除了这一点以外,又因为和式只对集合 K 内的元素求和,所以 p(k)=n 中若 nK ,那么 n 的出现频次如何并无所谓,因为和式计算时并不会算上。对于整数的任意集合 KK 下面是一般的公式:

kKak=kak[kK][kK]+[kK]=[kKK]+[kK]

  由这两个公式可以得到一个十分重要的推论:

kKak+kKak=kKKak+KKak

  利用这个式子,我们可以轻易做到合并两个指标集合,还可以主动地从一个和式中提取出单独的一项。而从和式中提取出一项,将是我们处理和式的一个有效方法—— 扰动法(perturbation method) 的基础。对于一个和式 Sn=0knak ,它求解的具体步骤如下:

  • 分别分离和式 Sn+1 的第一项和最后一项,得到:

    Sn+an+1=a0+1knak

  • 运用和式的性质等解出 S 的递推式。

  扰动法一个比较经典的运用就是推导等比数列和( 几何级数(geometric progression) ): Sn=0knaxk 。对于几何级数, 1knak 就等价于 xSn 。由此我们可以推导得到:

Sn=aaxn+11x

2.4 多重和式

  很多时候和式的求和指标不会仅有一个,对于有两个或更多指标的和式,我们称它为多重和式。多重和式与一般的和式在处理上是相近的,通过基本的运算定律进行转换与求解。其中最重要的方法在于对求和指标进行正确地替换,下面是两个比较重要的不等式与恒等式及其推导。

切比雪夫不等式

  对于和式 S=1j<kn(akaj)(bkbj) ,我们发现交换两个指标仍然是原来的和式,我们把原本的和式与交换指标后的和式相加,得到:

(1)2S=1j<kn(akaj)(bkbj)+1k<jn(akaj)(bkbj)(2)=1j,kn(akaj)(bkbj)1j=kn(akaj)(bkbj)

得到的式子第二项显然等于 0 ,而对于第一项,我们将其拆成四个和式:

(3)1j,knajbj1j,knajbk1j,knakbj+1j,knakbk(4)=21j,knajbj21j,knajbk(5)=2n1jnajbj2(j=1naj)(j=1nbj)

那么最后将式子两端除以 2 后整理得到:

(j=1naj)(j=1nbj)=n1jnajbj1j<kn(akaj)(bkbj)

  我们发现这个式子的最后一项的两个求和指标存在大小限制,因此这一项的正负系数是可调整的,可以从中得到两个不等式,即 切比雪夫不等式(Chebyshev's monotonic inequality)

(j=1naj)(j=1nbj)n1jnajbj,a1anb1bn(j=1naj)(j=1nbj)n1jnajbj,a1anb1bn

  举个例子来说明该不等式的运用:给定 a1n,b1n ,但 a,b 的顺序尚未确定。从中可以确定的是 (j=1naj)(j=1nbj) 的值是不变的,因此 n1jnajbj 的最大值将会在 a1anb1bn 时取得,同样它的最小值会在 a1anb1bn 。换言之,当 a,b 排序相同时,n1jnajbj 取得最大值,排序相反时则取最小值。

关于调和数的恒等式

  在推导式子前,我们先考虑用一个指标替换另一个指标会发生什么。如果用函数 f:JK 对指标进行替换,有这样一个一般的公式:

jJaf(j)=kKak#f(k)

其中 #f(k) 表示集合

f(k)={j|f(j)=k}

中的元素个数。特别地,当 fJK 的双射时,有:

jJaf(j)=kKak

  了解了这些后,我们来分析一个和式:

Sn=1j<kn1kj

一般而言,处理一个和式的方法是对其中的一个指标求和:

1、对 j 求和:

S=1kn1j<k1kj(分离两个求和指标)=1kn1kj<k1j(kj替换j以使得和式内仅含j)=1kn0<jk11j(对指标j整理)=0k<nHk(根据Hk的定义替换并整理)

2、对 k 求和,但对于这个和式而言结果是一样的。

  为了摆脱在结果中出现调和数的和式这一现象,即使内部和式不包含自身的指标,即用外面的指标或常数来表示求和的元素。对于这个和式,可以用合适的式子对内部和式的指标进行替换后,再分离两个求和指标后以达成目的:

S=1j<kn1kj(原式)=1j<k+jn1k(k+j替换k以使得求和对象仅含k)=1kn1jnk1k(对指标j求和)=1knnkk(朴素的求和)=1knnk1kn1(分离常数)=nHnn(根据Hn的定义替换并整理)

再与先前得到的式子联立,得到:

0k<nHk=nHnn

2.5 一般性的方法

  书中给到的例子极其精妙,是对于和式 n=0knk2 的处理。

方法0:查公式

  类似于这样的和式可能早就被解决了,因此用查找资料的方式是十分有效的。不同于原书上对于纸质资料的查询推荐,笔者一般是在 OEIS 上查找,仅需输入序列的前几项便能准确的查找到。
  当然在未经思考就直接看答案的行为是绝对不提倡的,这不会对我们的学习有任何的裨益。

方法1:猜答案,再证明

  显然本题的结论并不是那么的好猜,但是我们还是假设我们猜出来了:

n=n(n+12)(n+1)3,n0

在知道了结论后,就可以用证明大杀器——数学归纳法了。

  首先归纳法的基础是显然的,那么我们尝试归纳。由于

n=n1+n2

3n=n(n12)(n+1)+3n2

化简得

3n=n(n+12)(n+1)

由此得证。

  显然这样的方法也不是那么的好,因为我们不是总能灵光一闪地猜出答案。

方法2:扰动法

  既然这个和式是单一的、指标连续的简单和式,那么就可以考虑使用扰动法:

(6)n+(n+1)2=0kn(k+1)2(7)=0kn(k2+2k+1)(8)=n+20knk+(n+1)

发现两边消掉了,但这并不是无用功。通过这个过程我们可以发现 2 次方扰动后会出现 1 次方和,那么我们不妨猜想 3 次方和(记为 Vn )扰动后会出现 2 次方和:

(9)Vn+(n+1)3=0kn(k+1)3(10)=0kn(k3+3k2+3k+1)(11)=Vn+3n+3(n+1)n2+(n+1)

最后从中整理出 n 的封闭形式即可:

(12)3n=(n+1)33(n+1)n2(n+1)(13)=(n+1)(n2+2n+132n1)(14)=(n+1)(n+12)n

方法3:成套方法求解

  扰动法是有效的,那么我们自然也可以试试我们之前了解到的其他方法,就比如说把和式转为递归式后用成套方法求解。原式转换成递归式将会是这样子的:

(15)0=0;(16)n=n1+n2,n>0.

  这个式子每次递归都加上了一个平方。回想先前处理一次递归式时的过程,不难类比出二次式的处理:

(17)R0=α;(18)Rn=Rn1+β+γn+δn2,n>0.

它的解形式应为:

Rn=A(n)α+B(n)β+C(n)γ+D(n)δ

带入 Rn=n3 将会有:

3D(n)3C(n)+B(n)=n3

  回到我们要解决的问题,此处 α,β,γ 都是 0 ,而 δ=1B(n),C(n) 的值是显然的,因此 D(n) 的结果也极其自然了:

3D(n)=n3+3C(n)B(n)=n3+3(n+1)n2n=n(n+12)(n+1).

方法4:积分

  我们发现 之间存在密切的联系,猜测可以通过两者间的关系来处理这个问题。我们把 n0nx2dx 同时在图中表示出来,如下图所示:

  这里的函数是 f(x)=x2 ,而曲线下方的面积就是 0nx2dx ,一个个矩形之和就是 n 。我们发现在它们之中存在一个误差,将其表示为 En 那么可以得到:

(19)0nx2dx+En=n(20)En=nn33

于是我们可以进一步推导出关于 En 的递归式:

(21)En=nn33(22)=n1+n2n33(23)=En1+(n1)33+n2n33(24)=En1+n13

当然通过对曲边扇形误差项的面积直接求和也可以直接得出 En

(25)En=n0nx2dx=k=1n(k2k1kx2dx)(26)=k=1n(k2k3(k1)33)=k1n(k13)

得到了 En ,那么求出 n 便是很自然的事情了。

方法5:展开与收缩

  这个方法虽然并没有在前面提到过,但是它同样是非常重要的,特别是其中蕴含的思维。由于二次和式我们并不会处理,于是我们考虑将它降次,以和式变为二重为代价,拆成一个更容易处理的一次和式。这个二重和式如果处理得当,其实是可以化简的:

(27)n=1knk2=1jknk(28)=1jnjknk(29)=1jn(n+j2)(nj+1)(30)=121jn(n2+njj2)(31)=12n3+12n2+14n(n+1)12n(32)n=13nn(n+12)(n+1)

原书对这里的总结极其到位:从单重和式过渡到二重和式,初看似乎是一种倒退,但实际上是进步,因为产生了更容易处理的和式。我们不可能指望不断地简化,简化,再简化来解决每一个问题: 我们不可能通过只向正上方爬坡来登上最高的山峰

方法6:有限微积分

方法7:生成函数

  这部分内容会在之后的部分或文章提到,这里提到只是为了说明存在这样的方法去处理。

2.6 有限微积分和无限微积分

  既然微积分在处理和式方式上有这样的优势,那么离散数学开发出一种类似的运算也是很自然的。而这个运算就是所谓的“有限微积分”。

基本定义

  首先我们知道,无限微积分基于由

Df(x)=limh0f(x+h)f(x)h

所定义的 微分(derivative) 算子 D 的性质。而有限微积分则是基于由

Δf(x)=f(x+1)f(x)

所定义的 差分(difference) 算子 Δ 的性质。

  相对于 不定积分、定积分 ,有限微积分也有他的 定和式、不定和式 g(x)δx,abg(x)δx ,形式与积分大差不差,这里就不在深入去探讨它的计算。

  对于微分算子,它作用于许多常见的函数上都会有十分优美的结果,例如 D(xm)=mxm1 。而对于差分算子,它并不会对很多常见的函数给出一个比较优美的结果,但是对于一类不那么常见但后面在研究二项式系数会用到的特殊“幂运算”,它能给出很不错的结果。这类运算是由下面的规则定义的:

(33)xm=x(x1)(xm+1)m个因子,整数m0(34)xm=1(x+1)(x+2)(x+m),整数m>0(35)xm=x(x+1)(x+m1)m个因子,整数m0(36)xm=1(x1)(x2)(xm),整数m>0

我们称前者为 下降阶乘幂(falling factorial power) ,后者为 上升阶乘幂(rising factorial power) 。值得一提的是,这种函数与阶乘运算有特别好的相性,实际上它们还可以写成:

(37)xm=x!(xm)!(38)xm=(x+m1)!(x1)!

  差分算子正是会对这种函数有好的转换,对于下降阶乘幂,我们有 Δ(xm)=mxm1 ,即 xmδx=xm+1/(m+1) 。但这并不是对所有的 m 都适用,在 m=1 时有特殊情况 x1δx=Hx 。这里的 Hx 即调和数,对应着无限微积分中 ln 的有限模拟。

  接下来是两个由差分引出的较为常用的性质。

叠缩

  叠缩(telescoping),早在小学奥数,这样的思想就曾被提及,也就是分数裂项相消的技巧。叠缩所指代的情形更加的广泛:对于 g=Δf ,有

(39)ax<bg(x)=ax<b(f(x+1)f(x))(40)=f(b)f(b1)+f(b1)f(b2)++f(a+1)f(a)(41)=f(b)f(a)

可以看到,中间的项全部都消去了,这就是所谓的叠缩。

幂的互化

  我们尝试使用这一部分的内容来解决我们2.5中的问题。可以发现有:

k2=k2+k1

而和式就是差分的逆运算,所以有:

(42)0knk2=0kn(k2+k1)(43)=n33+n22(44)=13(n+1)(n+12)n

由此即可解决。

  实际上,更高次的幂也可以这样互化,同样对于上升阶乘幂也有互化。这样分解基于斯特林数:

xn=k{nk}xkxn=k(1)nk{nk}xnxn=k[nk]xkxn=k(1)nk[nk]xk

这部分的证明略。

差分表

  最后附上差分表:

f=g Δf=g f=g Δf=g
xm mxm1 xm+1/(m+1) xm
cx (c1)cx cx/(c1) cx
cu cΔu u+v Δu+Δv
uv uΔv+EvΔu

  对于最后一个式子,我们知道在无限微积分中有 (f(x)g(x))=f(x)g(x)+g(x)f(x) 。在有限微积分这一法则稍有变化:

(45)Δ(u(x)v(x))=u(x+1)v(x+1)u(x)v(x)(46)=u(x+1)v(x+1)u(x)v(x+1)+u(x)v(x+1)u(x)v(x)(47)=u(x)Δv(x)+v(x+1)Δu(x)

到这里上文 E 的含义便非常显然了,它就是 移位算子(shift operator) Ef(x)=f(x+1) 。值得一提的是,无限微积分因为有 h0 所以不需要用 E 这样一个算子。

2.7 无限和式

  感觉讲得不如实分析教材中的透彻,因此就略过了。

参考资料

posted @   Black_Crow  阅读(295)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示