Решение осциллятора Ресслера с использованием алгоритма Рунге-Кутта python - PullRequest
1 голос
/ 03 августа 2020

У меня проблемы с этим вопросом. Мне дана эта система уравнений

dx / dt = -y -z
dy / dt = x + a * y
dz / dt = b + z * (x - c)

и значения по умолчанию a = 0,1, b = 0,1, c = 14, а также алгоритм Рунге-Кутта:

def rk4(f, xvinit, Tmax, N):
        T = np.linspace(0,Tmax,N+1)
        xv = np.zeros( (len(T), len(xvinit)) )
        xv[0] = xvinit
        h = Tmax / N
        for i in range(N):
            k1 = f(xv[i])
            k2 = f(xv[i] + h/2.0*k1)
            k3 = f(xv[i] + h/2.0*k2)
            k4 = f(xv[i] + h*k3)
            xv[i+1] = xv[i] + h/6.0 *( k1 + 2*k2 + 2*k3 + k4)
        return T, xv

Мне нужно решить эту систему от t = 0 до t = 100 с шагом 0,1 и используя начальные условия (?0, ?0, ?0) = (0,0,0) при = 0, я не совсем уверен, с чего начать , Я попытался определить функцию, чтобы дать Осциллятор:

def roessler(xyx, a=0.1, b=0.1, c=14):
    xyx=(x,y,x)
    dxdt=-y-z
    dydt=x+a*y
    dzdt=b+z*(x-c)
    return dxdt ,dydt ,dzdt       

, который возвращает правую часть уравнения со значениями по умолчанию, затем я попытался решить, заменив f на roessler и заполнив значения для xvinit, Tmax и N со значениями, которые мне даны, но они не работают. Любая помощь приветствуется, извините, если что-то отформатировано неправильно, я здесь новенький.

1 Ответ

1 голос
/ 03 августа 2020

Ну, вы уже почти поняли. Изменение вашей функции roessler на следующую

def roessler(xyx, a=0.1, b=0.1, c=14):
    x, y, z = xyx
    dxdt=-y-z
    dydt=x+a*y
    dzdt=b+z*(x-c)
    return np.array([dxdt, dydt, dzdt])

, а затем вызов

T, sol = rk4(roessler, np.array([0, 0, 0]), 100, 1000)

заставит ее работать.

Если отбросить опечатку в первой строке вашего Функция roessler, ключ к ее решению - понять, что у вас есть система дифференциальных уравнений, т.е. вам нужно работать с векторами . Хотя у вас уже был правильный ввод в качестве вектора, вам также необходимо сделать вывод roessler вектором и ввести начальное значение с соответствующей формой.

...