该计划为詹姆斯·R·斯莱格尔麻省理工学院的论文解决新生微积分中符号积分问题的启发式程序,符号自动积分器(SAINT)因成为第一个实用的“专家系统”符号积分器而闻名,并且能够解决麻省理工学院本科微积分测试中的所有问题(迂腐地,错过了一些问题,但它可以解决它们;详细信息请参见此处在这个精彩的 YouTube 视频中 https://www.youtube.com/watch?v=PNKj529yY5c)
他的论文可以在这里免费获得:https://dspace.mit.edu/handle/1721.1/11997 https://dspace.mit.edu/handle/1721.1/11997
我很高兴尝试 Sympy 来解决这个问题,因为它看起来很平易近人,而且是一个相当困难的简化,我碰巧已经有了答案..但是,Sympy 并没有将积分简化为像 1961 年程序那样好的(主观?)简化(尽管它确实返回了相同的结果!)
问题与猜测
我怎样才能说服 Sympy 简化为相同的方程?
为什么它没有得到同样的、看似更简单的结果呢?
也许它选择第一个可能的结果,或者tan**3
是决心变得更糟吗?如果是这样,为什么它不简化 SAINT 的输出?)
当它找到一些匹配时,也许它会启动一个不同的分支呋常规 https://stackoverflow.com/a/30565252/4541045?
考试题3c
Sympy 简化
from sympy import *
x = symbols("x", real=True) # should this be assumed?
expr_inner = (x**4) / ((1 - x**2)**Rational(5,2))
expr_integral = integrate((expr_inner), x)
print(simplify(expr_integral))
(x**4*asin(x) + 4*x**3*sqrt(1 - x**2)/3 - 2*x**2*asin(x) - x*sqrt(1 - x**2) + asin(x))/(x**4 - 2*x**2 + 1)
平等证明
from sympy import *
x = symbols("x", real=True) # should this be assumed?
expr_saint = asin(x) + Rational(1,3)*tan(asin(x))**3 - tan(asin(x))
expr_sympy = (x**4*asin(x) + 4*x**3*sqrt(1 - x**2)/3 - 2*x**2*asin(x) - x*sqrt(1 - x**2) + asin(x))/(x**4 - 2*x**2 + 1)
expr_saint.equals(expr_sympy) # alternatively simplify(expr_saint - expr_sympy) https://stackoverflow.com/a/37115190/
True
方程显示