2014-12-04 251 views
0

我想要矢量化這段代碼。是否有可能做到這一點?我試着找到一個解決方案,但我無法在谷歌上找到任何好的結果。MATLAB:在MATLAB中矢量化for循環

for pos=length1+1:length 
    X1(pos) = sim(net1, [demandPred(pos), demand(pos-1), X1(pos-1), X1(pos-2)]')'; 
    X2(pos) = sim(net1, [demandPred(pos), demand(pos-1), X2(pos-1), X2(pos-2)]')'; 
end 

在此先感謝。 :)

編輯1:

這我要模擬的模型是一個簡單的GRNN。

net1 = newgrnn([demand(169:trainElem), demand(169-1:trainElem-1), X1(169 - 1:trainElem - 1), X1(169 - 2:trainElem - 2)]', 0.09); 
+3

只是一個觀察 - 你不應該使用matlab內置函數'length'作爲變量。我對simulink不太熟悉,但也許這塊可以讓你做到這一點? http://nl.mathworks.com/help/simulink/slref/selector.html – 2014-12-04 18:49:12

+0

首先,你爲什麼要矢量化這段代碼?具體來說,你希望獲得什麼好處?瞭解你的動機可能會影響採取的最佳方法。另外,您是否可以編輯您的Simulink模型,或者您是否在尋找只需要更改您提供的MATLAB代碼的矢量化解決方案? – grungetta 2014-12-05 05:23:58

+0

@grungetta:我已經瞭解到向量化代碼會減少它的運行時間。 – 2014-12-08 00:40:21

回答

1

Simulink模型可以矢量化嗎?有時。 可以您的 Simulink模型被矢量化?沒有看到這個模型是不可能的 - 它是如何從m代碼中調用的(正如你在你的問題中所表明的)並不是一個跡象。

矢量化的一個例子是:考慮一個信號s1被添加到常量K的模型,並且假設你需要爲K運行不同值的模型。你可以使用一個循環(比如m代碼你可以顯示出來),並針對每個單獨的所需值運行模型。或者,你可以使K爲一個向量,在這種情況下,所有值將被加到s1,結果將是一個向量信號s1 + K(1), s1 + K(2),...,s1 + K(n),並且對於所有這些求和發生,模型只需執行一次。

但是,在你的模型中是否可以完成這種事情不能在沒有看到模型的情況下確定。