Info

이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.

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

조회 수: 1 (최근 30일)
want2know
want2know 2013년 11월 7일
마감: MATLAB Answer Bot 2021년 8월 20일
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

답변 (2개)

Azzi Abdelmalek
Azzi Abdelmalek 2013년 11월 7일
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
want2know
want2know 2013년 11월 7일
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 2013년 11월 7일
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!

Translated by