如何将excel公式转换为八度?

时间:2017-02-16 17:48:34

标签: matlab octave freemat

正如你可以看到图像(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

Workspace Excel

2 个答案:

答案 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