前一篇介绍了“换元法”和“分部积分”两种一般的求积分的方法,这一篇主要学习对“有理式”和“简单无理式”求积分的套路。这一篇是对不定积分方法的总结,在此特地介绍一个在线积分器和symbolab,对于复杂的积分式可以用它们辅助计算。


一、知识点


1,四个分式模式
  所谓的“套路”,都是通过一系列变换,把被积函数转化为“积分表”中的函数及其组合。积分表中有四个积分式对于分式有理式非常重要,甚至被总结为四种模式(pattern)。
1)一次单因式(对数模式)
Aax+bdx=Aaln|ax+b|+C
2)一次k重因式
A(ax+b)kdx=A(1k)a1(ax+b)k1+C
  上式运用了“凑微分”。
3)二次单因式(反正切模式)
Bx+Dpx2+qx+rdx=B2p2px+qpx2+qx+rdx+(DBq2p)1pdx(x+q2p)2+4prq24p2=B2plnpx2+qx+r+2pDqBp4prq2arctan(2px+q4prq2)+C
4)二次k重因式
Bx+D(px2+qx+r)kdx=B2p(1k)1(px2+qx+r)k1+2pDqBp4prq2dx[(x+q2p)2+(4prq22p)2]k
  上式先“凑微分”,然后换元,再分部积分,并运用递归,可以求出原函数。其中, dx(x2+a2)n ,n是大于1的自然数使用分部积分可以得到它的递归公式,如下:
In+1=2n12na2In+x2na2(x2+a2)n+1
I1=1aarctan(xa)+C
2,分式有理式
  定理:设 Pm(x)Qn(x) 是一真分式,则它可以唯一地分解为最简分式之和。
例:
x+1x24x+3dx=[Ax1+Bx3]dx
  通分,解系数方程,求出A和B。
  分式有理式求积分的方法又称为“部分分式积分法”(Interation by Partial Fractions),它是基于“部分分式分解”(Partial Fraction decomposition)得来的一种求特定积分的方法。sympy提供了“apart()”函数用于执行“部分分式分解”操作。下面再给几个相关链接:
  部分分式积分
  partial fraction expand in matlab
3,三角函数有理式
  对sin(x)和cos(x)及常数进行有限次的四则运算得到的表达式称为“三角函数有理式”,记作R( sin x, cos x ),其中 R - Rational
  对于三角函数有理式 R[sin(x),cos(x)]dx 的积分套路如下:
  (根据“三角函数万能公式”)取 t=tanx2 ,则 x=2arctan(t),dx=21+t2dt,sin(x)=2t1+t2,cos(x)=1t21+t2 ,于是可得:
R[sin(x),cos(x)]dx=R[2t1+t2,1t21+t2]21+t2dt
  很显然,这里应用的是“反函数换元法”(第二类换元法)。
4,简单无理式
  无理式积分的困难在于被积函数中带有开发运算,因此,一般的思路是先进行“有理化”。如下:
1) R(x,ax+bn)dx,(a0)
  取 ax+b=tn ,可得
R(x,ax+bn)dx=R(tnba,t)ntn1adt
2) R(x,ax+bcx+dn)dx
  取 ax+bcx+d=tn ,可得
R(x,ax+bcx+dn)dx=R(tndbatnc,t)n(adcb)tn1(actn)2dx
3) R(x,ax2+bx+c)dx,(a0)
  先凑成“平方和”或“平方差”形式,再应用三角函数“平方公式”进行变量替换。
4,可积与求出积分
  在“不定积分的概念”那一节,讲到“连续函数”甚至“满足介值定理的函数”都可积(原函数存在)。但是,“可积”不代表一定能求出它的积分表达式(用初等函数表示),例如: ex2,sin(x)x,1ln(x),112sin2(x)
  事实上,大多数初等函数的原函数都不能表示为初等函数。这从一个侧面显示了“求导”的降维作用,它可以把非初等函数问题转换为初等函数问题来研究。


二、思考题


1,是否所有的分式有理函数在实数范围内都可以化为形如 axb 简单分式的和?
答:否!本课程中的“Partial Fraction decomposition”定理只是说可以将任意有理分式分解化为最简分式,而这里所说的最简分式包含了四个,而不只是一次单因式。比如,并不是所有的二次单因式都能化为一次单因式。


2,是否可以得到“分式有理函数的不定积分都可以用初等函数表示”的结论?
答:是!首先,所有的分式有理函数都可以化为一个多项式(整式)与一个真分式之和。然后,根据定理,所有的真分式又可以分解为四个模块(最简分式)的线性组合,而最简分式都可积,且积分后的原函数都是初等函数,那么这个命题成立。
注:这个问题非常有意思。有了计算机之后,人们开始从繁琐的运算中解放出来了,当然这个运算也包括积分运算。但是,对于计算机来说,判断一个函数是否可积,是比按程序计算积分更大的挑战。而从这个问题出发,人们可以先判断一个函数是否可积,可积再交给计算机去执行积分运算,不可积就不要浪费时间和计算资源了。或许,这也暗合“数据标记”吧!


三、选择题

from sympy import *
init_printing()
#Exercise 6-4-3
x = Symbol('x')
integrate(1 / (1 - x ** 2), x)

12log(x1)+12log(x+1)

#Exercise 6-4-4
t = Symbol('t')
integrate((t+4) / (t ** 2 + 5 * t - 6), t)

57log(t1)+27log(t+6)

#Exercise 6-4-5
x = Symbol('x')
integrate((2 * x ** 2 + 2 * x + 13) / ((x - 2) * (x ** 2 + 1) ** 2), x)

4x32x2+2+log(x2)12log(x2+1)4atan(x)

#Exercise 6-4-6
x = Symbol('x')
integrate(1 / (x ** 4 + 1), x)

28log(x22x+1)+28log(x2+2x+1)+24atan(2x1)+24atan(2x+1)

  对于 1x4+1dx=? ,sympy已经求出了积分,但是这个结果可以写得更简单一些。其中对数表达式可以合并,反正切表达式也可以合并。关于反正切的合并如下:
  根据正切函数的和差公式: tan(α±β)=tan(α)±tan(β)1tan(α)tan(β) ,两边取反函数,可得:
arctan(a)±arctan(b)=α±β=arctan[tan(α)±tan(β)1tan(α)tan(β)]=arctana±b1ab
所以,这个积分的结果可以简写为:
11+x4dx=28lnx2+2x+1x22x+1+24arctanx212x+π2+C
注意:反正切函数合并后,又用了反正切函数的“负数关系”和“倒数关系”。
下面再来看手动计算:
1)首先试着因式分解,很明显,不是很容易分解。那么不妨假设根据有理分式的分解定理,将它分解成4个二次k重因式的组合。
2)列方程组解出各系数。
3)分别对各个因式积分。
注:从这一题,我得到了一个意外的发现,对于像 11+x4 1+x4 这样的式子,直接用sympy的apart()函数,并不能对它进行分解。如果我们要做的不是求积分,而是进行“partial fraction decomposition”,不妨反过来,先求积分,再对各部分求导,这正式因式分解需要的么?

#Exercise 6-5-1
x = Symbol('x')
integrate(1 / (sin(x) + 1), x)

2tan(x2)+1

#Exercise 6-5-2
x = Symbol('x')
integrate(1 / (1 - cos(x)), x)

1tan(x2)

#Exercise 6-5-3
x = Symbol('x')
integrate((1+sin(x)) / (1 + cos(x)), x)

log(tan2(x2)+1)+tan(x2)

#Exercise 6-5-4
x, a = symbols('x a')
b = Symbol('b', nonzero=True)
integrate(tan(x) / (a ** 2 * (cos(x)) ** 2 + b ** 2 * (sin(x)) ** 2), x)

tan(x)a2cos2(x)+b2sin2(x)dx

#Exercise 6-5-4b
x, t, a = symbols('x t a')
b = Symbol('b', nonzero=True)
expr1 = 2 * t / (1 + t ** 2)
expr2 = (1 - t ** 2) / (1 + t ** 2)
expr3 = 2 / (1 + t ** 2)
expr = simplify((expr1 / expr2) / (a ** 2 * expr2 ** 2 + b ** 2 * expr1 ** 2) * expr3)
inte = integrate(expr, t)
expr, inte

4t(t2+1)(t21)(a2(t21)2+4b2t2),1b2log(t21)+12b2log(t4+1+t2a2(2a2+4b2))

inte.subs(t, tan(x / 2))

1b2log(tan2(x2)1)+12b2log(tan4(x2)+1+1a2(2a2+4b2)tan2(x2))

进一步化简,将半角化简掉。
根据三角函数半角公式:
tan(θ2)=±1cos(θ)1+cos(θ)=sin(θ)1+cos(θ)=1cos(θ)sin(θ)
代入上式,并合并对数,再化简可得:

x, t, a, b = symbols('x t a b')
expr = log((t ** 4 + 1 - 2 * t ** 2 + 4 * b ** 2 / a ** 2 * t ** 2) / (t ** 2 -1) ** 2)
expr, simplify(expr.subs(t, sqrt((1 - cos(x)) / (1 + cos(x)))))

log1(t21)2(t42t2+1+4b2a2t2),log(1+b2a2tan2(x))

#Exercise 6-5-5
x = symbols('x')
integrate(sin(2 * x) / ((cos(x)) ** 2 + 2 * sin(x)), x)

sin(2x)2sin(x)+cos2(x)dx

很明显,这个直接积分积不出来。当然,我们也可试着用上一题的方法来换元,但是,最后的结果会很复杂,也不能像上一题一样化简。那么,我们根据它的特点来手动计算吧:
sin(2x)cos2(x)+2sin(x)dx=sin(2x)1sin2(x)+2sin(x)dx=2sin(x)d[sin(x)]1sin2(x)+2sin(x)
然后再应用换元法

x, t = symbols('x t')
expr = integrate(2 * t / (1 - t ** 2 + 2 * t), t)
expr.subs(t, sin(x))

2(24+12)log(sin(x)1+2)2(24+12)log(sin(x)21)

#Exercise 6-5-6
x, t = symbols('x t')
expr = integrate(6 * t ** 4 / (t ** 5 + 1), t)
expr.subs(t, x ** (1 / 6))

65log(x0.833333333333333+1)

#Exercise 6-5-7
x, t = symbols('x t')
expr = integrate(t * sqrt(t + 2), t)
expr

6t921+2t15t2+30t+16t721+2t15t2+30t8t521+2t15t2+30t32t321+2t15t2+30t+162t215t2+30t+322t15t2+30t

#Exercise 6-5-7b
x, t = symbols('x t')
expr = integrate((t ** 2 -2) * t * 2 * t, t)
expr, expr.subs(t, sqrt(x - 2))

(2t554t33,25(x2)5243(x2)32)

#Exercise 6-5-8
x = symbols('x')
expr = integrate(sqrt(x ** 2 -2 * x + 1) / (x -1), x)
expr

x22x+1

#Exercise 6-5-9
x = symbols('x')
expr = integrate(sqrt(E ** x + 1), x)
expr

ex+1dx

很明显,这个直接积分积不出来。先“有理化”换元,再积分:

#Exercise 6-5-9b
x, t = symbols('x t')
expr = integrate(2 * t ** 2 / (t ** 2 - 1), t)
expr.subs(t, sqrt(E ** x + 1))

2ex+1+log(ex+11)log(ex+1+1)

#Exercise 6-5-10
x = symbols('x')
expr = integrate(((x - 1) * (x + 1) ** 2) ** (1 / 3), x)
expr

((x1)(x+1)2)0.333333333333333dx

这一题不能直接换元,需要先变换。如下:
dx(x1)(x+1)23=dx(x+1)x1x+13

#Exercise 6-5-10b
x, t = symbols('x t')
g = ((x - 1) / (x + 1)) ** (1 / 3)
eq = Eq(g, t)
solve(eq, x)

[t3+1.0t31.0]

diff(-(t ** 3 + 1) / (t ** 3 - 1), t)

3t2(t31)(t31)23t2t31

x, t = symbols('x t')
h = diff(-(t ** 3 + 1) / (t ** 3 - 1), t)
expr = - (t ** 3 - 1) / (2 * t) * h
inte = integrate(expr, t)
inte.subs(t, ((x - 1) / (x + 1)) ** (1 / 3))

log((x1x+1)0.3333333333333331)+12log((x1x+1)0.333333333333333+(x1x+1)0.666666666666667+1)3atan(233(x1x+1)0.333333333333333+33)

更多相关文章

  1. java漏洞成黑客目标微软呼吁用户更新软件

随机推荐

  1. Volley的使用以及源码分析(二)
  2. Android启动其他应用(支持跳转应用市场下
  3. Android 简单数独开发
  4. Android ListView快速滚动段:段文本太长
  5. 《Android 创建线程源码与OOM分析》
  6. Unity录屏实现(三)
  7. [Android]如何导入已有的外部数据库
  8. [置顶] 浅谈Android五大布局——L
  9. Android 启动系统相机,相册,裁剪图片及6.0
  10. Android App性能信息获取方法