我需要求解一组延迟微分方程,并且我想在这些方程中使用粉红噪声。
我尝试使用 Python 的 Pydelay 包来实现,但问题是我需要生成噪声然后将其传递给仿真,或者在仿真过程中生成噪声。第一个选项不起作用,因为在此求解器中指定的参数需要保持不变,并且噪声会随着时间而变化。第二个选项不起作用,因为 Pydelay 只支持生成每个样本都独立于其他样本的噪声,而粉红噪声则不是这样。
有人知道怎么做吗?
这是我的代码(我需要 I1 和 I2 是粉红噪声,而不是像我的代码中那样恒定):
# -*- coding: utf-8 -*-
"""
Created on Tue Aug 2 15:35:15 2016
@author: kasienka
"""
#!python
import pydelay
from time import time
import math
import numpy as np
from numpy import fft
from scipy import integrate
import matplotlib as mpl
mpl.use('Agg')
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.interpolate import griddata
import sys
import pylab as pl
from pydelay import dde23
# define the equations
eqns = {
'y1' : 'I1 - y1(t-tau) + epsilon * pow(y2(t-tau), 1.1)',
'y2' : 'I2 - y2(t-tau) + epsilon * pow(y1(t-tau), 1.1)'
}
#define the parameters
params = {
'I2' : 0.2,
'I1' : 0.4,
'tau': 1.31,
'epsilon': 0.2
}
# Initialise the solver
dde = dde23(eqns=eqns, params=params)
# set the simulation parameters
dde.set_sim_params(tfinal=50, dtmax=0.0001)
histdic = {
'y1': lambda t: 0.2,
'y2': lambda t: 0.4
}
dde.hist_from_funcs(histdic, 1000)
# run the simulator
dde.run()
p1 = []
p2 = []
x1 = []
x2 = []
czasy = np.linspace(0, 50, 10000)
for el in times:
x10 = dde.sol_spl(el)['y1']
x20 = dde.sol_spl(el)['y2']
prob1 = 1.0 / (1 + 3.14**(-(x10 - x20)) )
prob2 = 1.0 / (1 + 3.14**(-(x20 - x10)) )
p1.append(prob1)
p2.append(prob2)
x1.append(x10)
x2.append(x20)
fig = pl.figure()
pl.plot(times, p1, label = '$p_1$')
pl.plot(times, p2, label = '$p_2$')
pl.xlabel('$time$')
pl.ylabel('$probabilities$')
pl.legend()
pl.savefig(sys.argv[1])