Tuesday, November 25, 2008

拜Mathematica

昨天遇到一个不定积分的求解(是大一的时候写在微积分课本上的,但是没有标注如何解答)—— ∫ Sec[x]^3 * Tan[x]^4 dx。这应该是一种普遍形式 Sec[x]^m * Tan[x]^n 的特殊例子。

对于m与n分别是偶偶、偶奇、奇奇的情况都比较容易求解,唯独奇偶不知如何处理。刚才突然看到微积分课本后的Mathematica 简介,发现其符号运算强大到仅需一行命令就可以做很牛逼很复杂很强悍的不定积分(例如 Sin[x^2] 这种原函数并非初等函数的函数也可以做)!于是打开 Mathematica ,输入如下表达式
f[x_] = Sec[x]^3 * Tan[x]^4;
Integrate[f[x], x]

额滴神啊,瞬间就给出了如下的答案
1/768 Sec[x]^6 (96 ArcTanh[Tan[x/2]] Cos[x]^6+78 Sin[x]-47 Sin[3 x]+3 Sin[5 x])

真的是五体投地!没太被主攻数值计算类型的科学计算软件(例如 Matlab Octave Scilab 等等)震撼过,这下子真的是被强大牛逼无敌滴符号运算震撼了!拜 Mathematica!不过俺真滴是很想知道这玩意的 kernel 是咋演算如此复杂的不定积分的。

没有安装 Mathematica 滴童鞋们可以去这里玩耍一把不定积分——http://integrals.wolfram.com/index.jsp

ps.

这里大致列举了 integrator 的两种实现方式(俺猜测肯定不止这两种,老陶如果看见了此日志,可以稍微详细滴描述下)。第一种很好理解,套用现成的 general form for an integral,然后微分之,继而和被积函数对比,确定未知参数。第二种所谓 generalized hypergeometric functions 俺没看明白,不过估计有可能是俺的那个积分表达式所采取的方式,因为如果我输入如下表达式
f[x_] = Sec[x]^m * Tan[x]^n;
Integrate[f[x],x]

就会得到如下答案
(1/(-1+m+n))Hypergeometric2F1[1/2 (1-m-n),(1-n)/2,1/2 (3-m-n),Cos[x]^2] Sec[x]^m (Sin[x]^2)^(1/2-n/2) Tan[x]^(-1+n)

查看了 Hypergeometric2F1 的帮助文档,可惜没看明白到底是啥分布函数 囧。等有时间了再仔细阅读之

1 comment:

  1. 说实话我也不清楚. 不过可以肯定的是, 积分是一种非构造性运算, 对于我们来说不是所有的积分都可以写成脱去积分号的表达式. Mathematica里面有一套这样的函数比如Airy[], BesselJ[], BesselY[]等等, 当然其实最简单的Sin[]和Cos[]也是, 这样的函数本身就是自己的解析式, 不能在被别的符号系统解析(构造)了. 我想Mathematica建立了这么一个库, 里面有最全面的最简的不能约减的函数, 以及一套根据积分运算建立的搜索算法, 将积分式代换或者展开, 然后把这个库里面的元素代入, 当然如果有同类项之类的最后还需要合并一下. 我想是这样子吧

    ReplyDelete