добавление шума к динамике восстановления в связанном нелинейном ode

#matlab #ode #noise

#matlab #ode #шум

Вопрос:

Я хотел бы добавить шум в нелинейную связанную систему ODE (модель Фитцхью-Нагумо). Я добавил гауссовский белый шум на вход (см. Код: добавление шума в dot (V), который является динамикой напряжения), и я хотел бы получить аналогичные `неровные» всплески, когда я добавляю шум в переменную восстановления ( dot (w)).

Тем не менее, я использую более или менее ту же процедуру для добавления шума к переменной восстановления, хотя мне пришлось уменьшить сигму. В результате я получаю переменный результат, но не «зубчатые» всплески, как хотелось бы видеть. До сих пор мне не удалось выяснить, как изменить масштаб системы, чтобы получить аналогичное моделирование с шумом для динамики напряжения и динамики восстановления.

Код для добавления гауссовского белого шума к динамике напряжения (разница между кодом `сигма» и где шум добавляется в прямом эйлере):

 %% Parameters
%Time vector for integration
dt = 0.1;
tend = (3/1e-2); %make sure to capture some spikes
t = 0:dt:tend;

%simulations
nsimu = 20;

%Initial values
V0 = -1.5;
w0 = -3/8;

%initial values vectors
V = zeros(1, length(t));
V(1) = V0;
w = zeros(1, length(t));
w(1) = w0;

%input
Iapp = 0.3303;

%noise
sigma = 1.0;
nsimu = 50;
eta = zeros(1,length(t));


%% Functions
dV = @(t, V, w) V - V^3/3 - w   Iapp;
dw = @(t, V, w) 0.08*(V   0.7 - 0.8* w);

%% Adding white noise on input

for m = 1:nsimu

    %Generate noise vector
    for i = 1:length(t)-1
        eta(i 1) = eta(i)   sigma*sqrt(dt)*randn;
    end

    %Forward Euler   white noise
    for ii = 1:length(eta)-1
        w(ii 1) = w(ii)   dt * dw(t, V(ii), w(ii)); 
        V(ii 1) = V(ii)   dt * dV(t, V(ii), w(ii))   dt*eta(ii);
    end

    plot(t, V, 'k-', 'LineWidth', 1.5)
    drawnow

end
  

Код для добавления шума к переменной восстановления `w’. (Довольно похоже на предыдущий код… но над этим нужно поработать)

 %% Parameters
%Time vector for integration
dt = 0.1;
tend = (3/1e-2); %make sure to capture some spikes
t = 0:dt:tend;

%simulations
nsimu = 20;

%Initial values
V0 = -1.5;
w0 = -3/8;

%initial values vectors
V = zeros(1, length(t));
V(1) = V0;
w = zeros(1, length(t));
w(1) = w0;

%input
Iapp = 0.3303;

%noise
sigma = 1e-3;
nsimu = 50;
eta = zeros(1,length(t));


%% Functions
dV = @(t, V, w) V - V^3/3 - w   Iapp;
dw = @(t, V, w) 0.08*(V   0.7 - 0.8* w);

%% Adding white noise on input

for m = 1:nsimu

    %Generate noise vector
    for i = 1:length(t)-1
        eta(i 1) = eta(i)   sigma*sqrt(dt)*randn;
    end

    %Forward Euler   white noise
    for ii = 1:length(eta)-1
        w(ii 1) = w(ii)   dt * dw(t, V(ii), w(ii))   dt*eta(ii); 
        V(ii 1) = V(ii)   dt * dV(t, V(ii), w(ii));
    end

    plot(t, V, 'k-', 'LineWidth', 1.5)
    drawnow

end

  

Результатом обоих кодов должно быть возмущенное моделирование динамики системы. Моделирование шума на w' should appear the same as the simulation of noise on V’.

Комментарии:

1. Вместо добавления dt*eta(ii) , добавьте (eta(ii 1)-eta(ii)) , как того требует формула dw=a(t,V,w)*dt sigma*dB в формализме Ito. Конечно, то, что вы делаете, тоже правильно, но использует интегрированное случайное блуждание, которое является дифференцируемой функцией.

2. Потрясающе, спасибо! Это работает как для динамики напряжения, так и для динамики восстановления. Динамика напряжения теперь выглядит действительно хорошо. Динамика восстановления происходит в другом масштабе времени (она медленнее, чем динамика напряжения), поэтому я умножаю шум на (dt/0.08)* eta(ii 1) - eta(ii) и добавляю его на шаге прямого Эйлера « для ii = 1: длина (eta)-1 w (ii 1) = w (ii) dt * dw (t, V (ii), w(ii)) (dt / 0.08) * eta(ii 1) — eta(ii); V (ii 1) = V(ii) dt * dV(t, V(ii), w(ii)); конец « Это правильно? Могу ли я это сделать?