MatrixXd和VectorXd之间的特征C ++矩阵乘法

时间:2014-07-14 22:34:50

标签: c++ matrix linear-algebra eigen

以下是我的代码,你可以看到我试图将矩阵矩阵MatrixXd与vectorXd相乘。

当我尝试这个时,我收到以下错误: "二进制表达式的操作数无效(' const typename ProductReturnType>>,Matrix> :: Type'(又名' const GeneralProduct

我不知道出了什么问题。如果这是一个糟糕的问题,我很抱歉,但请帮忙!

void calcMinPortfolio(int num_ofStocks, Eigen::MatrixXd& covMatrix, Eigen::VectorXd& weights){

Eigen::MatrixXd identityMat;
identityMat.resize(num_ofStocks, num_ofStocks);
identityMat.Identity();
weights = (covMatrix.inverse() * identityMat) / (identityMat.transpose() * covMatrix.inverse() * identityMat);

}

1 个答案:

答案 0 :(得分:2)

有两个问题:

1 - 构造标识的方式,不能在动态矩阵上使用.Identity()(仅限编译大小的指定大小)。只需使用单线

Eigen::MatrixXd identityMat = Eigen::MatrixXd::Identity(num_ofStocks, num_ofStocks);

2 - 分母是一般矩阵乘积(一种类型),因此你不能用它来划分矩阵。用另一个矩阵划分矩阵是什么意思?如果这是您想要的,请使用.inverse()作为分母。接下来,除非covMatrix是标量,否则乘以身份没有任何意义。

PS:即使分母是一个大小1 x 1矩阵,它仍然是矩阵类型,而不是标量,所以你不能用它来划分矩阵。如果要将其除以矩阵表示的标量,请使用your_expresion(0)1 x 1矩阵中提取标量。