谁有可用的拟合非线性方程的程序?
已有数据,我想把它拟合为形式是 f(x)=a{x}^{b}{e}^{-\frac{x}{c}} 的函数。a,b,c是参数。使用附件数据文件的第一行和第三行。
谢谢!
这是非线性回归问题。
一般采用高斯牛顿法迭代,或马奎特法。 fcode 发表于 2015-11-6 15:39
这是非线性回归问题。
一般采用高斯牛顿法迭代,或马奎特法。
是这个吧Levenberg-Marquardt method。
我在NR上找到了这个程序,但是没太明白怎么用。。。
我用高斯试验时候在执行时得到了错误提示:‘Program received signal SIGSEGV: Segmentation fault - invalid memory reference.‘
应该是数组的问题,不过过程内部哪里有问题我也没搞懂...
求助:关于非线性拟合程序Marquardt method
想用gauss随机数试验非线性拟合程序。在执行中出现报错:
!========================================================
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#00x7F80E544ED18
#10x7F80E544DEA0
#20x7F80E4949A4F
#30x405BF8 in __fitpack_MOD_mrqmin
#40x406214 in MAIN__ at t_nonlinear.f95:?
Segmentation fault (core dumped)
!========================================================
拟合程序摘自: ‘Numerical Recipes‘ 第1292页
对。这个就是马奎特法的代码。
出问题是正常的,代码得调。
晚点我给你看看吧。(现在有事情忙)
你确定一下你的被拟合函数是不是正确的??存在负数的指数函数么?那就是复变函数咯? vvt 发表于 2015-11-8 09:47
你确定一下你的被拟合函数是不是正确的??存在负数的指数函数么?那就是复变函数咯? ...
这个完全是书上给出的例子。是高斯分布。基本从书上摘抄 fcode 发表于 2015-11-6 17:44
对。这个就是马奎特法的代码。
出问题是正常的,代码得调。
晚点我给你看看吧。(现在有事情忙)
多谢!我自己也好好找一下。执行过程有问题最坑了.... 本帖最后由 kerb 于 2015-11-9 23:35 编辑
这个着急不得,你先得计算雅克比矩阵,LM只是迭代时候防止溢出的策略,因为雅克比矩阵条件数非常大,矩阵接近奇异,所以LM法对矩阵的对角元素加上一个小的数,另外,你还得搞明白线性搜索,否则即便你拿到代码,你也不会用,我觉得你最好从非线性方程求根或者优化算法看起,弄明白了,再来做这个,否则事倍功半 kerb 发表于 2015-11-9 23:33
这个着急不得,你先得计算雅克比矩阵,LM只是迭代时候防止溢出的策略,因为雅克比矩阵条件数非常大,矩阵接 ...
学长告诉我可以直接试一下origin或者gnuplot拟合,他说非线性拟合程序有些复杂,他都没用过
页:
[1]
2