0

在函数的开头,我们必须通过执行以下操作预先分配内存: 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

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

4

1 回答 1

4

如果我误解了您的问题,请原谅我,但是在分配您想要的值之后,您正在“预分配” 。10你不是要交换前两行吗?

integ_signal = zeros(5,4);
integ_signal(1,1) = 10;
于 2013-11-07T08:31:01.970 回答