c++ - boost ublas矩阵产品的问题

标签 c++ boost matrix-multiplication ublas

我正在尝试使用 Boost 的 ublas 部分,但出于某种原因我无法将矩阵相乘并将结果分配给其他矩阵。

这个有效:

#include <boost/numeric/ublas/symmetric.hpp>
#include <boost/numeric/ublas/io.hpp>

using namespace boost::numeric::ublas;

typedef symmetric_matrix<int,lower> symatrix;

int main() {
  int N = 10;
  symatrix foo(N,N);
  for (int i = 0; i < N; i++)
    for(int j = 0; j <= i; j++) {
      foo(i,j) = i - j + 1;
    }
  symatrix goo(foo);
  //goo = prod(foo,foo);
  std::cout << prod(foo,foo)<< std::endl;

}

但如果我取消注释行 goo = prod(foo,foo); 或尝试类似的操作:

symatrix goo = prod(foo,foo);

我收到无法破译的运行时错误。

Check failed in file /usr/include/boost/numeric/ublas/detail/matrix_assign.hpp at line 761:
detail::expression_type_check (m, cm)
terminate called after throwing an instance of 'boost::numeric::ublas::external_logic'
  what():  external logic
Aborted

如何将矩阵相乘并赋值?

最佳答案

你是not guaranteed当您将两个对称矩阵相乘时,总是得到一个对称矩阵。所以这个错误可能与此有关,尽管我不知道为什么当我将您的类型更改为 symmetric_matrix 类型为 double 时代码仍然有效。

关于c++ - boost ublas矩阵产品的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5858150/

相关文章:

c++ - 这段代码会做什么? (内存管理)

c++ - 线删除场景 : circle and curve intersection problem in two-dimensional space

c++ - 以秒为单位获取 boost::posix_time::time_duration

boost - 传递给 boost::asio::async_read_some 的回调在 boost::asio::read_some 返回数据的使用中从未被调用

c++ - 如何找到boost::dynamic_bitset占用的内存?

c++ - 在 C++ 中打印 vector 的所有元素的最佳方法是什么?

c++ - 在 C++ 中声明具有只读属性的接口(interface)

c++ - 旋转 3x3 矩阵

C、使用动态内存分配的矩阵转置乘法

matlab - Java中的分布式矩阵乘法