ODE error Array indices must be positive integers or logical values.

8 views (last 30 days)
I've been trying to get this working, but every time I run the script I get an error saying "Array indices must be positive integers or logical values and points to the dxdt(2) for the error. This is the code:
t = (0:0.1:5);
condIni = [0;0;0;0;0];
[T,Y] = ode45(@Grua,t,condIni);
x1 = Y(:,1);
x2 = Y(:,2);
x3 = Y(:,3);
x4 = Y(:,4);
plot(t,x1,'-b','linewidth',2)
xlabel('tiempo (s)');
ylabel('desplazamiento (m)');
figure()
plot(t,x2,'-b','linewidth',2)
xlabel('tiempo (s)');
ylabel('Velocidad (m/s)');
figure()
plot(t,x3,'-b','linewidth',2)
xlabel('tiempo (s)');
ylabel('desplazamiento angular (rad)');
figure()
plot(t,x4,'-b','linewidth',2)
xlabel('tiempo (s)');
ylabel('Velocidad angular (rad/s)');
function dxdt = Grua(t,x)
L=3;
m=100;
M=30;
r1=0.05;
r2=0.1;
R=0.15;
ct=0.01;
cp=0.1;
c=1;
K=10;
Kb=9;
Lb=1e-2;
Rb=6.2;
J=1e-3;
E=100;
N=r1/r2;
g=9.81;
dxdt(1) = x(2);
dxdt(2) = (K*L*x(5)-L*ct*x(2)+N*R*cp*x(4)-L*N^2*R^2*c*x(2)+L*R*N*m*g*x(3))/(L(M*N^2*R^2+J));
dxdt(3) = x(4);
dxdt(4) = ((-cp*x(4)-m*g*L*x(3))/L^2) -((m*R*L*N)/L^2)*((K*L*x(5)-L*ct*x(2)+N*R*cp*x(4)-L*N^2*R^2*c*x(2)+L*N*R*g*m*x(3))/(L(M*N^2*R^2+J)));
dxdt(5) = (E-Kb*x(2)-x(5)*Rb)/Lb;
dxdt = dxdt';
end

Accepted Answer

Ameer Hamza
Ameer Hamza on 1 Nov 2020
You missed the multiplication operator in the denominator
dxdt(2) = ../(L*(M*N^2*R^2+J));
%^ this is missing
dxdt(4) = ../(L*(M*N^2*R^2+J)));
%^ this is missing

More Answers (1)

KSSV
KSSV on 1 Nov 2020
The indices for an array in MATLAB should be posititve integers or logicals. If you give fractions, 0, negative as index it will throw error.
Example:
A = rand(1,10) ;
A(1) % no error
A(10) % no error
A(0) % error as index cannot be zero
A(-1) % error, as index cannot be negative
A(0.5) % error, as index cannot be fraction
idx = A<0.5 ;
A(idx) % idx has 0, 1 they are logicals, so allowed
In your case..check where the index is taking not allowed value. Learn to debug your code...Read about debugging.

Categories

Find more on Mathematics in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!