简体   繁体   English

如何在矩阵/向量乘法后最小化 sympy 偏导数表达式?

[英]How to minimize sympy partial derivative expression after matrix/vector multiplication?

I'm using sympy to compute the partial derivative of a matrix/vector multiplication (see code below) but the resultant expression is to complicated and I would like to know if there is a way to simplify it.我正在使用 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', (2, 4)))
Cc = Matrix(symarray('Cc', (2, 4)))

qi = Matrix(symarray('qi', (4, 1)))
qj = Matrix(symarray('qj', (4, 1)))

R90 = Matrix(symarray('R90', (2, 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)

The output of output

print('u_diff : ', u_diff)

is

[[[[Ca_0_0], [Ca_1_0]]], [[[Ca_0_1], [Ca_1_1]]], [[[Ca_0_2], [Ca_1_2]]], [[[Ca_0_3], [Ca_1_3]]]]

and I would like to be just我想只是

Ca

Consequently the output of因此 output 的

'constr_eq_diff_wrt_qi' 

and

constr_eq_diff_wrt_qj

is unreadable.是不可读的。

Thank you.谢谢你。 Ivo伊沃

Based on @asmeurer help here is a working example:基于@asmeurer 帮助这里是一个工作示例:

from sympy import MatrixSymbol, diff

# Initialize simbolic matrices 
Ca = MatrixSymbol('Ca', 2, 4)
Cb = MatrixSymbol('Cb', 2, 4)
Cc = MatrixSymbol('Cc', 2, 4)

qi = MatrixSymbol('qi', 4, 1)
qj = MatrixSymbol('qj', 4, 1)

R90 = MatrixSymbol('R90', 2, 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(_))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM