我想在.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输出。
答案 0 :(得分:0)
在a mailing list的帮助下,我终于能够解决我的问题了:
output(ii) = result( 0 , 0 ) ; // assign from indexed result matrix to output