MATLAB: Index exceeds the number of array elements (1) ode45

arrayerrorode45symbolic

This is my code(It is quite simple if you go through it):
t = 0 : 0.001 : 5;
t1 = t;
syms x(t) x1(t) x2(t) x3(t) x4(t) theta(t) phi(t) zr(t)
%% Road profile
zr = sin(t);
%% Tire stiffnesses
kt1 = 90000;
kt2 = 90000;
kt3 = 90000;
kt4 = 90000;
%% Spring Stiffnesses
ks1 = 48000;
ks2 = 48000;
ks3 = 48000;
ks4 = 48000;
%% Damper coefficients
cd1 = 2000;
cd2 = 2000;
cd3 = 2000;
cd4 = 2000;
%% Masses
M = 260;
m1 = 9;
m2 = 9;
m3 = 11;
m4 = 11;
%% Moments of Inertia
Iy = 115;
Ix = 80;
%% Distances
% Along wheelbase
a1 = 55/100.*1.550;
a2 = 1.550 - a1;
% Along Track
b1 = 1.150/2;
b2 = 1.150/2;
%% ODEs
ode1 = M.*diff(diff(x)) + cd1.*(diff(x)-diff(x1) + b1.*diff(phi) - a1.*diff(theta))...
+ cd2.*(diff(x)-diff(x2) - b2.*diff(phi) - a1.*diff(theta)) + cd3.*(diff(x)-diff(x3) - b1.*diff(phi) + a2.*diff(theta))...
+ cd4.*(diff(x)-diff(x4) + b2.*diff(phi) + a2.*diff(theta)) + ks1.*(x - x1 + b1.*phi - a1.*theta) ...
+ ks2.*(x - x2 - b2.*phi - a1.*theta) + ks3.*(x - x3 - b1.*phi + a2.*theta) + ks4.*(x - x4 + b2.*phi + a2.*theta) == 0;
ode2 = Ix.*diff(diff(phi)) + b1.*cd1.*(diff(x)-diff(x1) + b1.*diff(phi) - a1.*diff(theta))...
- b2.*cd2.*(diff(x)-diff(x2) - b2.*diff(phi) - a1.*diff(theta)) - b1.*cd3.*(diff(x)-diff(x3) - b1.*diff(phi) + a2.*diff(theta))...
+ b2.*cd4.*(diff(x)-diff(x4) + b2.*diff(phi) + a2.*diff(theta)) + b1.*ks1.*(x - x1 + b1.*phi - a1.*theta) ...
- b2.*ks2.*(x - x2 - b2.*phi - a1.*theta) - b1.*ks3.*(x - x3 - b1.*phi + a2.*theta) + b2.*ks4.*(x - x4 + b2.*phi + a2.*theta) == 0;
ode3 = Iy.*diff(diff(theta)) - a1.*cd1.*(diff(x)-diff(x1) + b1.*diff(phi) - a1.*diff(theta))...
- a1.*cd2.*(diff(x)-diff(x2) - b2.*diff(phi) - a1.*diff(theta)) + a2.*cd3.*(diff(x)-diff(x3) - b1.*diff(phi) + a2.*diff(theta))...
+ a2.*cd4.*(diff(x)-diff(x4) + b2.*diff(phi) + a2.*diff(theta)) - a1.*ks1.*(x - x1 + b1.*phi - a1.*theta) ...
- a1.*ks2.*(x - x2 - b2.*phi - a1.*theta) + a2.*ks3.*(x - x3 - b1.*phi + a2.*theta) + a2.*ks4.*(x - x4 + b2.*phi + a2.*theta) == 0;
ode4 = m1.*diff(diff(x1)) - cd1.*(diff(x)-diff(x1) + b1.*diff(phi) - a1.*diff(theta))...
- ks1.*(x - x1 + b1.*phi - a1.*theta) + kt1.*(x1 - zr) == 0;
ode5 = m2.*diff(diff(x2)) - cd2.*(diff(x)-diff(x2) - b2.*diff(phi) - a1.*diff(theta))...
- ks2.*(x - x2 - b2.*phi - a1.*theta) + kt2.*(x2 - zr) == 0;
ode6 = m3.*diff(diff(x3)) - cd3.*(diff(x)-diff(x3) - b1.*diff(phi) + a2.*diff(theta))...
- ks3.*(x - x3 - b1.*phi + a2.*theta) + kt3.*(x3 - zr) == 0;
ode7 = m4.*diff(diff(x4)) - cd4.*(diff(x)-diff(x4) + b2.*diff(phi) + a2.*diff(theta))...
- ks4.*(x - x4 + b2.*phi + a2.*theta) + kt4.*(x4 - zr) == 0;
ode = [ode1 ; ode2 ; ode3 ; ode4 ; ode5 ; ode6 ; ode7];
[v] = odeToVectorField(ode);
m = matlabFunction(v);
y0 = zeros(14,1);
[time, sol] = ode45(m,[0 5],y0);
It keeps showing this error:
Index exceeds the number of array elements (1).
Error in odes (line 80)
[time sol] = ode45(m,[0 5],y0);

Best Answer

m = matlabFunction(v, 'vars', {'t', 'Y'});