what is this error: 'matrix' object has no attribute 'diff'
what is this error: 'matrix' object has no attribute 'diff'
当我尝试 运行 这个程序时,它给出了属性错误。
我是 python 的新手,所以如果我错过了 anything.Thanks
,请原谅
import math
import numpy as np
from sympy import *
from sympy import diff
import sympy as sp
p=np.matrix([[0],[0],[0],[1]])
pdash=p
zi=Matrix(2, 1, lambda i,j: Symbol('z%d' % (i+1)))
xi=Matrix(2, 1, lambda i,j: Symbol('x%d' % (i+1)))
alphai=Matrix(2,1, lambda i,j: Symbol('a%d' % (i+1)))
thetai=Matrix(2,1, lambda i,j: Symbol('t%d' % (i+1)))
transformed=np.matrix([[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]])
def transformation_fn(zi,xi,thetai,alphai):
ca=cos((alphai))
sa=sin((alphai))
ct=cos((thetai))
st=sin((thetai))
transformation=np.matrix([[ct,-st*ca,st*sa,xi*ct],
[st,ct*ca,-ct*sa,xi*st],
[0,sa,ca,zi],
[0,0,0,1]])
return transformation
for z,x,t,a in zip(zi,xi,thetai,alphai):
transformed=transformed*transformation_fn(z,x,t,a)
e=transformed*p
jacobian=e.diff(t1)
print jacobian
如果 diff() 在这种情况下是否有效,我也尝试使用示例代码
导入数学
将 numpy 导入为 np
来自 sympy 导入 *
从 sympy 导入差异
将 sympy 导入为 sp
x, y, e1 = symbols('x y e1')
e=Matrix(2,1,lambda i,j:Symbol('e%d'%(i+1)))
I=np.matrix([[1 ,0 ],
[0 ,1 ]])
k=I*e
print k.diff(e1)
正如评论中所说,符号微分不能应用于 SymPy 矩阵对象。将它分别应用于每个条目。示例:
t1 = Symbol('t1')
jacobian = Matrix(*e.shape, lambda i,j: e[i,j].diff(t1))
第二行构造了一个与e
形状相同的矩阵,其中的元素是e
的元素相对于t1
的导数。
(您实际上从未在代码中定义 t1
,这使得此处的第一行成为必要。)
当我尝试 运行 这个程序时,它给出了属性错误。 我是 python 的新手,所以如果我错过了 anything.Thanks
,请原谅import math
import numpy as np
from sympy import *
from sympy import diff
import sympy as sp
p=np.matrix([[0],[0],[0],[1]])
pdash=p
zi=Matrix(2, 1, lambda i,j: Symbol('z%d' % (i+1)))
xi=Matrix(2, 1, lambda i,j: Symbol('x%d' % (i+1)))
alphai=Matrix(2,1, lambda i,j: Symbol('a%d' % (i+1)))
thetai=Matrix(2,1, lambda i,j: Symbol('t%d' % (i+1)))
transformed=np.matrix([[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]])
def transformation_fn(zi,xi,thetai,alphai):
ca=cos((alphai))
sa=sin((alphai))
ct=cos((thetai))
st=sin((thetai))
transformation=np.matrix([[ct,-st*ca,st*sa,xi*ct],
[st,ct*ca,-ct*sa,xi*st],
[0,sa,ca,zi],
[0,0,0,1]])
return transformation
for z,x,t,a in zip(zi,xi,thetai,alphai):
transformed=transformed*transformation_fn(z,x,t,a)
e=transformed*p
jacobian=e.diff(t1)
print jacobian
如果 diff() 在这种情况下是否有效,我也尝试使用示例代码 导入数学 将 numpy 导入为 np 来自 sympy 导入 * 从 sympy 导入差异 将 sympy 导入为 sp
x, y, e1 = symbols('x y e1')
e=Matrix(2,1,lambda i,j:Symbol('e%d'%(i+1)))
I=np.matrix([[1 ,0 ],
[0 ,1 ]])
k=I*e
print k.diff(e1)
正如评论中所说,符号微分不能应用于 SymPy 矩阵对象。将它分别应用于每个条目。示例:
t1 = Symbol('t1')
jacobian = Matrix(*e.shape, lambda i,j: e[i,j].diff(t1))
第二行构造了一个与e
形状相同的矩阵,其中的元素是e
的元素相对于t1
的导数。
(您实际上从未在代码中定义 t1
,这使得此处的第一行成为必要。)