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

Eigen C++ matrix multiplication between MatrixXd and VectorXd

本文关键字:c++ 特征 MatrixXd VectorXd 之间      更新时间:2023-10-16

下面是我的代码,正如你所看到的,我试图将一个方阵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矩阵中提取标量。