- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用这里给出的模板程序:
https://www.gnu.org/software/gsl/manual/html_node/Trivial-example.html
他们提供的程序可以完美地编译和运行,这很好。我想做的是推广此方法以找到具有任意数量参数的函数的最小值。
一些粗略的阅读表明,度量函数 (M1) 仅用于某些诊断和打印情况,因此或多或少可以忽略。剩下的就是适本地定义 E1 和 S1。不幸的是,我对使用指针和 void 的了解并不完整,所以我一直在尝试将配置“xp”升级为参数数组,而不是单个 double 。
我天真地试着从
double x = *((double *) xp);
到
double x = (*((double *) xp))[0];
在适当的地方,但显然那没有用。我确定我错过了一些愚蠢的东西,所以任何提示都会很好!显然,我将定义自己的 E1 输出函数,该函数将采用这 N 个参数并返回一个数字。
最佳答案
所提供链接中的底层算法 gsl_siman_solve()
已被推广以处理任何数据类型。这就是为什么总是在使用前将无处不在的 xp
参数强制转换为双指针的原因。如果所有回调都正确编码,那么使用任何结构或数组或数组数组应该很简单,而不是简单地加倍。
问题是 gsl_siman_solve()
似乎只支持标量双步长、初始猜测和“统一”值(来自 gsl_rng_uniform()
),所以您需要将标量 double 值映射到自然多维量。这样做是可以的,但是比较麻烦,不太灵活。在您的情况下,映射将在 S1()
中完成。
这类似于将十进制数的数字映射到多维空间:例如,个位代表 X 轴,十位代表 Y 轴,百位代表 Z 轴。通过递增一个整数,可以遍历整个 3D 空间,从 (0, 0, 0) 到 (9, 9, 9)。您不必使用整数和 10 的幂,并且组件甚至不必具有相同的范围,但打包值的每个组件的范围存在固有限制。实际上,您可以反过来执行此操作:获取一个 double 标量并将其解包为多个数量。
最后,您的代码 double x = (*((double *) xp))[0];
将不起作用,因为您正试图将 double 取消引用为数组,而不是指针加倍,这样就可以了。换句话说,问题出在第一个 *
上。
关于algorithm - GNU 模拟退火,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29414384/
我有一个 d3 力布局图可视化效果很好,但它经常过早地“卡住”。例如,节点正朝着一个好的位置摇晃,如果“碰撞”它们(向它们的位置注入(inject)一点随机性并再次 start() ,它们最终会到达那
我是一名优秀的程序员,十分优秀!