2017-02-16 7 views
0

画像が見えるように(私はファイルを書きます)、私はOctaveでその式を使って望みの結果を得たいと思います。オクターブコードの画像とワークスペースの画像もアップロードしました。ワークスペースでは、ストレージ変数の結果/値はExcel(ストレージ列)と同じ値にする必要があります。私はコード内で最後の部分(i-1のif文はエラーのようです)を使用していることには疑いがあります。エクセル式をオクターブに転送するには?

誰かが私に理解してもらえるか?それ以上の説明が必要な場合はお知らせください。また、私はあまりにも下に私のコードを掲載しています:

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 

WorkspaceExcel

+1

私が見ているのは、1つの画像に1つの壊れたリンクです。あなたのコードをイメージとしてではなく、適切にフォーマットされたテキストとして含めてください。 – beaker

+0

私はコードも含めました。あなたの提案をお探しですか? – Mayil

+0

まず、 '((i = 1)&& c)<0'は間違っているようです。おそらく'((i == 1)&& c <0) 'を意味しますか?コードを[コードブロック](http://stackoverflow.com/help/formatting)としてフォーマットした方が良いでしょう。 – beaker

答えて

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をご覧ください)

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で、単一の値ではなく、すべての行/列を変更していないので、各繰り返しでは、すべての行/列が単一の「セル」の代わりに変更されています。ところで

storage(i,1) = 0; 

「は」ループはベクトル演算に変更することができ、それらの多く: あなたはこのようなものを使用する必要があります。例:

for i=1:size(BM,1) 
    c=(BM(:,1)-virtual_feed(:,1)); 
end 

がために変更することができます:

c = BM - virtual_feed;