我想在 .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 输出。