我正在研究带有几个符号计算的交互式笔记本,其中有两个涉及平方根的不定积分。这些是积分表的积分 (29) 和 (30) --> http://integral-table.com。
当我尝试使用 wxMaxima 和 Sympy 评估这些不定积分时,我得到了错误的结果:
wxMaxima:
(29) 与正确的类似,但 log 函数的参数是错误的。
(%i127) integrate(sqrt(x^2-a^2),x);
(%o127) (x*sqrt(x^2-a^2))/2-(a^2*log(2*sqrt(x^2-a^2)+2*x))/2
(30) 与正确的类似,但用 arcsin 代替 arctan 和错误的论点。
(%i128) integrate(sqrt(a^2-x^2), x);
(%o128) (a^2*asin(x/abs(a)))/2+(x*sqrt(a^2-x^2))/2
同情:
(29) 完全不同且混乱的结果。
from sympy import *
x, a = Symbol('x', real=True), Symbol('a', real=True)
integrate(sqrt(x**2 - a**2), x)
(30) 同样,完全不同且混乱的结果。
integrate(sqrt(a**2-x**2),x)
相反,使用 Wolfram Alpha 我得到了正确的原始函数:
(29) https://www.wolframalpha.com/input/?i=Integrate%5BSqrt%5B+x%5E2-a%5E2%5D%2C+x%5D
(30) https://www.wolframalpha.com/input/?i=Integrate%5BSqrt%5Ba%5E2+-+x%5E2%5D%2C+x%5D
有谁知道如何规避这个问题,至少使用 wxMaxima 吗?也许有一些技巧,或者我认为这些是要报告给开发人员的错误。
谢谢!
ps:我需要使用免费的笔记本,所以使用 Wolfram Alpha 或 Mathematica 不是解决方案。
编辑:关于积分(30),通过谷歌搜索我刚刚发现了 arcsin 和 arctan 函数之间的这种关系:
asin(x/a) = atan(x/sqrt(a^2-x^2))
这使得我用 Maxima 获得的结果等于积分表中指示的结果,并由 Wolfram Alpha 给出。但是,wxMaxima 似乎不知道这种关系,因为:
(%i165) ratsimp(atan(x/sqrt(a^2-x^2))- asin(x/a));
(%o165) atan(x/sqrt(a^2-x^2))-asin(x/a)
或通过设置 a=2,例如:
(%i167) ratsimp(atan(x/sqrt(a^2-x^2))- asin(x/a)), a=2;
(%o167) atan(x/sqrt(4-x^2))-asin(x/2)
我尝试使用几种简化方法,但我从未得到零,因此 asin(x/a) 和 atan(x/sqrt(a^2-x^2)) 之间是等价的。