本文中所有不定积分都省略常数项。不同小节的相同字母没有关系。

部分分式分解

一般微积分书上都会讲有理函数的部分分式分解,以及如何用这种方法算有理函数的不定积分。方法如下:假设

是给定的有理函数,其中
是多项式。先用多项式除法,令
,其中
是多项式,
,这样
的不定积分很好求,所以只需考虑
。由代数基本定理,在
上分母可以因式分解成

的形式,其中

。然后通过解线性方程组可以把部分分式分解

中的系数都算出来。下面对每一项做不定积分:如果分母是一次多项式的幂,有

如果分母是二次多项式的幂,有递推式(

以及

的情况

但是,实际操作中这种方法并不好用。主要问题是对于一个实际问题,给定的

,分母的多项式可能没有根式解,或者即使有根式解也很难运算。比如
虽然很明显等于
,它却不能用上面的方法计算。还有,如果某个多项式方程你算出来根式解等于
,你能对它进行正确的运算吗(比如,做除法):
这数等于零,但Simplify算不出来(版本12.1)

所以,我们需要更好的方法。

无平方因子分解

《微积分学教程》中讲了一种把不定积分的有理函数部分分离出来的方法。注意到由递推式(2)可得

其中

是多项式,
是常数,而由(3)式,最后一个积分不包含有理部分。可以把所有有理部分加起来,把剩下的积分也加起来,得到
,其中
,并且
。算出这个分解式不需要对
因式分解,因为
。得到
以后就可以用解线性方程的方法算出

下面讲另一种算法,虽然速度比上面的方法慢,但它更容易推广到多元函数的情况(以后会讲)。首先,我们把多项式

分解为无平方因子的多项式的乘积:
。这个分解可以如下计算:显然有
,所以
,可得
,这样
。对
递归执行这方法即可依次算出

可以用多项式除法从

里去掉一个多项式,使得剩下的有理函数满足
。如果
,那么
本身就是无平方因子的多项式,由部分分式展开,
的不定积分就是一些对数函数之和,不是有理函数。下面假设
。设
,那么
,所以可以用扩展Euclid算法找两个多项式
使得
,其中
。这等价于
。这样我们就从
中分离出了一个有理函数的导数,剩下
还未处理。递归使用这个方法不断降低分母的次数,就能把
的不定积分中有理函数的部分去掉。

这个算法有一种优化。还是设

。如果
,那么
已经是无平方因子的多项式了。否则,令
,就有
是多项式。用因式分解容易验证
,所以
。因此可以用扩展Euclid算法找两个多项式
使得
。这等价于
。为了递归执行这个算法,我们不需要算出
的整个无平方因子分解,因为
;对分母
,多项式
以及
都是我们已经算出来的。这个递归实现中每次操作对分母降低的次数比前一段的算法每次操作降低的次数多很多,所以效率更高。这个方法还有一个优点就是它可以直接推广到任意UFD的情况,而解线性方程组的方法只适用于一个域。

例题1:计算

第一次操作:

。扩展Euclid算法给出
,所以分离出第一个有理函数是

第二次操作:

(结束),
。扩展Euclid算法给出
,分离出第二个有理函数是

所以

最小域扩张

现在我们还剩下一个有理函数

,其中
,且
是无平方因子多项式。如果在复数域上部分分式分解,就有

当然,我们不能这样计算,因为这些

可能表示不出来。所以现在的问题是如何找一个最小的域扩张使得不定积分可以在这个扩张中表示出来。例如,不定积分

的分母没有根式解,但在扩张

中不定积分可以写成初等函数。

注意到这些系数

可以用根
的有理函数表示出来:在(4)式中两边乘
,再令
,就得到
。实际上还可以用多项式表示:因为
,可以用扩展Euclid算法找两个多项式
使得
,代入
即得

先考虑一个简单情况:

在域
上不可约,其中
包含所有的系数
。设域扩张
包含所有的根
。对每个根
都存在同构
使得
。把这个同构应用到等式
上可得
,所以每个系数都相等。这样就有

对于一般情况,如果不定积分能被域

中的初等函数表示,那么
必须包含所有系数
(因为可以把多项式在复数域中分解,得到一个有这些系数的部分分式分解,而部分分式分解(4)是唯一的)。这些系数是多项式
的根(
是常数)。令
为最小的包含这个多项式所有根的域,那么在
可以分解为
的乘积,并且在这些多项式上
的部分分式分解是
,因此不定积分是

注意这个求和是对

的不同根求和(也就是对
的根求和)。另一方面,如果我们算不出
的根,那么我们就表示不出
的不定积分。

然而

的根有可能很复杂,导致这个方法里的gcd很难算,所以必须找一种办法避免这个操作,直接得出gcd值的简单表示(就像
形式的表示比
形式的表示简单)。

结式子矩阵

现在我们不想算(5)式中包含

的表达式
,但可以把
替换为变量
然后在UFD
中计算
。这里和域中不一样,因为不能在
中做除法,每次多项式除法时必须先乘上一个系数:
,其中
的首项系数,
。所以我们的Euclid算法是带系数的:
,其中
,并且
,其中
代表“差一个常数”(也就是
)。把这个变成扩展Euclid算法,就能找到多项式
以及系数
使得
,其中
。这关系可以看成关于
系数的线性方程组,利用Cramer法则可作出如下定义:(下文中所有未定义变量,例如
,都设为0)

。定义

展开最后一行可得

,其中
。如果把
替换成它们的展开形式,可得

习题:为什么

从0开始?

),其中

从此式可看出

,而上面的
是结式的推广。

下面我们来研究

在Euclid算法中的变化。设
,其中
。方程
写成矩阵形式就是(未定义的变量,例如
,设为0)

可以适当减少一些行,使左边这个矩阵的第一列更像(6)式中包含

那些列:

成立。这方程把左边的矩阵第一列(也就是(6)式中矩阵的第
列)表示成了方程里出现的其它列(一个包含
的列和(6)式中
个包含
的列)的线性组合,可以用这些线性组合替换(6)式里所有的包含
的列,从而把
表示成一个包含
的行列式:

我们可以确定前面的

实际上等于
,但我们现在不需要。从这行列式可得出

代入Euclid算法,就有

,以及对于所有其它
都有

下面设

的次数更高的那个多项式为
,另一个为
,然后利用Euclid算法得到
。设
重根,
。因为
,所以
。并且,存在
使得
。这样在
就整除
。对
都有
,所以在
,因此
;不等式取等号时有

假设

。设
为满足
、对任意
的环同态。自然地定义环同态
满足
。显然有
。这样由
的行列式定义就有
。设
为对
中做Euclid算法得到的最后一个多项式,那么
次多项式,由(7)式可得
。因此
,我们推出
。由(7)式,存在
使得
。这个
是唯一的,因为
是单调递减的。设从
中除掉所有系数的gcd得到多项式
满足
,等式两边应用
可得
。因为
所有系数的gcd等于1,
,所以

这样就借用

中的Euclid算法计算出了
对应的多项式,而无需在Euclid算法中带
计算。

例题2:计算

这里分母是无平方因子多项式。用Euclid算法计算出

对此多项式进行无平方因子分解,得

。由上面的讨论,我们应该找
的Euclid算法中次数为3的多项式。做Euclid算法:

第1步:

,其中

第2步:

,其中

这是上面讨论中的

。这多项式所有系数的gcd等于
,除掉之后我们得到
。代入
,其中
,可得
。所以

Laurent级数

上面的方法给出了一个最小的可以表示出不定积分的域扩张。如果不需要追求这个“最小”,有一种简单方法在复数域中计算一个给定有理函数

的部分分式分解,也就是求出
中的多项式
,其中
是无平方因子分解,

,多项式
。对
求导可得
,所以在
点有

设多项式

,那么只需要求
的Laurent级数。对
求导可得
,其中
是多项式。

代入

这里分子、分母的多项式我们都已经能算出来了。为了把这个变成多项式的形式,可用扩展Euclid算法求出满足

的多项式
,再令
即可。
点的Laurent级数就是

总结

  1. 对于简单的积分,比如分母的因式分解已经给定的情况,用部分分式分解算积分效率最高。
  2. 如果分母没有明显的分解,可以先从不定积分里分出一个有理函数,把分母降低次数到无平方因子多项式。
  3. 如果仍然没有明显的分解,可以先找出能表示不定积分的最小域扩张。
  4. 下面可以用Euclid算法把不定积分表示成一个对
    的所有根的求和式,里面涉及的多项式都可以计算。
  5. 有一个简单方法可以直接算出在复数域中的部分分式分解,无需因式分解。

习题

1. 计算

2. 计算

参考文献

  1. Г. М. Фихтенго́льц, Курс дифференциального и интегрального исчисления.
  2. E. Hermite, Sur l'intégration des fractions rationelles. Nouvelles Annales de Mathématiques (2eme série), 11:145–148, 1872.
  3. D. Mack, On rational integration. Research Report UCP-38, Department of Computer Science, University of Utah, 1975.
  4. B. M. Trager, Algebraic factoring and rational function integration. Proceedings of SYMSAC'76, 219–226, 1976.
  5. D. Lazard and R. Rioboo. Integration of rational functions: Rational computation of the logarithm part. Journal of Symbolic Computation, 9:113–116, 1990.
  6. M. Bronstein and B. Salvy. Full partial fraction decomposition of rational functions. Proceedings of ISSAC'93, 157–160, 1993.
  7. W. S. Brown and J. F. Traub. On Euclid's Algorithm and the Theory of Subresultants. Journal of the ACM, 18(4):505–514, 1971.

crout分解计算例题_如何计算有理函数的不定积分相关推荐

  1. crout分解计算例题_矩阵与数值计算(2)——矩阵三角分解LU、PALU、Cholesky三角分解、QR分解...

    前言 矩阵分解是设计算法的主要技巧,通过分解可以将复杂问题转化为几个简单问题求解,通常完成这一转化任务的主要技巧就是矩阵分解.例如,我们知道上三角矩阵和下三角矩阵是容易求解的,或者对角矩阵是最理想的求 ...

  2. crout分解计算例题_专题:化学方程式计算

    一. 根据化学方程式的简单计算 (1) 根据化学方程式计算的依据 化学方程式表达的信息之一是反应物与生成物之间在"遵循固定质量比"的前提下的质量守恒.根据这一信息,可以利用化学方程 ...

  3. crout分解计算例题_初中数学因式分解习题大全(建议父母给孩子收藏直接打印)...

    一.填空题(共10小题) 1.已知x+y=10,xy=16,则x2y+xy2的值为 . 2.两位同学将一个二次三项式分解因式,一位同学因看错了一次项系数而分解成2(x﹣1)(x﹣9):另一位同学因看错 ...

  4. 平流式沉淀池计算例题_平流式沉淀池计算例题.doc

    平流式沉淀池计算例题 平流沉淀池的设计: 已知设计水量Q=300000m3/d.设计平流式沉淀池. 2.设计计算 (1)池容积W (2)单池容积W (3)单池池面积F (4)池深H (5)池长L (6 ...

  5. 高斯投影坐标计算例题_测量学高斯投影已知横坐标如何求在第几度带投影计算而得的?例如:...-y坐标的自然值怎么算-数学-莫囤料同学...

    概述:本道作业题是莫囤料同学的课后练习,分享的知识点是y坐标的自然值怎么算,指导老师为甘老师,涉及到的知识点涵盖:测量学高斯投影已知横坐标如何求在第几度带投影计算而得的?例如:...-y坐标的自然值怎 ...

  6. js对象数组计算总计_如何计算数组中的对象

    js对象数组计算总计 Knowing how to quickly iterate through an array and count objects is deceptively simple. ...

  7. 单代号网络图计算例题_算例分享:SDOF动力系统的共振响应计算

    本文给出一个单自由度系统的共振响应分析实例. 单自由度体系受到简谐荷载激励,相关参数如下: 单自由度体系刚度k=2×106N/m,质量m=2×105kg,阻尼c=1.0×105N·s/m,受到0.5H ...

  8. 单代号网络图计算例题_常用连续随机变量的关系与密度函数的计算

    第一节整理了一下常用的连续随机变量的密度函数,并以一张图给出它们之间的关系.接下来回顾了计算密度函数的基本方法,最后以第一节中的 3 个密度函数的推导作为例题. 1.随机变量分布及特征 1.1 常用连 ...

  9. 平流式沉淀池计算例题_平流式沉淀池计算例题

    平流沉淀池的设计: 已知设计水量Q=300000m 3/d .设计平流式沉淀池. 2.设计计算 (1)池容积W (2)单池容积W (3)单池池面积F (4)池深H (5)池长L (6)池宽B 1.Q= ...

最新文章

  1. python编程可以做什么工作-Python学到什么程度才可以去找工作?掌握这4点足够了!...
  2. SolverParameter
  3. 查看apache连接数及apache工作原理
  4. 各类最新Asp .Net Core 项目和示例源码
  5. Zabbix JVM 安装
  6. leetcode 1160 python
  7. Matlab常用函数:rand,randi和randn区别
  8. Django学习笔记之二
  9. 【转载】聪明说话35招
  10. web程序常见错误及解决方法
  11. 《C语言入门经典》读后感(一)
  12. C语言如何生成随机数
  13. 飞翔到你希望的遥远的地方
  14. Java 多态练习题之愤怒的小鸟,会飞会叫
  15. R以及RStudio的获取和使用
  16. 牛客 小米校招 最大新整数 单调栈
  17. np.piecewise函数用法
  18. 数据结构(54) B树、B+树
  19. 云边端一体化技术白皮书
  20. 怎样搭建后缀是.gitee.io的网站?如何免费在码云Gitee中部署个人静态网站?(或者个人博客)如何建立免费网站?

热门文章

  1. 大数据周周看:前英特尔高管加入谷歌云部门,网易与威马汽车合作打造“互联网+”时代智能汽车
  2. Android转场动画(View Activity ARouter)
  3. c语言拼图小游戏编程,c语言控制台输出制作拼图小游戏
  4. AForge.NET Framework2.25--图像视觉处理学习(五)---颜色转换
  5. 超简单使用华为云托管服务
  6. 【深度学习】时间注意力模块与空间注意力模块
  7. 投资理财--熊市笨小孩式交易75-25
  8. 紫外线检测仪,WKM-UV1,紫外线检测仪UV汞灯LEDUV通用
  9. 2018年第九届蓝桥杯A组省赛
  10. Tensorflow+gensim实现文章自动审核功能