正如你可以看到图像(excel文件)我想在Octave中使用该公式来获得所需的结果。我也上传了八度代码图片和工作区图片。在工作空间中,我的存储变量的结果/值应该与excel(存储列)中的值相同。我怀疑在代码中最后一部分使用(if语句与i-1似乎是错误)。
有人可以帮我解决一下吗?如果需要进一步说明,请与我们联系。我也在下面发布我的代码:
BM_max = 1236;
virtual_feed_max = 64;
operation = dlmread ('2020Operation.csv');
BM = ones (size (operation, 1), 1);
for i=1:size(operation,1)
if operation(i,1)==1
BM(i,1)=BM_max;
else
BM(i,1)=0;
end
end
virtual_feed = ones(size(operation,1),1);
virtual_feed(:,1) = 64;
storage = ones(size(BM,1),1);
c = ones(size(BM,1),1);
for i=1:size(BM,1)
c=(BM(:,1)-virtual_feed(:,1));
end
for i=1:size(BM,1)
if ((i=1)&& c)<0
storage(:,1)=0;
elseif ((i=1)&& c)>0
storage(:,1)=c;
else
# Issue is below (Taking the value from subsequent row is the problem)
if (c+(storage(i-1,1)))<0
storage(:,1)=0;
elseif (c+(storage(i-1,1)))>0
storage(:,1)=(c+(storage(i-1,1)));
end
end
end
答案 0 :(得分:0)
从这一点开始
for i=1:size(BM,1)
if ((i=1)&& c)<0
storage(:,1)=0;
elseif ((i=1)&& c)>0
storage(:,1)=c;
else
# Issue is below (Taking the value from subsequent row is the problem)
if (c+(storage(i-1,1)))<0
storage(:,1)=0;
elseif (c+(storage(i-1,1)))>0
storage(:,1)=(c+(storage(i-1,1)));
end
end
end
您没有更改storage
中的单个值,而是更改所有行/列,因此每次迭代时,所有行/列都将被更改,而不是单个&#34;单元格&#34;。
你应该使用这样的东西:
storage(i,1) = 0;
顺便说一下,很多人都是这样做的。循环可以更改为向量操作。例如:
for i=1:size(BM,1)
c=(BM(:,1)-virtual_feed(:,1));
end
可以更改为:
c = BM - virtual_feed;
答案 1 :(得分:0)
我认为您想要的是以下内容(从您的Excel屏幕截图中看到)
BM_max = 1236;
virtual_feed_max = 64;
operation = [0; 1; 1; 1; 1; 1; 1; 1; 0; 0; 0; 0; 0];
BM = BM_max * operation;
virtual_feed = repmat (virtual_feed_max, size (operation));
storage = zeros (size (operation));
for i=2:numel (storage)
storage (i) = max (BM(i) - virtual_feed(i) + storage(i-1), 0);
endfor
storage
输出:
storage =
0
1172
2344
3516
4688
5860
7032
8204
8140
8076
8012
7948
7884
我离开了矢量化的一部分,让它更快。 (提示:看看cumsum
)