0

我有 N = 2 个耦合非线性动力系统,其耦合由 2 x 2 矩阵 W 给出。它们中的每一个都由 n = 8 一阶 ode 描述。下面的代码解决了这个耦合系统,对于参数 p 的许多值:

for i=1:length(p)
    [t,y(:,:,i)] = ode45(@(t,y) ode(t,y,n,N,W,p(i,:)), t, y0);
end

function [dydt] = ode(t,y,n,N,W,p)
    dydt = NaN(n, N);
    y = reshape(y,[n, N]);    
    y_out = zeros(N,1);
    F_Global = zeros(N,1);
    for i = 1:N
        y_out(i) = y(3,i)-y(4,i);
    end
    for i = 1:N
        F_Global(i) = W(i,:)*sigm(y_out);
    end
    for i = 1:N
        dydt(1,i) = y(5,i);
        dydt(2,i) = y(6,i);
        dydt(3,i) = y(7,i);
        dydt(4,i) = y(8,i);
        dydt(5,i) = sigm(y(3,i) - y(4,i)) - y(5,i) - y(1,i) + F_Global(i);
        dydt(6,i) = sigm(y(3,i) - y(4,i)) - y(6,i) - y(2,i);
        dydt(7,i) = C2*sigm(y(1,i)) + p(i) - y(7,i) - y(3,i);
        dydt(8,i) = sigm(y(2,i)) - y(8,i) - y(4,i);
    end
    dydt = reshape(dydt,n*N, 1);
end

function X = sigm(u)
    ...
end

在函数内,已经计算出差异:

y_out(i) = y(3,i)-y(4,i);

对于 i = 1,...,N,并且对于所有时间和所有 p 值,这应该是维度的 3-D 矩阵

y_out = size(length(time), length(p), N);

此外,在函数内计算:

F_Global(i) = W(i,:)*sigm(y_out);

对于 i = 1,...,N 和 p 的所有值,但在经过时间平均后,它应该是一个二维矩阵

F_Global = size(length(p),N);

我需要一些帮助才能将 y_out 和 F_Global 提取为 ode45 的输出

4

1 回答 1

0

更改代码

output_potential = NaN(length(time),N,length(p));
Sigm = NaN(N,length(p));
input_firingRate = NaN(N,length(p));

for i=1:length(p)
    [t,y(:,:,i)] = ode45(@(t,y) ode(t,y,n,N,W,p(:,i)), time, y0);
    for j = 1:N
        output_potential(:,j,i) = y(:,3+(j-1)*n,i) - y(:,4+(j-1)*n,i);
        Sigm(j,i) = sigm(mean(output_potential(:,j,i)));
    end
    input_firingRate(:,i) = p(:,i) + A*a*W(:,:)*Sigm(:,i);
end
于 2019-11-09T22:17:00.383 回答