C++ 数学 : Fitting a complicated function is not working

标签 c++ math wolfram-mathematica levenberg-marquardt

<分区>

10 多天以来,我一直在努力让这个拟合操作起作用。我使用 Levenberg-Marquardt 算法编写了一个用于拟合的 C++ 类,我用简单的多项式对其进行了测试,拟合成功;但是对于我的实验所需的真实实验功能,它不起作用。

我在 Mathematica 中安装了相同的函数,在那里执行它是可以的(但是很慢,每次安装需要 12 秒,这就是我使用 C++ 的原因)。当我执行此操作时,我的程序运行异常并返回错误结果。能否请您检查一下我使用的功能并告诉我是否有问题?

以下是我在类里面使用的拟合程序。再一次,我想提一下它适用于多项式,所以我可能在这里犯了一个非常严重的错误,它只与一些特殊函数冲突……这是我的假设。


我使用的初始值非常接近正确值。

如果您需要任何其他信息,请告诉我。非常感谢任何帮助。

最佳答案

好吧,快速浏览一下就会发现你应该有

   parameters -= SamArray<T>::MatrixProduct(SamArray<T>::Inverse(JTJ + combinationMatrix),J); //add the new deltas to the parameters and test them

   instead of 

   parameters += SamArray<T>::MatrixProduct(SamArray<T>::Inverse(JTJ + combinationMatrix),J); //add the new deltas to the parameters and test them

也就是说,当然,假设J是梯度而不是负梯度。
任何牛顿法或拟牛顿法(如 Levenberg-Marquardt)都是这种情况。

关于C++ 数学 : Fitting a complicated function is not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10796964/

相关文章:

c++ - 在 C/C++ 中传递多维数组

C++ - 将哈希表复制到另一个哈希表

php - PHP 和 MySQL 中的数学

vb.net - 使用 VB 计算字符串的数学表达式

c++ - 使用多个多路复用器时的 Arduino 内存问题

c++ - 编译器是否允许进行这样的优化?

c - 从总和最接近目标值的数组中选取值的算法?

wolfram-mathematica - Mathematica 中哪些对象是原子的?

wolfram-mathematica - 将代码从Mathematica复制到其他平台的已知问题?

wolfram-mathematica - Mathematica 中 Manipulate[] 的自定义 Controller