尝试创建矩阵

时间:2015-11-27 15:19:53

标签: python numpy matrix scipy sympy

我试图用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'当最后的导数只是数字时。它返回'添加'当最后的导数具有变量时,变量是'或者' t'在其中(这可以通过为x2,x3,y3和y4给出非零值来完成)。如果有人能帮我创建这个矩阵,我会非常感激。我也尝试过使用

J = Matrix[[dxs, dys], [dxt, dyt]]

而不是

J = Matrix((dxs, dys), (dxt, dyt))

现在我得到'键入'对象没有属性'__getitem__'错误。我是python的新手,我尽我所能在网上找到解决方案,但我失败了。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您应该执行类似J = Matrix(((dxs, dys), (dxt, dyt)))(或Matrix([[dxs, dys], [dxt, dyt]])Matrix([(dxs, dys), (dxt, dyt)])等)的操作。你正在做的是传递Matrix构造函数两个元组,而你需要传递一个元组元组(或列表列表,或元组列表等)。换句话说,就是一个二维数据结构,而不是两个一维数据结构。

另外,请勿from foo import *。特别是numpy和sympy会导致碰撞(例如两者都提供diff功能)。

答案 1 :(得分:0)

找到解决方案。很抱歉浪费任何人的时间。我在定义矩阵时使用了错误的语法。而不是

J = Matrix([dxs, dys], [dxt, dyt])

我应该用

J = Matrix([[dxs, dys], [dxt, dyt]])