Sympy,一般大小的矩阵,导数
Sympy, Matrices of general size, derivatives
我不确定以下是否可行。我试着查看文档,但看到了很多物理方面的东西,而不是我想要的。
是否可以像matrixcalculus.org一样,指定形状为(m,n)的一般矩阵Q,x,形状为n的向量,并进行这种计算。而不是将其限制为一定数量的维度并单独指定每个元素
您可以使用 MatrixSymbol
:
In [5]: n = Symbol('n')
In [6]: Q = MatrixSymbol('Q', n, n)
In [7]: x = MatrixSymbol('x', n, 1)
In [8]: f = x.T @ Q @ x
In [9]: f
Out[9]:
T
x ⋅Q⋅x
In [10]: diff(f, x)
Out[10]:
T
Q⋅x + Q ⋅x
如果用具体值代替 n
那么 as_explicit
可以得到扩展结果:
In [11]: diff(f, x).subs(n, 2).as_explicit()
Out[11]:
⎡2⋅Q₀₀⋅x₀₀ + Q₀₁⋅x₁₀ + Q₁₀⋅x₁₀⎤
⎢ ⎥
⎣Q₀₁⋅x₀₀ + Q₁₀⋅x₀₀ + 2⋅Q₁₁⋅x₁₀⎦
https://docs.sympy.org/latest/modules/matrices/expressions.html
我不确定以下是否可行。我试着查看文档,但看到了很多物理方面的东西,而不是我想要的。
是否可以像matrixcalculus.org一样,指定形状为(m,n)的一般矩阵Q,x,形状为n的向量,并进行这种计算。而不是将其限制为一定数量的维度并单独指定每个元素
您可以使用 MatrixSymbol
:
In [5]: n = Symbol('n')
In [6]: Q = MatrixSymbol('Q', n, n)
In [7]: x = MatrixSymbol('x', n, 1)
In [8]: f = x.T @ Q @ x
In [9]: f
Out[9]:
T
x ⋅Q⋅x
In [10]: diff(f, x)
Out[10]:
T
Q⋅x + Q ⋅x
如果用具体值代替 n
那么 as_explicit
可以得到扩展结果:
In [11]: diff(f, x).subs(n, 2).as_explicit()
Out[11]:
⎡2⋅Q₀₀⋅x₀₀ + Q₀₁⋅x₁₀ + Q₁₀⋅x₁₀⎤
⎢ ⎥
⎣Q₀₁⋅x₀₀ + Q₁₀⋅x₀₀ + 2⋅Q₁₁⋅x₁₀⎦
https://docs.sympy.org/latest/modules/matrices/expressions.html