Info

This question is closed. Reopen it to edit or answer.

Pre-allocate memory gives zeros all the time, how to avoid?

1 view (last 30 days)
In the beginning of a function, we have to pre-allocate memory by doing something like this: integ_signal=zeros(5,4);
Using the below code as an example, if I comment out this line: integ_signal=zeros(5,4);, I will get the desired answer which is 10.1 instead of 0.1. But, in Matlab Function block, I have to pre-allocate memory, how could I pre-allocate memory at the same time still won't assign zero to the integ_signal all the time?
integ_signal(1,1)=10;
integ_signal=zeros(5,4);
a=zeros(10);
arr=zeros(5,4);
count=2;
a=1;
integ_signal(count,1)= integ_signal(count-1,1);
arr(count,1) = integ_signal(count,1);
arr(count,1) = arr(count,1) + abs(I(1,a)-I(1,a+1));
(Desired answer, without pre-allocating memory) >> arr arr =
0 0 0 0
10.1000 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
(Wrong answer, with pre-allocating memory) >> arr
arr =
0 0 0 0
0.1000 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 7 Nov 2013
In your Matlab function, declare a variable arr as persistent
persistent arr
if isempty(arr)
arr=zeros(5,4)
end
You write
a=zeros(10),
a=1
The result is a=1 , then the line a=zeros(10) is unnecessary
  1 Comment
want2know
want2know on 7 Nov 2013
ok, i tried this in Matlab workspace, but I got this Error using persistent A PERSISTENT declaration is only allowed in a M-file function. So, I was thinking to try this in my m-file, but due to the error I posted earlier (<http://www.mathworks.co.uk/matlabcentral/answers/105217-subscripted-assignment-dimension-mismatch-size-1-x-1-size-1-x)>, I could not check the outcome of using persistent yet.

Simon
Simon on 7 Nov 2013
Hi!
Maybe your missing 10 because the first two rows are in the wrong order?

Community Treasure Hunt

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

Start Hunting!