Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 5, 2016 23:38:01

KolesnikovIgor
Зарегистрирован: 2016-12-05
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

AttributeError: 'Pendulum' object has no attribute 'integrate'

Здравствуйте! Проблема в том, что когда я не пытаюсь вывести результат на экран, мой код работает без ошибок, но как только я пытаюсь это сделать, то в интерпретаторе появляется следующая ошибка:
line 64, in <module>
print(p.integrate())
AttributeError: ‘Pendulum’ object has no attribute ‘integrate’
Помогите, пожалуйста

Вот мой код:

 from math import sin, cos, pi
from numpy import matrix, array, arange
from pylab import *
g = 9.78
dt = 0.01
init_conds = [1,2,3,4]
end = 10
def constrain(theta):
    theta = theta % (2*pi)
    if theta > pi:
        theta = -2*pi+theta
        print(theta)
    return theta
def average(x):
    x_i, k1, k2, k3, k4 = x
    return x_i + (k1 + 2.0*(k3 + k4) +  k2) / 6.0
theta = []
class Pendulum(object):
    def __init__(self, dt, init_conds, end):
        self.dt = dt
        self.t = 0.0
        self.x = init_conds[:]
        self.end = end
    def derivative(self, u):
        #x1 = x, x2 = x_dt, x3 = theta, x4 = theta_dt
        x1, x2, x3, x4 = u
        x1_dt, x3_dt = x2, x4
        x2_dt = (sin(x3)*x4**2 - g*cos(x3)*sin(x3)) / (1 - cos(x3)**2)
        x4_dt = (g*sin(x3) - x4**2*cos(x3)*sin(x3) - cos(x3)*x2) / (1 - cos(x3)**2)
        x = [x1_dt, x2_dt, x3_dt, x4_dt]
        return x
    def rk4_step(self, dt):
        dx = self.derivative(self.x)
        k2 = [ dx_i*dt for dx_i in dx ]
        xv = [x_i + delx0_i/2.0 for x_i, delx0_i in zip(self.x, k2)]
        k3 = [ dx_i*dt for dx_i in self.derivative(xv)]
        xv = [x_i + delx1_i/2.0 for x_i,delx1_i in zip(self.x, k3)]
        k4 = [ dx_i*dt for dx_i in self.derivative(xv) ]
        xv = [x_i + delx1_2 for x_i,delx1_2 in zip(self.x, k4)]
        k1 = [self.dt*i for i in self.derivative(xv)]
        self.t += dt
        self.x = list(map(average, zip(self.x, k1, k2, k3, k4)))
        theta.append(constrain(self.x[2]))
        def integrate(self):
            x = []
            while self.t <= self.end:
                self.rk4_step(self.dt)
                x.append([self.t] + self.x)
            return array(x)
p = Pendulum(dt, init_conds, end)
print(p.integrate())

Офлайн

#2 Дек. 6, 2016 04:02:48

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

AttributeError: 'Pendulum' object has no attribute 'integrate'

Нужно сдвинуть блок функции integrate на 4 пробела влево.

Офлайн

#3 Дек. 6, 2016 09:30:37

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

AttributeError: 'Pendulum' object has no attribute 'integrate'

А в предыдущем посте автора указано правильно
KolesnikovIgor
Слушайте, Вы бы хоть смотрели что пишите.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version