2013-10-05 63 views
0

我想在.oct文件中編寫簡潔的代碼,以對輸入列向量/矩陣執行矩陣乘法。例如,該函數在內部創建了11個元素的行向量A,然後在一個循環內,我想執行A * B,其中B是11個元素將輸入向量向下滑動窗口,將結果寫入輸出列向量/矩陣隨着循環的進展而變化。我已經嘗試使用各種信息的方法,並http://wiki.octave.org/Tips_and_tricks但我不能得到任何編譯 - 我得到的錯誤是:Octave .oct文件中的矩陣操作

錯誤:無法轉換「矩陣」到「雙」在分配

我的代碼的相關部分是: -

Matrix price = args(0).matrix_value() ; // a single column matrix 
Matrix output = args(0).matrix_value() ; 

// create intermediate calculation matrices 
Matrix vec_11 (1,11) ; 
Matrix price_11 (11,1) ; 
Matrix result (1,1) ; 

for (int ii = -m ; ii < (m+1) ; ii ++) 
{ 
vec_11 is filled in this loop and then doesn't change 
} 

for (octave_idx_type ii (50) ; ii < args(0).length() ; ii++) 
{ 
// extract rolling window and perform matrix multiplication 
result = vec_11 * price.extract(ii-10,0,ii,0) ; 
output(ii,1) = result ; // this writing to output matrix fails 
} 

retval_list(0) = output ; 

我用的矩陣值的價格,vec_11,結果和輸出,因爲我試圖做矩陣乘法,所以我不明白爲什麼我得到此轉換爲雙重錯誤。如果我將價格和輸出更改爲column_vector_value並將vec_11更改爲RowVector,我仍然會得到相同的錯誤。看來,

result = vec_11 * price.extract(ii-10,0,ii,0) ; 

是給matrix_value但我不能把它寫入無論是matrix_value或column_vector_value輸出。

+0

你確定這就是你編譯代碼?您提到的錯誤與您展示的代碼不符。你能告訴我們確切的事情和最小的例子,再現錯誤?順便說一句,如果你只有一個列/行,你應該使用'RowVector'和'ColumnVector'類,而不是'Matrix'。 – carandraug

+0

@carandraug你是對的 - 我的部分草率複製和粘貼。編輯過的問題顯示正確的編譯錯誤,並添加了一些額外的信息以迴應您的評論。 – babelproofreader

回答

0

a mailing list的幫助,我終於能夠解決我的問題:

output(ii) = result(0 , 0) ; // assign from indexed result matrix to output