在函数的开头,我们必须通过这样的方式预先分配内存: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时检索该值,但是,由于预分配,它总是给所有先前值赋值零。
答案 0 :(得分:4)
如果我误解了你的问题,请原谅我,但是你正在"预先分配" 在之后,您可以指定所需的10
值。你没意思交换前两行吗?
integ_signal = zeros(5,4);
integ_signal(1,1) = 10;