Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2014 22:04:48

Olmer
От: Moscow
Зарегистрирован: 2012-11-05
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Odeint для системы диффуров.



Привет. Как с помощью intergate.odeint решить систему уравнений второго порядка? Например, есть уравнение движения частицы в центрально-симметричном потенциале с обратной квадратичной зависимостью от расстояния до центра, как посчитать это уравнения в x и y координате? У меня считает по одной координате, но как вторую впихнуть? Спасибо.

Офлайн

#2 Ноя. 13, 2014 18:16:21

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Odeint для системы диффуров.

Решается сведением к двум дифференциальным уравнениям первого порядка



Офлайн

#3 Ноя. 13, 2014 18:51:03

Olmer
От: Moscow
Зарегистрирован: 2012-11-05
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Odeint для системы диффуров.

doza_and
Решается сведением к двум дифференциальным уравнениям первого порядка
Как эту систему двух диффуров второго порядка записать в коде? У меня получается только одно уравнение, а если надо систему решить?

Офлайн

#4 Ноя. 13, 2014 22:18:23

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Odeint для системы диффуров.

выдержки:

import numpy as np
from scipy.integrate import ode
from scipy.interpolate import interp1d
from pylab import plot, show, gca, savefig, clf
from pprint import pprint as pp
import time
from collections import defaultdict
class XeSys(object):
    u"""
    """
    def __init__(self,Wr):
        self.Wr = Wr
    def ystat(self,Wr, y0):
        u"""стационарные Значения"""
        y0[iXe] = Wr /(1 + Wr)
        y0[iId] = Wr
    def __call__(self, t, y):
        Xe,Id = y
        Wr = self.Wr(t)
        return [
                 L_Xe * (-Xe + Id - Wr * Xe) ,
                 L_Id * (-Id + Wr)
               ]
sys = XeSys(Wrspline)
r = ode(sys)
r.set_integrator('dopri5')
print "y0=",self.y0
r.set_initial_value(self.y0, self.t0)
for i, t in enumerate(self.time_points):
     if t != r.t:
        r.integrate(t)
        if not r.successful():
             print "t", t, "y", r.y, "x", x



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version