在C++中使用 GSL 最小化
Using GSL Minimize in C++
我在 GSL 中的最小化库时遇到了问题。我正在尝试在没有导数的情况下实现算法,但为了使用,我需要传递函数以最小化:
https://www.gnu.org/software/gsl/doc/html/multimin.html?highlight=minimization
我正在遵循他们那里的算法没有导数,但是当我尝试在我的成员类函数中使用时:my_func我得到这个:
"类::my_func"从类型"双(类::)(常量gsl_vector*,无效*("到类型"双(((常量gsl_vector,无效*(">
该算法似乎无法使用成员类函数。我的问题是如何绕过它并将成员类函数转换为普通(类似 C(函数?
GSL使用params
将任意参数传递到函数中。使用指向对象的指针作为"参数"。
创建一个代理函数,一个类中的static
成员函数,它接收params
。在此函数中,将params
转换为正确的类型(指向Class
的指针(,并调用其中的成员函数。
如果您的my_func
public
,则可以使用非成员("全局"(代理函数。
class Class
{
double my_func(const gsl_vector*) // the real function
{
...
}
static double static_my_func(const gsl_vector* v, void* params) // proxy function
{
Class* object = static_cast<Class*>(params);
return object->my_func(v);
}
};
如果你的实函数想要接收额外的参数,你必须以某种方式适应这一点,例如使参数成为你的Class
的成员,或者(更复杂但更面向对象(创建一个临时struct
,其中包含指向你的对象的指针和附加参数。
相关文章:
- 找到两对数字,使它们的乘积的绝对差最小化
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 超轻 - 如何最小化窗口
- 在C++中使用 GSL 最小化
- 在C++中最小化变量的范围
- 当只有一个线程主要使用该对象而其他线程很少使用它时,如何最小化该对象的互斥锁锁定?
- "最小化"按钮不会出现在 MFC 对话框中
- 从小于或等于某个 N 的数字列表中最小化或找到 n 个理想的子集和
- 如何排列二进制字符串以最小化它们之间的距离
- 最小化 C++ 中的内存使用
- 禁用 GPO 的空气抖动最小化
- 如何隐藏最大化和最小化按钮并在qml应用程序窗口中显示关闭按钮?
- 如何使用 stl 最小化 c++ 中所有打开的窗口
- 如何最小化嵌入式平台上的内存分配
- 可见程序或最小化程序时的过程ID更改
- 删除/最小化GIT合并冲突
- 当模式窗口最小化时,最小化所有应用程序窗口(在 Linux 上)
- 应用程序最小化时单击显示桌面/最小化全部
- 如何在Qt中打开外部应用程序并将其最小化到系统托盘
- 什么是窗口最大化/最小化/恢复的WM Windows消息