Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;具有特征值的类定义_C++_Class_Eigen_Numerical Methods_Numerical Analysis - Fatal编程技术网

C++ c++;具有特征值的类定义

C++ c++;具有特征值的类定义,c++,class,eigen,numerical-methods,numerical-analysis,C++,Class,Eigen,Numerical Methods,Numerical Analysis,我正在为一种特殊的形式写一个数值方法 C++中的代码> y(t)=a*y(t)+g(t,y),其中代码> a < /> >是矩阵, g 是向量函数,即作为输入的时间和向量,并返回向量的函数。我正在使用库Eigen 我正在编写自己的类,但我不明白如何在类定义中将向量函数g(t,y)作为参数传递,这是 integrator(双fin\u time,int time\u steps,MatrixXd rhs,VectorXd g,VectorXd in\u data) 我怎样才能用艾根做到这一点 当函

我正在为一种特殊的形式写一个数值方法 C++中的代码> y(t)=a*y(t)+g(t,y),其中代码> a < /> >是矩阵,<代码> g <代码>是向量函数,即作为输入的时间和向量,并返回向量的函数。我正在使用库Eigen

我正在编写自己的类,但我不明白如何在类定义中将向量函数g(t,y)作为参数传递,这是

integrator(双fin\u time,int time\u steps,MatrixXd rhs,VectorXd g,VectorXd in\u data)

我怎样才能用艾根做到这一点


当函数是标量函数时,我通常使用
double(*f)(double t,double y)
,但这里当然不同。

我更喜欢使用合适的C++11函数对象,而不是使用函数指针。然后,函数g(t,y)将具有以下类型:

std::function<VectorXd (double, const VectorXd&)> g;
由于您在编译时知道大小n,因此还可以使用模板参数来修复大小:

template<int n>
class SpecialODE {
     using Vector = Eigen::Matrix<double, n, 1>
};
模板
特种矿脉{
使用向量=特征::矩阵
};

在这两种情况下,循环展开和SIMD矢量化都由Eigen和编译器完成。对于较大的矩阵大小,我不希望在性能上看到任何重大差异。

实际上,我通过在构造函数中声明
VectorXd(*g)(double,VectorXd)解决了这个问题,但谢谢您的回答。我在网上看到,使用这种动态分配是没有效率的,那么应该使用什么呢@20knotsSo,我不想动态调整类型的大小,但同时我不想编写依赖于维度的版本。我的意思是,我想把维度作为类的一个属性,但是在代码中我想更一般一些。我该怎么办@20海里/小时一般的回答会很长。请回答以下问题给我一些提示:矩阵的大小在编译时已知吗?矩阵的典型尺寸是多少?
template<int n>
class SpecialODE {
     using Vector = Eigen::Matrix<double, n, 1>
};