这是问题所在。我使用 minpack 进行非线性优化。成本函数具有以下签名:
void cost_function(const int* n, const int* m,const double *p, double *x, int* iflag)
n - 初始点的大小 m - 函数向量的大小 p - 初始点 x - 函数向量
我有 for 循环,我在其中迭代对象数组。每个对象都包含优化功能的输入信息。
for(int counter = 0; i < num_of_objects; ++counter)
{
//get information from object
//call optimization function
lmdif1_(cost_function, m, n, initial_point, X, precision, info, iwa, wa, lwa);
}
但在成本函数中,我需要与当前对象相关的特定值。如果成本函数是类成员,那么指针的类型就会错误,并且不可能将此指针传递给 lmdif1_。
所以现在我有一个临时解决方案,使用全局对象。
for(int counter = 0; i < num_of_objects; ++counter)
{
//get information from object
//call optimization function
global_obj = object;
lmdif1_(cost_function, m, n, initial_point, X, precision, info, iwa, wa, lwa);
}
然后 cost_function 使用这个全局对象来接收需要的信息。但这并不好。这个问题的正确解决方案是什么?谢谢。