Matlab预分配内存一直给出零,如何避免?

时间:2013-11-07 08:25:00

标签: matlab memory

在函数的开头,我们必须通过这样的方式预先分配内存:integ_signal = zeros(5,4);

使用下面的代码作为例子,如果我注释掉这一行:integ_signal = zeros(5,4);,我将得到所需的答案,即10.1而不是0.1。但是,在Matlab功能块中,我必须预先分配内存,我怎么能同时预分配内存仍然不会一直为integ_signal赋值为零?

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

function integ_signal= fcn(I,V,count,oldval)       
integ_signal=zeros(5,1); 
a=zeros(10); arr=zeros(2,4); 
if count==1 
integ_signal(count,1) = 10; % Initial Condition end   
if count>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)); 
end 
a=a+1;
end

当计数增加到2时,它需要在count为1时检索该值,但是,由于预分配,它总是给所有先前值赋值零。

1 个答案:

答案 0 :(得分:4)

如果我误解了你的问题,请原谅我,但是你正在"预先分配" 之后,您可以指定所需的10值。你没意思交换前两行吗?

integ_signal = zeros(5,4);
integ_signal(1,1) = 10;