矩阵乘以标量零

Multiplication of a matrix by scalar zero

本文关键字:标量      更新时间:2023-10-16

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

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

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

PS:我确实使用英特尔编译器(版本 2015(

如 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