我想执行一些涉及区间矩阵的计算。下面的代码显示了我使用C++库eigen和boost的间隔库的尝试。我可以用间隔填充一个矩阵,我也可以添加也可以减去这些矩阵,但是我不能将它们相乘,这对我来说是强制性的。如何使用特征库和增强库来运行矩阵乘法运算?
#include "stdafx.h"
#include <boost/numeric/interval.hpp>
#include <boost/numeric/interval/rounded_arith.hpp>
#include <Eigen/Dense>
using namespace std;
using namespace boost::numeric::interval_lib;
using namespace boost::numeric;
using Eigen::MatrixXd;
using Eigen::Matrix;
typedef interval<double, policies<save_state<rounded_transc_std<double> >,
checking_base<double> > > Interval;
int _tmain(int argc, _TCHAR* argv[])
{
Matrix<double, 2, 2> a1;
a1(0, 0) = 1;
a1(0, 1) = 1;
a1(1, 0) = 1;
a1(1, 1) = 1;
Matrix<double, 2, 2> b1;
b1 = a1*a1; //this works
//this works
Interval c = Interval(2, 3) * Interval(-1, 4);
Matrix<Interval, 2, 2> a;
a(0, 0) = Interval(-1, 1);
a(0, 1) = Interval(-2, 2);
a(1, 0) = Interval(-3, 3);
a(1, 1) = Interval(-4, 4);
Matrix<Interval, 2, 2> b;
b = a + a; //this works
b = a - a; //this works
b = a*a; //this dose not complie
return 0;
}
让上面的代码运行需要什么?或者如果在C++中更容易执行区间矩阵乘法?包括编译器错误消息(对不起它是德文)
Fehler 1 error C2666: 'Eigen::RotationBase<Derived,3>::operator *': 3 Überladungen haben ähnliche Konvertierungen 39 1 eigen_test
2 IntelliSense: Mehr als ein "*"-Operator stimmt mit diesen Operanden überein:
Funktionsvorlage "const Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<Eigen::internal::promote_scalar_arg<Interval, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<T, Interval, Eigen::internal::scalar_product_op<T, Interval>>>::value>::type, Interval>, const Eigen::internal::plain_constant_type<Eigen::Matrix<Interval, 2, 2, 0, 2, 2>, Eigen::internal::promote_scalar_arg<Interval, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<T, Interval, Eigen::internal::scalar_product_op<T, Interval>>>::value>::type>::type, const Eigen::Matrix<Interval, 2, 2, 0, 2, 2>> Eigen::operator*(const T &scalar, const Eigen::MatrixBase<Eigen::Matrix<Interval, 2, 2, 0, 2, 2>> &matrix)"
Funktionsvorlage "const Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<Interval, Eigen::internal::promote_scalar_arg<Interval, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<Interval, T, Eigen::internal::scalar_product_op<Interval, T>>>::value>::type>, const Eigen::Matrix<Interval, 2, 2, 0, 2, 2>, const Eigen::internal::plain_constant_type<Eigen::Matrix<Interval, 2, 2, 0, 2, 2>, Eigen::internal::promote_scalar_arg<Interval, T, Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<Interval, T, Eigen::internal::scalar_product_op<Interval, T>>>::value>::type>::type> Eigen::MatrixBase<Derived>::operator*(const T &scalar) const [mit Derived=Eigen::Matrix<Interval, 2, 2, 0, 2, 2>]"
Operandentypen sind: Eigen::Matrix<Interval, 2, 2, 0, 2, 2> * Eigen::Matrix<Interval, 2, 2, 0, 2, 2> 39 7 eigen_test
翻译:
编辑错误1:3重载具有类似于转换
INTELLISENSE:一个以上的“*” - 操作者匹配这个操作数
您应该添加的编译器错误消息。 – mch
谢谢你,我做过 – solid
使用Visual Studio 2015(v141)和Eigen 3.2,你的代码编译时没有任何错误或警告。 – lakeweb