使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
Using a pointer to dynamically allocate Matrices in c++ in presence of eigen library
我使用 Eigen 库来初始化矩阵并进行与对角化等相关的计算。到目前为止,我一直在使用"按值调用"方法,即:
- 我用MatrixXcd H(N,N(定义了一个复杂的双NxN矩阵。
- 然后我调用一个例程,如 SelfAdjointMatrixSolver es(H(。
- 最后,我使用 es.eigenvalues(( 获得特征值。
现在,我想使用指针动态分配矩阵。我写了以下代码:
#include <iostream>
#include <complex>
#include <cmath>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include<Eigen/Dense>
#include<fstream>
#include<random>
using namespace std;
using namespace Eigen;
int main()
{
int i,j,k,l;//for loops
MatrixXd *H = NULL;
H = new MatrixXd(10,10);
if (!H)
cout << "allocation of memory failedn";
else
{
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
H[i][j]=1.0;
}
}
}
return 0;
}
我收到以下错误消息:
In file included from eigen/Eigen/Core:347:0,
from eigen/Eigen/Dense:1,
from test.cpp:7:
eigen/Eigen/src/Core/DenseCoeffsBase.h: In instantiation of ‘Eigen::DenseCoeffsBase<Derived, 1>::Scalar& Eigen::DenseCoeffsBase<Derived, 1>::operator[](Eigen::Index) [with Derived = Eigen::Matrix<double, -1, -1>; Eigen::DenseCoeffsBase<Derived, 1>::Scalar = double; Eigen::Index = long int]’:
test.cpp:32:13: required from here
eigen/Eigen/src/Core/util/StaticAssert.h:32:40: error: static assertion failed: THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD
#define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG);
^
eigen/Eigen/src/Core/DenseCoeffsBase.h:406:7: note: in expansion of macro ‘EIGEN_STATIC_ASSERT’
EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime,
我应该如何解决这个问题?我的错误是在定义指针还是分配值时?
正如这个断言所说THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD
矩阵类使用括号来索引,而不是文档中提到的方括号。所以改变
H[i][j] = 1.0;
自
H(i,j) = 1.0;
此外,矩阵已经动态分配,这里不需要new
。
MatrixXd H(10, 10);
相关文章:
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 为什么它在不分配内存的情况下工作正常
- 如何在不使用赋值运算符的情况下为动态变量赋值?
- 如何在不使用 "new" 关键字的情况下解除分配创建的对象的内存?
- 在不释放所有动态分配的资源的情况下结束程序是否有风险
- 在不工作的情况下为数组分配指针,但反过来也可以
- 在这种情况下,数组a会被取消分配吗
- 如何在没有动态内存分配(堆)的情况下为可变大小数组(矢量)定义安全容器或视图
- 如何在不违反 const 限制的情况下动态分配模板类中的空间
- 在没有动态内存分配的情况下实现堆栈
- 仅在动态内存分配的情况下才需要复制构造函数
- 如何在不使用std::vectors的情况下,使用运算符==从动态分配的对象数组中删除元素
- 在C++中,如何在没有动态分配(即NEW)的情况下将对象初始化为对象内部的指针
- 如何在没有动态内存分配的情况下创建对象数组
- 在使用动态共享内存分配的情况下更正内核调用
- 如何在不使用动态内存分配的情况下创建基于指针的二进制树
- 在不终止程序的情况下将动态分配的内存返回给操作系统