首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Boost UBLAS计算二次形式?

如何使用Boost UBLAS计算二次形式?
EN

Stack Overflow用户
提问于 2013-01-21 05:00:17
回答 1查看 305关注 0票数 0

我正在尝试使用Boost UBLAS来计算(x- mu )^T* SigmaInverse *(x-mu),其中x和mu是向量,SigmaInverse是一个矩阵。代码如下所示:

代码语言:javascript
复制
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>

#include "matrixhelpers.h"

namespace ublas = boost::numeric::ublas;

class MultivariateNormalLogLikelihood
{
public:
  MultivariateNormalLogLikelihood(ublas::vector<double> &mu, ublas::matrix<double> &sigma) : mu(mu)
  {
    invertMatrix<double>(sigma, sigmaInverse);
    constElement = -std::log(2*M_PI)*0.5*mu.size()-0.5*std::log(determinant(sigma));
  }

  double operator()(ublas::vector<double> &x)
  {
    auto y = x-mu;
    double e = ublas::prod(ublas::prod(ublas::trans(y),sigmaInverse),y);
    return constElement-0.5*e;
  }
private:
  double constElement;
  ublas::matrix<double> sigmaInverse;
  ublas::vector<double> mu;
};

我得到了这个错误:

代码语言:javascript
复制
/home/ga/PhD/cpp/grzesLib/multivariatenormalloglikelihood.h:23:71: error: no matching function for call to ‘prod(boost::numeric::ublas::matrix_vector_binary2_traits<double, boost::numeric::ublas::vector_unary<boost::numeric::ublas::vector_binary<boost::numeric::ublas::vector<double>, boost::numeric::ublas::vector<double>, boost::numeric::ublas::scalar_minus<double, double> >, boost::numeric::ublas::scalar_identity<double> >, double, boost::numeric::ublas::matrix<double> >::result_type, boost::numeric::ublas::vector_binary<boost::numeric::ublas::vector<double>, boost::numeric::ublas::vector<double>, boost::numeric::ublas::scalar_minus<double, double> >&)’

我做错了什么?我怎样才能让它正常工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-29 22:35:03

原来你不能在UBLAS中转置向量,相反,我应该显式地使用inner_product。要修复代码,应将有问题的行从:

代码语言:javascript
复制
double e = ublas::prod(ublas::prod(ublas::trans(y),sigmaInverse),y);//WRONG

至:

代码语言:javascript
复制
double e = ublas::inner_prod(y, ublas::prod(sigmaInverse,y));//fine
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14429275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档