【问题标题】:Multiplication of a matrix by scalar zero矩阵乘以标量零
【发布时间】:2014-12-18 10:35:37
【问题描述】:

我正在做一个 c++ 项目来做一些计算。我正在使用 boost 库来进行这些计算。我有一个奇怪的错误(结果不正确或程序冻结)。当我检查发生了什么时,我意识到在创建一个双精度矩阵并将矩阵乘以 0 之后(以确保一切都等于零,例如:

matrix<double> *A=new matrix<double>(10,100);
(*A)*=0.0;

我的矩阵并不总是被严格的 0 填充(这是在一个称为 LOT 的方法中,指针被正确删除并且我检查了我没有任何内存泄漏),有时是负零 (-0.0) 或甚至是NaN! 然后我意识到使用方法 clear() 会将所有值设置为默认值(0 表示双精度)。因此,即使我确实有解决方案,这也很奇特! 像往常一样,问题是:我做错了什么(更有可能)还是库中存在错误(不太可能)?

PS:我确实使用 intel 编译器(2015 版)

【问题讨论】:

  • 你只是在创建一个矩阵,你并没有初始化它的内容。首先用一些值初始化它,然后对其进行操作。

标签: c++ boost matrix icc


【解决方案1】:

Boost Libraries中指定,

matrix (size_type size1, size_type size2): Allocates an uninitialized matrix that holds size1 rows of size2 elements.

所以你使用了一个未初始化的矩阵,导致了那些奇怪的错误。 首先创建一个零矩阵或单位矩阵:

identity_matrix<double> matrix(3); //create a 3x3 identity matrix
zero_matrix<double> matrix(3, 3);  //create a 3x3 zero matrix

【讨论】:

  • 乘法的目标是通过乘以 0 来初始化矩阵。显然,使用方法 clear 将初始化并将每个元素设置为 0。感谢您的回答...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 2014-04-06
  • 2015-01-15
  • 2020-03-16
  • 1970-01-01
相关资源
最近更新 更多