如何解决sageMath符号产品无法替代和无限
该软件为SageMath版本9.1,并且代码主要涉及Sympy package's product function,因为SageMath以sympy为核心。
预期表达是
的乘积(1-q)...(1-q ^ n)
n的范围是1到无穷大。
首先,显示出the product did recognize the infinity symbol
product(1/x^2,x,1,oo)
返回正确的结果0。
错误1 但是,代码
product(1-a^x,oo)
返回的错误
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-11-d7561515fdb5> in <module>()
----> 1 product(Integer(1)-a**x,Integer(1),oo)
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/misc/functional.py in symbolic_prod(expression,*args,**kwds)
629 from .misc_c import prod as c_prod
630 if hasattr(expression,'prod'):
--> 631 return expression.prod(*args,**kwds)
632 elif len(args) <= 1:
633 return c_prod(expression,*args)
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/symbolic/expression.pyx in sage.symbolic.expression.Expression.prod (build/cythonized/sage/symbolic/expression.cpp:63909)()
12375 """
12376 from sage.calculus.calculus import symbolic_product
> 12377 return symbolic_product(self,**kwds)
12378
12379 def integral(self,**kwds):
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/calculus/calculus.py in symbolic_product(expression,v,a,b,algorithm,hold)
867
868 if algorithm == 'maxima':
--> 869 return maxima.sr_prod(expression,b)
870
871 elif algorithm == 'mathematica':
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/interfaces/maxima_lib.py in sr_prod(self,*args)
902 """
903 try:
--> 904 return max_to_sr(maxima_eval([[max_ratsimp],[[max_simplify_prod],([max_prod],[sr_to_max(SR(a)) for a in args])]]));
905 except RuntimeError as error:
906 s = str(error)
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/interfaces/maxima_lib.py in max_to_sr(expr)
1683 op=max_op_dict[op_max]
1684 max_args=cdr(expr)
-> 1685 args=[max_to_sr(a) for a in max_args]
1686 return op(*args)
1687 elif expr.symbolp():
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/interfaces/maxima_lib.py in <listcomp>(.0)
1683 op=max_op_dict[op_max]
1684 max_args=cdr(expr)
-> 1685 args=[max_to_sr(a) for a in max_args]
1686 return op(*args)
1687 elif expr.symbolp():
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/interfaces/maxima_lib.py in max_to_sr(expr)
1684 max_args=cdr(expr)
1685 args=[max_to_sr(a) for a in max_args]
-> 1686 return op(*args)
1687 elif expr.symbolp():
1688 if not(expr in max_sym_dict):
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/rings/integer.pyx in sage.rings.integer.Integer.__pow__ (build/cythonized/sage/rings/integer.c:14994)()
2222 return (<Integer>left)._pow_(right)
2223 elif isinstance(left,Element):
-> 2224 return coercion_model.bin_op(left,right,operator.pow)
2225 # left is a non-Element: do the powering with a Python int
2226 return left ** int(right)
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/structure/coerce.pyx in sage.structure.coerce.CoercionModel.bin_op (build/cythonized/sage/structure/coerce.c:10143)()
1209 self._record_exception()
1210 else:
-> 1211 return PyObject_CallObject(op,xy)
1212
1213 if op is mul:
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/structure/element.pyx in sage.structure.element.Element.__pow__ (build/cythonized/sage/structure/element.c:14059)()
2034 cdef int cl = classify_elements(left,right)
2035 if HAVE_SAME_PARENT(cl):
-> 2036 return (<Element>left)._pow_(right)
2037 if BOTH_ARE_ELEMENT(cl):
2038 return coercion_model.bin_op(left,pow)
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/symbolic/expression.pyx in sage.symbolic.expression.Expression._pow_ (build/cythonized/sage/symbolic/expression.cpp:25373)()
4092 relational_operator(self._gobj))
4093 else:
-> 4094 x = g_pow(self._gobj,nexp._gobj)
4095 return new_Expression_from_GEx(self._parent,x)
4096
ValueError: power::eval(): pow(1,Infinity) is not defined.
错误2 还定义了一个不确定的表达式
expres1=product(1-a^x,N)
返回了
-(-1)^N*product(a^x - 1,N)
但是,用替换
h=expres1.substitute({N:10})
返回了
-product(a^x - 1,10)
符号表达式h不能扩展
(h).series(a,10).expand()
返回的错误
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-17-e9b5fcf66965> in <module>()
1 #help(prod)
2 #(1/eta_1).series(q,10).expand()
----> 3 (h).series(a,Integer(10)).expand()
/opt/sagemath-9.1/local/lib/python3.7/site-packages/sage/symbolic/expression.pyx in sage.symbolic.expression.Expression.series (build/cythonized/sage/symbolic/expression.cpp:27193)()
4484 sig_on()
4485 try:
-> 4486 x = self._gobj.expand(0).series(symbol0._gobj,cprec,options)
4487 nex = SymbolicSeries.__new__(SymbolicSeries)
4488 nex._parent = self._parent
ValueError: power::eval(): division by zero
问题
您能告诉我上述代码出了什么问题吗?为什么sageMath不能识别无限积?为什么替换无效,并且程序无法评估功能?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。