在sympy中实现牛顿点记法(或拉格朗日素数记法)是否可行?
莱布尼茨的符号有时候会让人觉得有点乱,尤其是在物理问题中,当时间是唯一需要进行微分的变量时。此外,能不能不显示像 x(t)
这样的函数中的 (t)
,让 sympy 仍然明白 x
是 t
的函数,并且这样处理它呢?
1 个回答
12
你可以使用这个力学模块,它是基于牛顿物理学设计的。特别是,dynamicssymbols
可以给你一个符号,这个符号是隐含依赖于t
的。
In [10]: x, y = dynamicsymbols('x y')
In [11]: x
Out[11]: x(t)
默认情况下,这些符号会显示(t)
,但如果你启用力学打印功能,它们就不会显示了。
In [1]: from sympy.physics.mechanics import dynamicsymbols, init_vprinting
In [2]: init_vprinting
Out[2]: <function sympy.physics.vector.printing.init_vprinting>
In [3]: init_vprinting()
In [4]: x
Out[4]: x
In [5]: t = sympy.Symbol('t')
In [6]: y.diff(t)
Out[6]: ẏ
在你开发的任何交互环境中,比如IPython笔记本,使用init_vprinting
代替init_printing
(如果你想从脚本中打印东西,还有像mpprint
这样的函数)。
如果你想了解更多关于SymPy力学模块的信息,可以阅读文档,还可以看看2014年SciPy大会的教程。