以下是我的代码,你可以看到我试图将矩阵矩阵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);
}
答案 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
矩阵中提取标量。