我有以下代码:
from sympy import *
init_printing()
x,y = symbols('x y')
u = Function('u')(x,y)
ux,uy,uxx,uxy,uyy = symbols("u_x u_y u_xx u_xy u_yy")
mainEvaluation = uxx - 2*sin(x)*uxy - (cos(x) ** 2) * uyy - 2*ux + (2 - cos(x) + 2*sin(x) )*uy
当print(mainExpression)
的输出为
问题是:我想要变量的原始顺序。在
u_xx - 2*u_xy*sin(x) - u_yy*cos(x)**2 - 2*u_x + u_y*(2*sin(x) - cos(x) + 2)
所有这些都在IPython笔记本中完成。 有没有办法维持秩序?在
遗憾的是,SymPy没有记录输入顺序(请参阅我在对该问题的评论中链接的另一个问题)。你可以定义你自己的排序函数来对表达式进行任何你想要的排序,但是没有办法完全按照输入的顺序排序,因为这些信息不会被保存。在
试试看这个http://docs.sympy.org/0.7.2/modules/utilities/misc.html,可能会对你有帮助
注:
返回的键对于将项按规范顺序排列非常有用,这种顺序在不同平台上都是相同的。它对于排序表达式列表没有直接的用处:
由于a只有1个项,其
^{pr2}$sort_key
的值不受顺序的影响:如果
a
和b
组合在一起,则密钥将不同,因为有可以排序的术语:但是,由于每个术语的键都独立于order的值,因此当它们单独出现在列表中时,它们的排序不会有所不同:
使用这些键时获得的术语顺序是如果这些术语是产品中的因子,则将获得的顺序。在
如果知道参数/术语是什么,则可以使用
evaluate=False
手动创建Add,以保持它们的顺序,并使用初始化为不更改顺序的打印机打印它们:这个输出
^{pr2}$相关问题 更多 >
编程相关推荐