Matrix dimensions must agree.

2 visualizzazioni (ultimi 30 giorni)
Reed Woyda
Reed Woyda il 30 Mar 2016
Commentato: Walter Roberson il 31 Mar 2016
Hello all,
Writing a program to simulate neural signals and I have hit a road block.
The error occurs on this line in the code, complaining about the / sign. wdot = phi*((ninf(v)-r)*(1/(taun(v))));
I used these same equations in a runge-kutta ODE solver and they had no trouble working there..
Any ideas would be much appreciated.
Here is the function I am working in..
function udot = FN_deriv_MOL(t,u)
global Cm phi gCa ECa EK EL gK gL V1 V2 V3 V4 Iapp xu xl N
ninf = @(V) (0.5)*(1+tanh((V-V3)/V4));
minf = @(V) (0.5)*(1+tanh((V-V1)/V2));
taun = @(V) 1/(cosh((V-V3)/(2*V4)));
v=u(1:N,1);
r=u(N+1:end,1);
dx2=((xu-xl)/(N-1))^2;
for i=1:N
if(i==N)
vdot(i)=((-v(i)+v(i-1))/dx2)+(Iapp-gL*(v(i)-EL)-gK*r(i)*(v(i)-EK)-gCa*minf(v(i))*(v(i)-ECa))*(1/Cm);
elseif(i==1)
vdot(i)=((v(i+1)-v(i))/dx2)+(Iapp-gL*(v(i)-EL)-gK*r(i)*(v(i)-EK)-gCa*minf(v(i))*(v(i)-ECa))*(1/Cm);
else
vdot(i)=((v(i-1)-2*v(i)+v(i+1))/dx2)+(Iapp-gL*(v(i)-EL)-gK*r(i)*(v(i)-EK)-gCa*minf(v(i))*(v(i)-ECa))*(1/Cm);
end
end
vdot = vdot';
wdot = phi*((ninf(v)-r)*(1/(taun(v))));
udot=[vdot; wdot];
And the Program which calls this function..
clear all; close all; clc;
%
global Cm phi gCa ECa EK EL gK gL V1 V2 V3 V4 Iapp xu xl N
Cm = 20;
phi = 0.04;
gCa = 4.4;
ECa = 120;
EK = -84;
EL = -60;
gK = 8;
gL = 2;
V1 = -1.2;
V2 = 18;
V3 = 2;
V4 = 30;
Iapp = 60; %periodic = 100
N=300; % spatial grid number
xl=0;xu=300; %30;
x=linspace(xl,xu,N);
v0=[***giant array of initial conditions left out, length=300]
v0=v0';
r0(1:N,1) = 0;
u0=[v0; r0];
t0=0; tend=500;
tspan=linspace(t0,tend,200);
[t,u] = ode15s('FN_deriv_MOL',tspan,u0);
v=u(:,1:N);
r=u(:,N+1:end);

Risposte (1)

Walter Roberson
Walter Roberson il 30 Mar 2016
The / operator does not mean the kind of division you need. You need the ./ operator.
  2 Commenti
Reed Woyda
Reed Woyda il 31 Mar 2016
Walter, Thank you for the feedback
but... When I replace the / operator with the ./ operator I get an error that the vdot and wdot vectors are not consistent.
Shouldnt they both be the same since wdot is calculated with r, which is the same size as v?
Walter Roberson
Walter Roberson il 31 Mar 2016
I recommend you do a bit of rewriting. Avoid global. Please see http://www.mathworks.com/help/matlab/math/parameterizing-functions.html . And when you call ode45, use the @FN_deriv_MOL instead of 'FN_deriv_MOL'

Accedi per commentare.

Categorie

Scopri di più su Structures in Help Center e File Exchange

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by