Asked by nathan Short
on 17 Sep 2019

Why do i get " Subscript indices must either be real positive integers or logicals." when i run my code and how can i fix it

%% problem parameters

P = 0.5*9.81; % [load N]

L = 0.5; % [Length M]

E = 69*10^6;

I = ((0.0032^3)*(0.0088))/12;

%%

x = (0:0.025:L);

v = zeros(length(x));

for i = 0.025:length(a)

a = 1/(E*I);

b = 1/12;

c = 1/16;

v(i) = a*((b*P*(i^3))-(1*c*P*(L^2)));

end

Answer by KALYAN ACHARJYA
on 17 Sep 2019

Edited by KALYAN ACHARJYA
on 17 Sep 2019

The error is

v(i)

%..^

In Matlab indexing, the i value must be positive interger, like 1,2,3,,,,

v(1)>> Allow

v(0)>> Not Allow

v(0.25)>> Not Allow

v(-3)>> Not Allow

v(7)>> Allow

Hope you get the sufficients hints. In your case i starts from 0.25, hence v(0.25) Not allowed.

% Define a

% ????

%% problem parameters

P = 0.5*9.81; % [load N]

L = 0.5; % [Length M]

E = 69*10^6;

I = ((0.0032^3)*(0.0088))/12;

%%

x = (0:0.025:L);

v = zeros(length(x));

i=0.025:length(a)

for j =1:length(i)

a = 1/(E*I);

b = 1/12;

c = 1/16;

v(j)= a*((b*P*(i(j)^3))-(1*c*P*(L^2)));

end

Without Loop:

% Define a

% ????

%% problem parameters

P = 0.5*9.81; % [load N]

L = 0.5; % [Length M]

E = 69*10^6;

I = ((0.0032^3)*(0.0088))/12;

%%

x = (0:0.025:L);

v = zeros(length(x));

i=0.025:length(a)

a=1/(E*I);

b=1/12;

c=1/16;

v=a*((b*P.*(i.^3))-(1*c*P*(L^2)));

Any issue let me know?

nathan Short
on 17 Sep 2019

i think it would be 20?? would a = 0.5/0.025

KALYAN ACHARJYA
on 17 Sep 2019

If a=20,

the what does the following means

i = 0.025:length(a)

it return i as a single element

i=0.025

Are you sure? No Need of loop.The v becomes

v =

-46.2192

If no, What exactly you are trying to do?

nathan Short
on 17 Sep 2019

Sign in to comment.

Answer by Image Analyst
on 17 Sep 2019

The FAQ explains it pretty well: Click here for the FAQ on that error

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.