"Index exceeds array dimensions. Index value 2 exceeds valid range [1-1] for array" --How to solve this?

37 views (last 30 days)
Whenever I am trying to update a 2-dimensional array in a loop matlab throws this error!
%% initialized in workspace
s.t(1)=0*0.1;
%% update via a function
for i=1:10 % implemented via simulink counter and increment block
func op= fcn(i)
s.t(i+1)=i*0.1
end
end

Accepted Answer

Walter Roberson
Walter Roberson on 21 Oct 2020
In Simulink,
s.t(1)=0*0.1;
defines s.t as being a scalar value that is not permitted to increase in size.
In Simulink, you need to initialize variables to the maximum size they could use. You can reduce the size of the variable later if you need to, but you cannot increase it in size. (See, though, coder.varsize() )
Your code runs to s.t(10+1) so your s.t is length 11. Initialize it as
s.t = zeros(11,1);
  1 Comment
Sunandan Adhikary
Sunandan Adhikary on 22 Oct 2020
Great. This helped. Unlike normally as we do in matlab scripts, while updating the variable in a function, we must let the function know its size as well. So prior initialization of the whole matrix is needed.

Sign in to comment.

More Answers (1)

Prudhvi Peddagoni
Prudhvi Peddagoni on 21 Oct 2020
Hi,
The error you mentioned occurs when you try to access an array element which is out of it's length.
If you are trying to update s.t array such that s.t(i+1)=i*0.1
s.t(1)=0*0.1;
for i=1:10
s.t(i+1)=i*0.1
end
if not, can you post more information about what you are trying to do
Hope this helps.
  1 Comment
Sunandan Adhikary
Sunandan Adhikary on 21 Oct 2020
Edited: Sunandan Adhikary on 21 Oct 2020
I have done exactly what you mentioned. Running this will return no error. But since this operation happens in a function block in simulink model, that takes value of i as input (I increase i in every sampling period and input to the function block) and the intializations are in different script, I get such error! I have mentioned in the comment how did I implement it. Can uou help?

Sign in to comment.

Categories

Find more on Simulink Functions in Help Center and File Exchange

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!