2016-12-12 5 views
1
from __future__ import division 
import numpy as np 
import matplotlib.pyplot as plt 
import math 
from scipy.integrate import odeint 
from scipy.fftpack import fft, ifft 

def pend(y, t, a, b, ohm): 
    theta, omega, phi = y 
    dydt = [omega, -b*omega-np.sin(theta)-a*np.cos(phi), ohm] 
    return dydt 

b = 1.0/2.0  #beta 
ohm = 2.0/3.0  #capital Omega 
period = 2.0*math.pi/ohm  #driving period 

t0 = 0.0  #initial time 
t = np.linspace(t0,t0+period*10**3,10**3+1)  #time for Poincare map 

theta0 = 0.75 
omega0 = 1.6 
phi0 = 0.8 
y0 = [theta0,omega0,phi0]  #initial conditions 
N = 100       #number of transient points to delete 

a_array = np.linspace(0,1.15,50) #varying parameter of a values 

for a in a_array: 
    sol = odeint(pend,y0,t,args=(a,b,ohm))  #numerical integration of differential equation 
    sol = sol[N:10**3-N]  #removing transients 
    w = sol[:,1]    #frequency 
    A = np.full(len(w),a)  #array of a-values 
    plt.plot(A, w) 
    plt.draw() 

В настоящее время я пытаюсь построить диаграмму бифуркации. В системе уравнений, которые мы используем, a - это управляющий параметр, который мы рисуем для значений от 0 до 1.15 по оси x по сравнению с массивом значений (называемых w) для конкретного значения a. Я не совсем уверен, как строить сюжеты из цикла for, как это. Я слышал, что подзаголовки - лучший способ пойти, но я не знаком с реализацией и могу использовать некоторую помощь. Благодаря!Построение нескольких подсетей на одном графике

+0

Запуск кода прямо сейчас. Взять время, чтобы бежать. В то же время я обычно перемещаю plt.draw() или plt.show() вне цикла. –

ответ

0

Отказ от последней команды работал для меня.

from __future__ import division 
import numpy as np 
import matplotlib.pyplot as plt 
import math 
from scipy.integrate import odeint 
from scipy.fftpack import fft, ifft 

def pend(y, t, a, b, ohm): 
    theta, omega, phi = y 
    dydt = [omega, -b*omega-np.sin(theta)-a*np.cos(phi), ohm] 
    return dydt 

b = 1.0/2.0  #beta 
ohm = 2.0/3.0  #capital Omega 
period = 2.0*math.pi/ohm  #driving period 

t0 = 0.0  #initial time 
t = np.linspace(t0,t0+period*10**3,10**3+1)  #time for Poincare map 

theta0 = 0.75 
omega0 = 1.6 
phi0 = 0.8 
y0 = [theta0,omega0,phi0]  #initial conditions 
N = 100       #number of transient points to delete 

a_array = np.linspace(0,1.15,50) #varying parameter of a values 

for a in a_array: 
    sol = odeint(pend,y0,t,args=(a,b,ohm))  #numerical integration of differential equation 
    sol = sol[N:10**3-N]  #removing transients 
    w = sol[:,1]    #frequency 
    A = np.full(len(w),a)  #array of a-values 
    plt.plot(A, w) 
plt.show() 

enter image description here

+0

Благодарим вас за быстрый ответ. Я также пришел к этому сюжету, но почти сразу отбросил его, поскольку только показалось, что он показывает значения между 1.05 и 1.15, что кажется неправильным. – infinitylord

+0

Это то, что вы ищете? –

+0

Пока это генерирует массив w для определенного значения a в a_array, а затем выводит результат на один и тот же граф для каждого значения a, тогда да, это то, что я ищу – infinitylord

Смежные вопросы