我正在使用dlib
库进行非线性优化。我看了例子并编写了我的程序,例如。一切正常。这是代码示例:
const int N = 9;
typedef matrix<double,N,1> parameter_vector;
parameter_vector residual_derivative{
.....
}
现在,我希望能够动态更改要优化的参数数量。我该怎么办?我知道无法动态创建typedef
。我想做这样的事情(它不是编译)
class A{
public:
OptimizationWrapper(int N):N(N){
typedef matrix<double,N,1> parameter_vector;
}
int N;
parameter_vector residual_derivative{
.....
}
};
我发现只有一个解决方案。这是为了使'parameter_vector'大小小于优化参数的最大数量:
typedef matrix<double,100,1> parameter_vector;
int N; //real number of parameters
然而,这种方法减慢了程序。还有其他解决方案吗?
答案 0 :(得分:2)
您无法在运行时指定大小,仍然使用使用N
的编译时构造来实例化模板。如果您希望在编译时执行此操作,则可以创建模板函数或类:
template<int N> matrix<double,N,1> residual_derivative(...) {...}
在运行时执行此操作的唯一方法是使用在运行时调整大小的类型。我不知道你正在使用哪个矩阵模板,但由于它似乎是一维的,也许你可以返回一个std::vector<double>
。
答案 1 :(得分:0)
matrix具有允许您在运行时设置大小的构造函数。打电话给其中一个去做。以下是一些例子:
matrix<double> mat(4,5);
matrix<double,0,1> column_vect(6);