我试着用sympy来微分一组方程,我必须用我计算的导数来创建一个2x2矩阵。这是我的代码:
#import numpy as np
from numpy import *
from scipy import *
from sympy import *
x1 = 3; x2 = 0; x3 = 0; x4 = 3
y1 = 3; y2 = 3; y3 = 0; y4 = 0
s = Symbol('s')
t = Symbol('t')
N1 = (s+1)*(t+1)/4
N2 = (1-s)*(t+1)/4
N3 = (1-s)*(1-t)/4
N4 = (s+1)*(1-t)/4
x = (x1*N1)+(x2*N2)+(x3*N3)+(x4*N4)
y = (y1*N1)+(y2*N2)+(y3*N3)+(y4*N4)
dxs = diff(x, s)
dxt = diff(x, t)
dys = diff(y, s)
dyt = diff(y, t)
#print type(dxs).__name__
print dxs, dxt, dys, dyt
J = Matrix([dxs, dys], [dxt, dyt])
#J = np.matrix((dxs, dys), (dxt, dyt))
print J
但是,我得到一个“数据类型未找到”错误。所以,我尝试使用type()函数来打印最后得到的导数的数据类型。我有两种不同的类型。当最后的导数只是数字时,type()返回'Rational'。当最终导数中包含变量“s”或“t”时,它返回“Add”(这可以通过为x2、x3、y3和y4指定非零值来实现)。如果有人能帮助我创建这个矩阵,我将非常感谢。我也试过用
^{pr2}$而不是
J = Matrix((dxs, dys), (dxt, dyt))
现在我得到'type'对象没有属性'__getitem__'
错误。我对python非常陌生,我已经尽我所能在网上找到解决这个问题的方法,但是我失败了。谢谢你的帮助。在
您应该做类似
J = Matrix(((dxs, dys), (dxt, dyt)))
(或Matrix([[dxs, dys], [dxt, dyt]])
,Matrix([(dxs, dys), (dxt, dyt)])
等)的操作。您要做的是传递Matrix
构造函数两个元组,而您需要传递给它一个元组元组(或列表,或元组列表等)。换句话说,一个二维的数据结构而不是两个一维的数据结构。在另外,不要做
from foo import *
。尤其是对于numpy和sympy,这将导致冲突(例如,两者都提供了一个diff
函数)。在找到了解决办法。对不起,浪费时间了。我在定义矩阵时使用了错误的语法。而不是
我应该用
^{pr2}$相关问题 更多 >
编程相关推荐