Fortran Coder

查看: 13044|回复: 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

数据文件

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

59

帖子

2

主题

0

精华

大师

F 币
810 元
贡献
476 点
12#
发表于 2015-11-12 17:33:16 | 只看该作者
本帖最后由 kerb 于 2015-11-12 17:40 编辑

\min{S}(a,b,c)=\frac{1}{2}\sum_{i=1}^N(f(x_i)-y_i)^2=\frac{1}{2}\sum_{i=1}^N(ax_i^be^{-\frac{x_i}{c}}-y_i)^2




2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1642 元
贡献
709 点

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

11#
发表于 2015-11-10 21:02:10 | 只看该作者
其实非线性拟合倒不是那么难。难就难在你的公式里有 x 的 b 次方,而且 x 还是负数。

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

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

学长告诉我可以直接试一下origin或者gnuplot拟合,他说非线性拟合程序有些复杂,他都没用过

59

帖子

2

主题

0

精华

大师

F 币
810 元
贡献
476 点
9#
发表于 2015-11-9 23:33:20 | 只看该作者
本帖最后由 kerb 于 2015-11-9 23:35 编辑

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

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

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

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

55

帖子

16

主题

0

精华

专家

F 币
621 元
贡献
265 点

规矩勋章

7#
 楼主| 发表于 2015-11-9 10:30:19 | 只看该作者
vvt 发表于 2015-11-8 09:47
你确定一下你的被拟合函数是不是正确的??存在负数的指数函数么?那就是复变函数咯? ...

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

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

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

QQ
6#
发表于 2015-11-8 09:47:49 | 只看该作者
你确定一下你的被拟合函数是不是正确的??存在负数的指数函数么?那就是复变函数咯?

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1642 元
贡献
709 点

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

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

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

拟合程序

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-27 05:58

Powered by Tencent X3.4

© 2013-2024 Tencent

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