下面是我的代码,正如你所看到的,我试图将一个方阵MatrixXd与vectorXd相乘。
当我尝试这样做时,我得到以下错误:"二进制表达式的无效操作数('const typename ProductReturnType>>, Matrix>::Type'(又名'const generproduct ')
我不知道哪里出错了。如果这是一个不好的问题,我很抱歉,但请帮助!
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 -你构造恒等的方式,你不能在一个动态矩阵上使用.Identity()
(只能在编译大小指定的大小上)。只需使用一行
Eigen::MatrixXd identityMat = Eigen::MatrixXd::Identity(num_ofStocks, num_ofStocks);
2 -分母是一个一般的矩阵乘积(一种类型),所以你不能用它除以一个矩阵。一个矩阵除以另一个矩阵是什么意思?如果这是你想要的,用.inverse()
作为分母。接下来,乘以恒等式没有任何意义,除非covMatrix
是一个标量,而它不是。
PS:即使分母是一个大小的1 x 1
矩阵,它仍然是一个矩阵类型,而不是一个标量,所以你不能除以一个矩阵。如果要将其除以矩阵表示的标量,则使用your_expresion(0)
从1 x 1
矩阵中提取标量。