Octave .oct文件中的矩阵运算

时间:2013-10-05 12:34:10

标签: for-loop matrix octave

我想在.oct文件中编写简洁的代码,以对输入列向量/矩阵执行矩阵乘法。该函数在内部创建例如11个元素的行向量A,然后在循环中我想执行A * B,其中B是输入向量下的11个元素滑动窗口,将结果写入输出列向量/矩阵作为循环进展。我已经尝试了使用http://wiki.octave.org/Tips_and_tricks上的信息的各种方法,但我无法编译任何东西 - 我得到的错误是:

错误:无法在作业中将'Matrix'转换为'double'

我的代码的相关部分是: -

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输出。

1 个答案:

答案 0 :(得分:0)

a mailing list的帮助下,我终于能够解决我的问题了:

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