这个错误是什么:'matrix'对象没有属性'diff'

时间:2016-06-03 08:28:59

标签: python sympy differentiation

当我尝试运行此程序时,它会给出属性错误。 我是python的新手所以如果我错过了什么,请原谅。谢谢

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 import *     来自sympy import diff     输入sympy as 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)

1 个答案:

答案 0 :(得分:1)

正如在评论中所说,符号区分不能应用于SymPy矩阵对象。分别应用于每个条目。示例:

t1 = Symbol('t1')
jacobian = Matrix(*e.shape, lambda i,j: e[i,j].diff(t1))

第二行构造一个与e形状相同的矩阵,其中条目是e相对于t1的条目的导数。

(你从未真正在代码中定义t1,这使得第一行成为必要。)