Tôi đang cố gắng phân tích cholesky của sản phẩm của ma trận với chuyển vị của nó, sử dụng loại Eigen và C++ 11 "tự động". Sự cố xảy ra khi tôi cố gắng làmSuy luận kiểu Eigen và C++ 11 không cho Cholesky của sản phẩm ma trận
auto c = a * b
auto cTc = c.tranpose() * c;
auto chol = cTc.llt();
Tôi đang sử dụng XCode 6.1, Eigen 3.2.2. Lỗi loại tôi nhận được là here.
Ví dụ tối thiểu này cho biết sự cố trên máy của tôi. Thay đổi loại c
từ auto
thành MatrixXd
để xem nó hoạt động.
#include <iostream>
#include <Eigen/Eigen>
using namespace std;
using namespace Eigen;
int main(int argc, const char * argv[]) {
MatrixXd a = MatrixXd::Random(100, 3);
MatrixXd b = MatrixXd::Random(3, 100);
auto c = a * b;
auto cTc = c.transpose() * c;
auto chol = cTc.llt();
return 0;
}
Có cách nào để thực hiện công việc này trong khi vẫn sử dụng tự động không?
Là một câu hỏi phụ, có lý do hiệu suất nào để không khẳng định ma trận là MatrixXd
ở mỗi giai đoạn không? Sử dụng tự động sẽ cho phép Eigen giữ câu trả lời như bất kỳ biểu thức mẫu lạ nào mà nó thích. Tôi không chắc chắn nếu gõ nó như MatrixXd sẽ gây ra vấn đề hay không.
Cảm ơn - thật tuyệt vời khi được nghe từ nhà phát triển thư viện! Lý do của tôi cho điều này là để xem liệu Eigen có thể tối ưu hóa chính xác 'm0.transpose() * m1.transpose() * m2 * m3' khi chúng có các hình dạng hữu ích - do đó tôi muốn giữ mọi thứ trong không gian biểu hiện cho đến phút cuối cùng. Có phải do các mẫu làm việc mà tôi không thể phân tích cholesky của một GeneralProduct, là nó chỉ là không ai có quan tâm đủ để thêm nó vào Eigen chưa hoặc có một lý do tại sao làm nó là ngu ngốc? – c0g