如何解决如何用sympy求这个矩阵公式的导数
我有以下代码
from sympy import MatrixSymbol,Matrix
from sympy import *
# Equation for line P = P0 + t*Pv
P0 = MatrixSymbol('P0',3,1)
Pv = MatrixSymbol('Pv',1)
t = symbols('t')
P = P0 + t*Pv
# Cone origin and axis
A0 = MatrixSymbol('A0',1)
Av = MatrixSymbol('Av',1)
K = (P - A0)
Q = K.T*Av
R = sqrt((K.T*K-Q.T*Q))
# components for the cone normal
sin,cos = symbols('sin cos')
KK = -sin*Q + cos*R
KKd = KK.diff(t)
print(KKd)
上面的代码是试图找出线段上离锥体最近的点的逻辑的一部分。然而,这个谜题并不是特别相关。问题是为什么我用上面的代码不断收到以下错误?我遇到了同样的错误
R.diff(t)
失败但是
K.diff(t)
和
Q.diff(t)
和
(K.T*K-Q.T*Q).diff(t)
不要失败。所以我认为问题在于平方根的构造。但是在 (K.T*K-Q.T*Q)
之后,结果应该是一个标量,所以我不确定问题是什么。
Traceback (most recent call last):
File "c:\Users\brad\Downloads\cone2.py",line 23,in <module>
KKd = KK.diff(t)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\expr.py",line 3502,in diff
return _derivative_dispatch(self,*symbols,**assumptions)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\function.py",line 1946,in _derivative_dispatch
return ArrayDerivative(expr,*variables,**kwargs)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\tensor\array\array_derivatives.py",line 17,in __new__
obj = super().__new__(cls,expr,**kwargs)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\function.py",line 1473,in __new__
obj = cls._dispatch_eval_derivative_n_times(expr,v,count)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\tensor\array\array_derivatives.py",line 106,in _dispatch_eval_derivative_n_times
result = cls._call_derive_matexpr_by_scalar(expr,v)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\tensor\array\array_derivatives.py",line 66,in _call_derive_matexpr_by_scalar
return expr._eval_derivative(v)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\matrices\expressions\matexpr.py",line 220,in _eval_derivative
return super()._eval_derivative(x)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\cache.py",line 74,in wrapper
retval = func(*args,**kwargs)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\add.py",line 498,in _eval_derivative
return self.func(*[a.diff(s) for a in self.args])
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\add.py",in <listcomp>
return self.func(*[a.diff(s) for a in self.args])
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\expr.py",**kwargs)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\mul.py",line 977,in _eval_derivative
d = args[i].diff(s)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\expr.py",in _call_derive_matexpr_by_scalar
return expr._eval_derivative(v)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\matrices\expressions\matpow.py",line 93,in _eval_derivative
return Pow._eval_derivative(self,x)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\power.py",line 1322,in _eval_derivative
return self * (dexp * log(self.base) + dbase * self.exp/self.base)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\numbers.py",line 2165,in __add__
return Rational.__add__(self,other)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\decorators.py",line 95,in __sympifyit_wrapper
return func(a,b)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\numbers.py",line 1708,in __add__
return Number.__add__(self,line 724,in __add__
return AtomicExpr.__add__(self,line 266,in _func
return func(self,line 135,in binary_op_wrapper
return f(self)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\matrices\expressions\matexpr.py",line 29,b)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\core\decorators.py",line 136,in binary_op_wrapper
return func(self,other)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\matrices\expressions\matexpr.py",line 113,in __radd__
return MatAdd(other,self,check=True).doit()
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\matrices\expressions\matadd.py",line 51,in __new__
validate(*args)
File "c:\users\brad\appdata\local\programs\python\python39\lib\site-packages\sympy\matrices\expressions\matadd.py",in validate
raise TypeError("Mix of Matrix and Scalar symbols")
TypeError: Mix of Matrix and Scalar symbols
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。