1

我正在研究带有几个符号计算的交互式笔记本,其中有两个涉及平方根的不定积分。这些是积分表的积分 (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)

Sympy 积分 (29) 的结果

(30) 同样,完全不同且混乱的结果。

integrate(sqrt(a**2-x**2),x)

Sympy 积分 (30) 的结果

相反,使用 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)) 之间是等价的。

4

1 回答 1

1

感谢调查,非常感谢。我是一名 Maxima 开发人员。任何错误的结果都应该报告给错误跟踪器: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, 0.0, 0.0, 8.881784197001252E-16, 
8.881784197001252E-16, 0.0, 0.0, - 1.77635683940025E-15, 
- 1.77635683940025E-15]

不幸的是,我可以诚实地说,无论是明确的还是无限的,集成都是 Maxima 的许多错误的根源。我们正在继续努力,为此,检查结果对您非常有帮助,因此我鼓励您继续努力。

于 2021-06-29T15:46:40.353 回答