x 上面有一个点,而不是 dx/dt

问题描述 投票:0回答:1

我有一个小脚本(我正在使用 Colab 笔记本)来计算双摆的运动方程。

这是我所拥有的:

# First the libraries are imported.
import numpy as np
import sympy as sp
import sympy.physics.mechanics as mech
mech.init_vprinting()
# Symbols
g = sp.symbols('g', real=True, positive = True)
t = sp.symbols('t', real=True, positive = True)
L1 = sp.symbols('L1', real=True, positive = True)
L2 = sp.symbols('L2', real=True, positive = True)
m1 = sp.symbols('m1', real=True, positive = True)
m2 = sp.symbols('m2', real=True, positive = True)
A = sp.Function('A')(t) 
B = sp.Function('B')(t) 

#Position mass 1
X1 = L1*sp.sin(A)
Y1 = -L1*sp.cos(A)
#Position mass 2
X2 = L1*sp.sin(A) + L2*sp.sin(B)
Y2 = -L1*sp.cos(A) - L2*sp.cos(B)
# Potential energy
V = m1*g*Y1 + m2*g*Y2
# Kinetic energy
T = sp.Rational(1,2) * m1 * ( X1.diff(t)**2 + Y1.diff(t)**2 ) + sp.Rational(1,2) * m2 * ( X2.diff(t)**2 + Y2.diff(t)**2 )
T = T.simplify()

print(f'visualisation of the function through the print command: \n {T}')
print('\n This would be the visualisation of the same function, but writing the variable alone \n')
T

我遇到的问题如下,我想打印符号

$\dot{A}$
(顶部有一个点的A),而不是
Derivative(A(t), t)
。我发现这个线程,他们解释说一种方法是添加行:

import sympy.physics.mechanics as mech
mech.init_vprinting()

我就是这样做的,如果我只写变量,它就可以工作。但是,如果我通过 print 命令打印变量,则不起作用。

然后,问题是:有没有一种方法可以使用顶部带有点的符号而不是

derivative(A,t)
,但在与 print 命令一起使用时可以使用?

这就是我得到的:

enter image description here

我尝试使用行

import sympy.physics.mechanics as mech mech.init_vprinting()
,但我没有在表达式上得到符号\dot{A},而是导数(A,t)

python printing sympy symbols derivative
1个回答
0
投票

这里有两件事。

  1. 使用

    sympy.physics.mechanics
    模块时,为了Latex打印机能够正常工作,时间变量不能有任何假设。因此,请将
    t = sp.symbols('t', real=True, positive = True)
    替换为
    t = sp.symbols('t')
    t = mech.dynamicsymbols._t

  2. 以稳健且完整的方式解决字符串可视化问题并不容易。正确的解决方案需要对 Python 内部进行一些挂钩,这非常耗时。如果您可以调整打印语句的编码方式,那么任务将大大简化。考虑这个命令,例如:

print(f'visualisation of the function through the print command: \n {T}')

在这里,我相信Python将用

T
格式化
str
,然后将其与其他字符串组合。如果您可以在不使用 f 字符串或
format
"string %s" % T
的情况下重写它,我们可以创建自定义打印方法:

from sympy.physics.vector.printing import VectorStrPrinter
printer = VectorStrPrinter()

def myprint(*values, **kwargs):
    v = " ".join([printer.doprint(v) for v in values])
    print(v)

myprint('visualisation of the function through the print command: \n ', T)
# visualisation of the function through the print command: 
#  L1**2*m1*A'**2/2 + m2*(L1**2*A'**2 + 2*L1*L2*cos(A - B)*A'*B' + L2**2*B'**2)/2

请注意,

Derivative(A(t), t)
已替换为
A'

© www.soinside.com 2019 - 2024. All rights reserved.