如何解决wxMaxima 和 Sympy 的错误 (?) 不定积分结果
我正在研究具有多个符号计算的交互式笔记本,其中有两个涉及平方根的不定积分。 这些是积分表的积分 (29) 和 (30) --> http://integral-table.com。
当我尝试用 wxMaxima 和 Sympy 计算这些不定积分时,我得到了错误的结果:
wxMaxima:
(%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)
Result of integral (29) with Sympy
(30) 再次,完全不同和混乱的结果。
integrate(sqrt(a**2-x**2),x)
Result of integral (30) with Sympy
相反,使用 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) 之间是等价的。
解决方法
感谢您的调查,我非常感谢。我是千里马开发人员。任何错误的结果都应报告给错误跟踪器:https://sourceforge.net/p/maxima/bugs/ 必须有一个 Sourceforge 帐户才能提交错误报告。此外,大多数关于 Maxima 的讨论都是通过邮件列表进行的:https://sourceforge.net/projects/maxima/lists/maxima-discuss
关于您提到的结果,您可以通过对 x 进行微分然后与被积函数进行比较来验证结果。当我这样做时,第二个得到相同的结果。第一个是不同的,但数值评估表明(我知道不能证明)它是一样的。
(%i2) e: sqrt(x^2 - a^2);
2 2
(%o2) sqrt(x - a )
(%i3) integrate (e,x);
2 2 2 2 2
x sqrt(x - a ) a log(2 sqrt(x - a ) + 2 x)
(%o3) --------------- - -----------------------------
2 2
(%i4) diff (%o3,x);
2 2 x
a (------------- + 2)
2 2 2 2
sqrt(x - a ) sqrt(x - a )
(%o4) (- -------------------------) + -------------
2 2 2
2 (2 sqrt(x - a ) + 2 x)
2
x
+ ---------------
2 2
2 sqrt(x - a )
(%i5) ratsimp (%);
2 2 2 2
x sqrt(x - a ) + x - a
(%o5) -------------------------
2 2
sqrt(x - a ) + x
(这里省略了一些探索性的旋转......现在跳转到最终结果)
(%i11) %o5 - e,a = 1;
2 2
x sqrt(x - 1) + x - 1 2
(%o11) ----------------------- - sqrt(x - 1)
2
sqrt(x - 1) + x
(%i12) makelist (''%,x,makelist (i,i,1,10)),numer;
(%o12) [0.0,0.0,8.881784197001252E-16,- 1.77635683940025E-15,- 1.77635683940025E-15]
不幸的是,我可以诚实地说,确定和不确定的集成是 Maxima 的许多错误的来源。我们正在继续努力,为此,检查结果对您非常有帮助,因此我鼓励您继续努力。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。