Fortran Coder

查看: 11898|回复: 11

[插值拟合] 谁有可用的拟合非线性方程的程序?

[复制链接]

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

发表于 2015-11-6 15:16:33 | 显示全部楼层 |阅读模式
已有数据,我想把它拟合为形式是 f(x)=a{x}^{b}{e}^{-\frac{x}{c}} 的函数。a,b,c是参数。
使用附件数据文件的第一行和第三行。
谢谢!

W_r_v1_test.dat

72.46 KB, 下载次数: 6

数据文件

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

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

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

 楼主| 发表于 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.‘
应该是数组的问题,不过过程内部哪里有问题我也没搞懂...

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

 楼主| 发表于 2015-11-6 16:11:47 | 显示全部楼层

求助:关于非线性拟合程序Marquardt method

想用gauss随机数试验非线性拟合程序。
在执行中出现报错:
!========================================================
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#0  0x7F80E544ED18
#1  0x7F80E544DEA0
#2  0x7F80E4949A4F
#3  0x405BF8 in __fitpack_MOD_mrqmin
#4  0x406214 in MAIN__ at t_nonlinear.f95:?
Segmentation fault (core dumped)
!========================================================
拟合程序摘自: ‘Numerical Recipes‘ 第1292页



td.dat

6.87 KB, 下载次数: 5

gauss datas

t_nonlinear.f90

12.4 KB, 下载次数: 6

拟合程序

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

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

953

帖子

0

主题

0

精华

大师

F 币
180 元
贡献
73 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2015-11-8 09:47:49 | 显示全部楼层
你确定一下你的被拟合函数是不是正确的??存在负数的指数函数么?那就是复变函数咯?

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

 楼主| 发表于 2015-11-9 10:30:19 | 显示全部楼层
vvt 发表于 2015-11-8 09:47
你确定一下你的被拟合函数是不是正确的??存在负数的指数函数么?那就是复变函数咯? ...

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

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

 楼主| 发表于 2015-11-9 10:30:47 | 显示全部楼层
fcode 发表于 2015-11-6 17:44
对。这个就是马奎特法的代码。
出问题是正常的,代码得调。
晚点我给你看看吧。(现在有事情忙)

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

59

帖子

2

主题

0

精华

大师

F 币
810 元
贡献
476 点
发表于 2015-11-9 23:33:20 | 显示全部楼层
本帖最后由 kerb 于 2015-11-9 23:35 编辑

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

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

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

学长告诉我可以直接试一下origin或者gnuplot拟合,他说非线性拟合程序有些复杂,他都没用过
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-3-29 17:15

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表