【问题标题】:How to tell SymPy that a variable is a function of time?如何告诉 SymPy 变量是时间的函数?
【发布时间】:2020-11-26 00:04:58
【问题描述】:

我有一个这样的 3D 旋转矩阵:

R = sp.Matrix([
    [ sp.cos(q1 + q2),  -sp.sin(q1 + q2), 0],
    [-sp.sin(q1 + q2),   sp.cos(q1 + q2), 0],
    [               0,                 0, 1]
])

其中 q1 和 q2 是角度。其中之一,q2(t) 是时间的函数,它会发生变化。我怎么能说同情呢?

我想随着时间的推移区分该矩阵,但我不知道该怎么做。

这就是我宣布一切的方式:

q1, q2, t = sp.symbols('q1 q2 t', real=True)


R = sp.Matrix([
    [ sp.cos(q1 + q2),  -sp.sin(q1 + q2), 0],
    [-sp.sin(q1 + q2),   sp.cos(q1 + q2), 0],
    [               0,                 0, 1]
])

sp.diff(R, t)

这是我从sp.diff(R, t) 得到的输出:

我手动计算了与 R(按 t)的差异,因此我想在 SymPy 中得到类似的东西:

【问题讨论】:

  • 您可以定义q2 = sp.Function("q2", real=True)(t),而无需对您的代码进行其他更改。您还可以定义支持牛顿符号的q2 = sp.physics.vector.dynamicsymbols("q2", real=True);有关打印详细信息,请参阅此答案:stackoverflow.com/questions/25346132/…

标签: python sympy linear-algebra


【解决方案1】:

您需要将q1q2声明为未定义函数,然后在Rt计算的矩阵中使用它们。

import sympy as sp

t = sp.symbols('t', real=True)
q1 = sp.Function('q_1')
q2 = sp.Function('q_2')

R = sp.Matrix([
    [ sp.cos(q1(t) + q2(t)),  -sp.sin(q1(t) + q2(t)), 0],
    [-sp.sin(q1(t) + q2(t)),   sp.cos(q1(t) + q2(t)), 0],
    [               0,                 0, 1]
])

sp.diff(R, t)

SymPy 1.7 给出的结果是这样的:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2014-11-06
    • 2020-07-27
    • 1970-01-01
    相关资源
    最近更新 更多