[我正在用python建立一个双摆,并在其中建立了一个doublePen
类,而我对python类还是有点陌生,我无法弄清楚这个错误
TypeError: can only concatenate tuple (not "int") to tuple
"""
theta1 = state[0]
theta2 = state[2]
intVM1 = state[1]
intVM2 = state[3]
"""
#makes a empty array of zeros
dydx = np.zeros_like(state)
#sets the dydx[1] equal to angular velocity of mass 1
dydx[0] = state[1]
del_ = state[2] - state[0]
den1 = (self.M1 + self.M2)*self.L1 - self.M2*self.L1*np.self.cos(del_)*np.self.cos(del_)
dydx[1] = (self.M2*self.L1*state[1]*state[1]*np.self.sin(del_)*np.self.cos(del_) +
self.M2*self.G*np.self.sin(state[2])*np.self.cos(del_) +
self.M2*self.L1*state[3]*state[3]*np.self.sin(del_) -
(self.M1 + self.M2)*self.G*np.self.sin(state[0]))/den1
#derivative of dydx
dydx[2] = state[3]
den2 = (self.L1/self.L1)*den1
dydx[3] = (-self.M2*self.L1*state[3]*state[3]*np.self.sin(del_)*np.self.cos(del_) +
(self.M1 + self.M2)*self.G*np.self.sin(state[0])*np.self.cos(del_) -
(self.M1 + self.M2)*self.L1*state[1]*state[1]*np.self.sin(del_) -
(self.M1 + self.M2)*self.G*np.self.sin(state[2]))/den2
return dydx
定义了所有其他变量,例如M1,M2等,以及cos(x)和sin(x)[编辑]这是一个github链接,如果您需要https://gist.github.com/Jackbaude/b30cb6d83972d76c1949aeec8cd94869,可以查看所有其他代码谢谢您的帮助
我已经检查了您的要点,看来您的问题是错别字。在M1
初始化后有一个逗号,使其成为一个元组,然后执行(M1 + M2)
,其中M1
是一个元组,M2
是一个整数。您需要做的就是从doublePen
函数中__init__
类的这一行中删除逗号:
self.M1 = mass1,
+
运算符需要兼容的操作数。例如两个整数(1 + 2)。
它也将接受其他操作数,例如两个元组(例如(1,2,3 +(3,4)==(1,2,3,4)),但不接受不同类型的操作数(例如,数字+元组) )。