如何解决如何在矩阵/向量乘法后最小化 sympy 偏导数表达式?
我正在使用 sympy 来计算矩阵/向量乘法的偏导数(参见下面的代码),但结果表达式很复杂,我想知道是否有办法简化它。
from sympy import symbols,MatrixSymbol,diff,Matrix,symarray,expand,factor,simplify
import numpy as np
Ca = Matrix(symarray('Ca',(2,4)))
Cb = Matrix(symarray('Cb',4)))
Cc = Matrix(symarray('Cc',4)))
qi = Matrix(symarray('qi',(4,1)))
qj = Matrix(symarray('qj',1)))
R90 = Matrix(symarray('R90',2)))
u = (Ca*qi - Cb*qj)
v = (Cc*qj - Cb*qj)
u_tilde = R90*u
# Equation
constr_eq = (u_tilde).T*v
# Partial derivatives
u_diff = u.diff(qi)
constr_eq_diff_wrt_qi = constr_eq.diff(qi)
constr_eq_diff_wrt_qj = constr_eq.diff(qj)
print('u_diff : ',u_diff)
是
[[[[Ca_0_0],[Ca_1_0]]],[[[Ca_0_1],[Ca_1_1]]],[[[Ca_0_2],[Ca_1_2]]],[[[Ca_0_3],[Ca_1_3]]]]
而我只想成为
Ca
因此输出
'constr_eq_diff_wrt_qi'
和
constr_eq_diff_wrt_qj
不可读。
谢谢。 伊沃
解决方法
基于@asmeurer 的帮助,这里有一个工作示例:
from sympy import MatrixSymbol,diff
# Initialize simbolic matrices
Ca = MatrixSymbol('Ca',2,4)
Cb = MatrixSymbol('Cb',4)
Cc = MatrixSymbol('Cc',4)
qi = MatrixSymbol('qi',4,1)
qj = MatrixSymbol('qj',1)
R90 = MatrixSymbol('R90',2)
# Initialize vectors
u = (Ca*qi - Cb*qj)
v = (Cc*qj - Cb*qj)
u_tilde = R90*u
# Constraint Equation
constr_eq = (u_tilde).T*v
# Partial derivatives
generalized_coordinates = [qi,qj]
# Get contraint equations partial derivatives
for _ in generalized_coordinates:
print('jacobian wrt ' + str(_) + ' : ',constr_eq.diff(_))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。