python - 如何在矩阵/向量乘法后最小化 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', (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)
的输出
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', 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(_))
推荐阅读
- scala - 使用 hashmap 过滤数据帧
- c - 乘以和增加战俘
- mysql - 如何为数据库中的现有用户上传文件并在 laravel 5.4 中为他们创建一个文件夹
- javascript - 两个二维数组的差异
- mysql - MySQL返回不返回所有记录
- python - python读取动态stdout过程
- javascript - 为什么在 Promise.all 中对 Promise 的第二次引用没有解决?
- javascript - 使用javascript动态添加Materialize modal
- reactjs - 反应,用户输入添加到状态并显示
- php - 获取错误:instamojo 中的 invalid_client