在函数的开头,我们必须通过执行以下操作预先分配内存: 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 时的值,但是,由于预先分配,它总是将值为零给所有先前的值。