Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sympy失败,wxMaxima没有_Python_Sympy_Maxima - Fatal编程技术网

Python Sympy失败,wxMaxima没有

Python Sympy失败,wxMaxima没有,python,sympy,maxima,Python,Sympy,Maxima,我试图用wxMaxima和Symphy解以下不定积分: integrate(r^2*sqrt(R^2-r^2),r) 在Maxima中我确实得到了答案,但在sympy中没有。我不明白为什么。我是Python的忠实用户,我喜欢用Python做符号数学,但由于Symphy没有解决这个问题,我仍然坚持使用Maxima 是我做错了还是Maxiam更好? (我在Mathematica中也解决了这个问题) 我在wxMaxima中得到了以下答案: f:r^2*sqrt(R^2-r^2); g:integra

我试图用wxMaxima和Symphy解以下不定积分:

integrate(r^2*sqrt(R^2-r^2),r)
在Maxima中我确实得到了答案,但在sympy中没有。我不明白为什么。我是Python的忠实用户,我喜欢用Python做符号数学,但由于Symphy没有解决这个问题,我仍然坚持使用Maxima

是我做错了还是Maxiam更好? (我在Mathematica中也解决了这个问题)

我在wxMaxima中得到了以下答案:

f:r^2*sqrt(R^2-r^2);
g:integrate(f,r);
回答如下:

g:(R^4*asin(r/abs(R)))/8-(r*(R^2-r^2)^(3/2))/4+(r*R^2*sqrt(R^2-r^2))/8  
它看起来很难看,但忘了它吧。这里的要点是Symphy不能解这个积分。试图用此代码解决相同问题:

import sympy as sy
import math
R,r = sy.symbols('R r')
g = sy.integrate(r**2*(R**2-r**2)**0.5,r)
print g
给出此错误消息的详细信息:

Traceback (most recent call last):
  File "E:\UD\Software\BendStiffener\calculate-moment\moment-calculation-equations\sympy-test.py", line 4, in <module>
    g = sy.integrate(r**2*(R**2-r**2)**0.5,r)
  File "C:\Python27\lib\site-packages\sympy\utilities\decorator.py", line 35, in threaded_func
    return func(expr, *args, **kwargs)
  File "C:\Python27\lib\site-packages\sympy\integrals\integrals.py", line 1232, in integrate
    risch=risch, manual=manual)
  File "C:\Python27\lib\site-packages\sympy\integrals\integrals.py", line 487, in doit
    conds=conds)
  File "C:\Python27\lib\site-packages\sympy\integrals\integrals.py", line 876, in _eval_integral
    h = meijerint_indefinite(g, x)
  File "C:\Python27\lib\site-packages\sympy\integrals\meijerint.py", line 1596, in meijerint_indefinite
    res = _meijerint_indefinite_1(f.subs(x, x + a), x)
  File "C:\Python27\lib\site-packages\sympy\integrals\meijerint.py", line 1646, in _meijerint_indefinite_1
    r = hyperexpand(r.subs(t, a*x**b))
  File "C:\Python27\lib\site-packages\sympy\simplify\hyperexpand.py", line 2482, in hyperexpand
    return f.replace(hyper, do_replace).replace(meijerg, do_meijer)
  File "C:\Python27\lib\site-packages\sympy\core\basic.py", line 1351, in replace
    rv = bottom_up(self, rec_replace, atoms=True)
  File "C:\Python27\lib\site-packages\sympy\simplify\simplify.py", line 4082, in bottom_up
    rv = F(rv)
  File "C:\Python27\lib\site-packages\sympy\core\basic.py", line 1336, in rec_replace
    new = _value(expr, result)
  File "C:\Python27\lib\site-packages\sympy\core\basic.py", line 1280, in <lambda>
    _value = lambda expr, result: value(*expr.args)
  File "C:\Python27\lib\site-packages\sympy\simplify\hyperexpand.py", line 2479, in do_meijer
    allow_hyper, rewrite=rewrite)
  File "C:\Python27\lib\site-packages\sympy\simplify\hyperexpand.py", line 2375, in _meijergexpand
    t, 1/z0)
  File "C:\Python27\lib\site-packages\sympy\simplify\hyperexpand.py", line 2335, in do_slater
    resid = residue(integrand, s, b_ + r)
  File "C:\Python27\lib\site-packages\sympy\series\residues.py", line 57, in residue
    s = expr.series(x, n=0)
  File "C:\Python27\lib\site-packages\sympy\core\expr.py", line 2435, in series
    rv = self.subs(x, xpos).series(xpos, x0, n, dir, logx=logx)
  File "C:\Python27\lib\site-packages\sympy\core\expr.py", line 2442, in series
    s1 = self._eval_nseries(x, n=n, logx=logx)
  File "C:\Python27\lib\site-packages\sympy\core\mul.py", line 1446, in _eval_nseries
    terms = [t.nseries(x, n=n, logx=logx) for t in self.args]
  File "C:\Python27\lib\site-packages\sympy\core\expr.py", line 2639, in nseries
    return self._eval_nseries(x, n=n, logx=logx)
  File "C:\Python27\lib\site-packages\sympy\functions\special\gamma_functions.py", line 168, in _eval_nseries
    return super(gamma, self)._eval_nseries(x, n, logx)
  File "C:\Python27\lib\site-packages\sympy\core\function.py", line 598, in _eval_nseries
    term = e.subs(x, S.Zero)
  File "C:\Python27\lib\site-packages\sympy\core\basic.py", line 892, in subs
    rv = rv._subs(old, new, **kwargs)
  File "C:\Python27\lib\site-packages\sympy\core\basic.py", line 1006, in _subs
    rv = fallback(self, old, new)
  File "C:\Python27\lib\site-packages\sympy\core\basic.py", line 983, in fallback
    rv = self.func(*args)
  File "C:\Python27\lib\site-packages\sympy\core\function.py", line 382, in __new__
    return result.evalf(mlib.libmpf.prec_to_dps(pr))
  File "C:\Python27\lib\site-packages\sympy\core\evalf.py", line 1317, in evalf
    result = evalf(self, prec + 4, options)
  File "C:\Python27\lib\site-packages\sympy\core\evalf.py", line 1217, in evalf
    re, im = x._eval_evalf(prec).as_real_imag()
  File "C:\Python27\lib\site-packages\sympy\core\function.py", line 486, in _eval_evalf
    v = func(*args)
  File "C:\Python27\lib\site-packages\sympy\mpmath\ctx_mp_python.py", line 993, in f
    return ctx.make_mpf(mpf_f(x._mpf_, prec, rounding))
  File "C:\Python27\lib\site-packages\sympy\mpmath\libmp\gammazeta.py", line 1947, in mpf_gamma
    raise ValueError("gamma function pole")
ValueError: gamma function pole
回溯(最近一次呼叫最后一次):
文件“E:\UD\Software\BendStiffener\calculate moment\moment calculate equations\sympy test.py”,第4行,in
g=系统积分(r**2*(r**2-r**2)**0.5,r)
文件“C:\Python27\lib\site packages\sympy\utilities\decorator.py”,第35行,在threaded_func中
返回函数(expr、*args、**kwargs)
文件“C:\Python27\lib\site packages\sympy\integrals\integrals.py”,第1232行,在integrate中
risch=risch,手动=手动)
文件“C:\Python27\lib\site packages\sympy\integrals\integrals.py”,第487行,在doit中
秒=秒)
文件“C:\Python27\lib\site packages\sympy\integrals\integrals.py”,第876行,in_eval_integral
h=meijerint_不定(g,x)
文件“C:\Python27\lib\site packages\sympy\integrals\meijerint.py”,第1596行,格式为meijerint\u
res=_meijerint_unfinite_1(f.subs(x,x+a),x)
文件“C:\Python27\lib\site packages\sympy\integrals\meijerint.py”,第1646行,在\u meijerint\u unfinite\u 1中
r=超扩展(r.subs(t,a*x**b))
文件“C:\Python27\lib\site packages\sympy\simplify\hyperexpand.py”,第2482行,在hyperexpand中
返回f.replace(超,do_replace)。replace(meijerg,do_meijer)
文件“C:\Python27\lib\site packages\sympy\core\basic.py”,第1351行,替换为
rv=自底向上(自身、重新替换、原子=真)
文件“C:\Python27\lib\site packages\sympy\simplify\simplify.py”,第4082行,自下而上
rv=F(rv)
文件“C:\Python27\lib\site packages\sympy\core\basic.py”,第1336行,在rec\u replace中
新=_值(表达式,结果)
文件“C:\Python27\lib\site packages\sympy\core\basic.py”,第1280行,在
_值=λ表达式,结果:值(*expr.args)
do_meijer中的文件“C:\Python27\lib\site packages\sympy\simplify\hyperexpand.py”,第2479行
允许(超,重写=重写)
文件“C:\Python27\lib\site packages\sympy\simplify\hyperexpand.py”,第2375行,在_meijergexpand中
t、 1/z0)
do_slater中的文件“C:\Python27\lib\site packages\sympy\simplify\hyperexpand.py”,第2335行
剩余=剩余(被积函数,s,b_+r)
文件“C:\Python27\lib\site packages\sympy\series\residuals.py”,第57行,剩余部分
s=expr.系列(x,n=0)
文件“C:\Python27\lib\site packages\sympy\core\expr.py”,第2435行,串联
rv=self.subs(x,xpos).系列(xpos,x0,n,dir,logx=logx)
文件“C:\Python27\lib\site packages\sympy\core\expr.py”,第2442行,串联
s1=自评估系列(x,n=n,logx=logx)
文件“C:\Python27\lib\site packages\sympy\core\mul.py”,第1446行,在\u eval\u n系列中
terms=[t.nseries(x,n=n,logx=logx)表示self.args中的t]
文件“C:\Python27\lib\site packages\sympy\core\expr.py”,第2639行,N系列
返回自评估序列(x,n=n,logx=logx)
文件“C:\Python27\lib\site packages\sympy\functions\special\gamma\u functions.py”,第168行,在\u eval\u n系列中
返回超(伽马,自)序列(x,n,logx)
文件“C:\Python27\lib\site packages\sympy\core\function.py”,第598行,在\u eval\u n系列中
术语=e.subs(x,S.Zero)
文件“C:\Python27\lib\site packages\sympy\core\basic.py”,第892行,在subs中
rv=rv.\u接头(旧的、新的,**kwargs)
文件“C:\Python27\lib\site packages\sympy\core\basic.py”,第1006行,在_subs中
rv=后备(自身、旧的、新的)
回退中第983行的文件“C:\Python27\lib\site packages\sympy\core\basic.py”
rv=self.func(*args)
文件“C:\Python27\lib\site packages\sympy\core\function.py”,第382行,在新的__
返回result.evalf(mlib.libmpf.prec_to_dps(pr))
文件“C:\Python27\lib\site packages\sympy\core\evalf.py”,evalf中第1317行
结果=evalf(自身、prec+4、选项)
文件“C:\Python27\lib\site packages\sympy\core\evalf.py”,第1217行,在evalf中
re,im=x._eval_evalf(prec).as_real_imag()
文件“C:\Python27\lib\site packages\sympy\core\function.py”,第486行,在\u eval\u evalf中
v=func(*args)
文件“C:\Python27\lib\site packages\sympy\mpmath\ctx\u mp\u python.py”,第993行,在f中
返回ctx.make_强积金(强积金(x.\u强积金,预积金,四舍五入))
文件“C:\Python27\lib\site packages\sympy\mpmath\libmp\gammazeta.py”,第1947行,mpf\u gamma
提升值错误(“伽马函数极”)
值错误:伽马函数极

当您稍微重写方程式时,您会得到一个解决方案:

import sympy as sy
import math
R, r = sy.symbols('R r')

g = sy.integrate(r**2 * sy.sqrt((R**2 - r**2)), r)

print g.simplify()
因此,我没有使用
expr**0.5
,而是使用
sy.sqrt(expr)
。那就

Piecewise((I*R*(-R**3*acosh(r/R) - R**2*r*sqrt((-R**2 + r**2)/R**2) + 2*r**3*sqrt((-R**2 + r**2)/R**2))/8, Abs(r**2/R**2) > 1), (R*(R**3*asin(r/R) - R**2*r*sqrt(1 - r**2/R**2) + 2*r**3*sqrt(1 - r**2/R**2))/8, True))
很难判断这是否与Maxima的结果相同,因为Symphy给出了两个部分的解决方案,这取决于
sqrt
中的参数是大于还是小于0。您可以尝试使用实际边界,并检查对于最大值解和Symphy给出的结果的第二部分是否得到相同的结果

您可以通过以下方式访问解决方案的第二部分:

g.args[1][0]
这给了你:

 R**4*asin(r/R)/8 - R**3*r/(8*sqrt(1 - r**2/R**2)) + 3*R*r**3/(8*sqrt(1 - r**2/R**2)) - r**5/(4*R*sqrt(1 - r**2/R**2))
R*(R**3*asin(r/R) - R**2*r*sqrt(1 - r**2/R**2) + 2*r**3*sqrt(1 - r**2/R**2))/8
您还可以通过执行以下操作获得简化版本:

 g.args[1][0].simplify()
这给了你:

 R**4*asin(r/R)/8 - R**3*r/(8*sqrt(1 - r**2/R**2)) + 3*R*r**3/(8*sqrt(1 - r**2/R**2)) - r**5/(4*R*sqrt(1 - r**2/R**2))
R*(R**3*asin(r/R) - R**2*r*sqrt(1 - r**2/R**2) + 2*r**3*sqrt(1 - r**2/R**2))/8

这看起来与Maxima得出的结果非常相似。

一般来说,SymPy使用有理数比使用浮点数表现更好,特别是当这些数字是幂时

这是因为“好的”闭式解通常只存在于精确幂。例如,考虑这个

之间的区别。
In [39]: integrate(r**2*sqrt(R**2-r**2), r)
Out[39]:
⎧     4      ⎛r⎞
⎪  ⅈ⋅R ⋅acosh⎜─⎟            3                      3                  5             │ 2│
⎪            ⎝R⎠         ⅈ⋅R ⋅r             3⋅ⅈ⋅R⋅r                ⅈ⋅r              │r │
⎪- ───────────── + ───────────────── - ───────────────── + ───────────────────  for │──│ > 1
⎪        8                 _________           _________             _________      │ 2│
⎪                         ╱       2           ╱       2             ╱       2       │R │
⎪                        ╱       r           ╱       r             ╱       r
⎪                  8⋅   ╱   -1 + ──    8⋅   ╱   -1 + ──    4⋅R⋅   ╱   -1 + ──
⎪                      ╱          2        ╱          2          ╱          2
⎪                    ╲╱          R       ╲╱          R         ╲╱          R
⎨
⎪     4     ⎛r⎞
⎪    R ⋅asin⎜─⎟          3                     3                 5
⎪           ⎝R⎠         R ⋅r              3⋅R⋅r                 r
⎪    ────────── - ──────────────── + ──────────────── - ──────────────────       otherwise
⎪        8                ________           ________             ________
⎪                        ╱      2           ╱      2             ╱      2
⎪                       ╱      r           ╱      r             ╱      r
⎪                 8⋅   ╱   1 - ──    8⋅   ╱   1 - ──    4⋅R⋅   ╱   1 - ──
⎪                     ╱         2        ╱         2          ╱         2
⎩                   ╲╱         R       ╲╱         R         ╲╱         R
还有这个

In [40]: integrate(r**2*(R**2-r**2)**0.5001, r)
Out[40]:
                                  ⎛             │  2  2⋅ⅈ⋅π⎞
                   1.0002  3  ┌─  ⎜-0.5001, 3/2 │ r ⋅ℯ     ⎟
0.333333333333333⋅R      ⋅r ⋅ ├─  ⎜             │ ─────────⎟
                             2╵ 1 ⎜    5/2      │      2   ⎟
                                  ⎝             │     R    ⎠ 
幂几乎为0.5,但答案需要使用特殊函数来表示。SymPy可能不会注意到t