我正在使用 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
但是这种方法会减慢程序速度。还有其他解决方案吗?
最佳答案
您不能在运行时指定大小并仍然使用使用 N
的编译时构造实例化一个模板。如果你想在编译时做,你可以创建一个模板函数或类:
template<int N> matrix<double,N,1> residual_derivative(...) {...}
在运行时执行此操作的唯一方法是使用在运行时调整大小的类型。我不知道您使用的是哪个矩阵模板,但由于它似乎是一维的,也许您可以返回 std::vector<double>
相反。
关于c++ - 动态创建 typedef 或更改函数返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28719788/