likm1110 发表于 2015-11-6 15:16:33

谁有可用的拟合非线性方程的程序?

已有数据,我想把它拟合为形式是 f(x)=a{x}^{b}{e}^{-\frac{x}{c}} 的函数。a,b,c是参数。
使用附件数据文件的第一行和第三行。
谢谢!

fcode 发表于 2015-11-6 15:39:39

这是非线性回归问题。
一般采用高斯牛顿法迭代,或马奎特法。

likm1110 发表于 2015-11-6 15:54:32

fcode 发表于 2015-11-6 15:39
这是非线性回归问题。
一般采用高斯牛顿法迭代,或马奎特法。

是这个吧Levenberg-Marquardt method。
我在NR上找到了这个程序,但是没太明白怎么用。。。
我用高斯试验时候在执行时得到了错误提示:‘Program received signal SIGSEGV: Segmentation fault - invalid memory reference.‘
应该是数组的问题,不过过程内部哪里有问题我也没搞懂...

likm1110 发表于 2015-11-6 16:11:47

求助:关于非线性拟合程序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页



fcode 发表于 2015-11-6 17:44:39

对。这个就是马奎特法的代码。
出问题是正常的,代码得调。
晚点我给你看看吧。(现在有事情忙)

vvt 发表于 2015-11-8 09:47:49

你确定一下你的被拟合函数是不是正确的??存在负数的指数函数么?那就是复变函数咯?

likm1110 发表于 2015-11-9 10:30:19

vvt 发表于 2015-11-8 09:47
你确定一下你的被拟合函数是不是正确的??存在负数的指数函数么?那就是复变函数咯? ...

这个完全是书上给出的例子。是高斯分布。基本从书上摘抄

likm1110 发表于 2015-11-9 10:30:47

fcode 发表于 2015-11-6 17:44
对。这个就是马奎特法的代码。
出问题是正常的,代码得调。
晚点我给你看看吧。(现在有事情忙)


多谢!我自己也好好找一下。执行过程有问题最坑了....

kerb 发表于 2015-11-9 23:33:20

本帖最后由 kerb 于 2015-11-9 23:35 编辑

这个着急不得,你先得计算雅克比矩阵,LM只是迭代时候防止溢出的策略,因为雅克比矩阵条件数非常大,矩阵接近奇异,所以LM法对矩阵的对角元素加上一个小的数,另外,你还得搞明白线性搜索,否则即便你拿到代码,你也不会用,我觉得你最好从非线性方程求根或者优化算法看起,弄明白了,再来做这个,否则事倍功半

likm1110 发表于 2015-11-10 18:57:55

kerb 发表于 2015-11-9 23:33
这个着急不得,你先得计算雅克比矩阵,LM只是迭代时候防止溢出的策略,因为雅克比矩阵条件数非常大,矩阵接 ...

学长告诉我可以直接试一下origin或者gnuplot拟合,他说非线性拟合程序有些复杂,他都没用过
页: [1] 2
查看完整版本: 谁有可用的拟合非线性方程的程序?