24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2927  |  回复: 19

feichengxyz

铁杆木虫 (著名写手)


resonant(金币+1):感谢回帖交流:—) 2010-05-21 17:50:12
zxwuli(金币+5):还有其他,不能用origin拟合的,呵呵 2010-05-21 18:35:17
zxwuli(金币+10):在matlab上试一试:) 2010-05-23 16:49:41
设在z=exp(a-x), 方程可简化为
y=A1*z^(1/m)+A2*z^(1/n)+A3*z^(1/k)

设M=1/m, N=1/n, K=1/k, 方程可再简化为
y=A1*z^M+A2*z^N+A3*z^K

这样用origin拟合试一试
11楼2010-05-21 13:52:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hrzhou

铁杆木虫 (著名写手)

一品黄梅

楼主按11楼的方法拟合出来了?
12楼2010-05-25 08:44:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qifang525

禁虫 (小有名气)

★ ★
余泽成(金币+2):谢谢参与应助! 2010-06-10 21:23:11
zxwuli(金币+10): 2010-06-15 17:48:16
zxwuli(金币+5): 2010-06-15 17:49:09
本帖内容被屏蔽

13楼2010-06-10 18:32:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

archun

铜虫 (初入文坛)

★ ★
zxwuli(金币+5): 2010-06-15 17:49:00
wangen994(金币+2):感谢你的热心帮助,欢迎常来程序语言版 2010-06-15 18:20:14
我不知道你是要自己从一开始写程序,或者就是找一个已经提供此项功能或者函数的软件,再由此写程序。

如果你是想从最开始写程序,要算法的话。我以前写过。用一种叠代的方法进行拟合。方法的名字我忘了,好像叫Newton Raphson什么的。就是先给一组初值,这组初值按照一种方法进行叠代计算出新的参数值,再把算得的参数值当作初值,进行下一次叠代计算。如果初值选取合适,这样叠代下去会收敛到一组“最优值”。这组最优值就是你要求得的解。

有点像牛顿法解方程的过程一样。用于曲线拟合比较麻烦,你可以去图书馆找几本书看看。
别去找 c++数值算法大全 之类的书,我原来就是找这种类型的书,找了半天没有我想要的。最多就是如何用此法解方程组之类的东西,没有如何拟合曲线。建议去看数学方面的书,数学分析之类的书,上面有这种方法的详细过程和原理(我记得先是按最小二乘法原理把偏差平方和写出来,所有参数写为 参数(下一组) = 参数 + Delta小量。然后有一步在参数处 Taylor 展开,省略所有高次项,只留一次项,再构建方程组,解 求导 = 0 得Delta小量,从而得到下一组参数。再把这组参数作为初值,再进行上述操作,直到收敛。具体的你要看书,这只是我印象中的)。你跟据它写程序即可。解那个方程组的时候要用到矩阵,你最好要有矩阵的代码。

但是这种方法有一点不好是初值不好选择。初值选择不对,叠代下去很可能不收敛而失败。这时就要加上一系列的限制条件。很麻烦,我还没玩过。。。我都是选一组初值后,把这组初值代入函数式画出图像,如果这个图像和原图像比较相近,那么这组初值就很可能成功。
14楼2010-06-14 22:56:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wlxydgq

铁虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+1):欢迎参与讨论! 2010-06-17 10:53:46
我个人觉得,不一定说的对,matlab的拟合,需要附初值,这个的确挺麻烦的。用手写的残差平方和最小(实质上就是最小二乘法)能不能解决这个问题呢?
15楼2010-06-17 09:00:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zxwuli

金虫 (正式写手)

引用回帖:
Originally posted by wlxydgq at 2010-06-17 09:00:29:
我个人觉得,不一定说的对,matlab的拟合,需要附初值,这个的确挺麻烦的。用手写的残差平方和最小(实质上就是最小二乘法)能不能解决这个问题呢?

我也在为初值的设置发愁,我在想做个循环判断,把拟合的结果和设置的初始值作比较,如果差很多就循环继续,如果小于自己设定的误差标准,就跳出循环输出结果,但碰到不收敛的就麻烦了
风雨兼程
16楼2010-06-17 11:57:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sxlion811

金虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
resonant(金币+1):感谢应助:-) 2010-06-23 16:39:05
这个赋初始值是必须的。

目前就我所知的,不管是自己用C编迭代,还是软件MATLAB, SAS, SPSS, ORIGIN...
这些方法基于的都是最小二乘法。

初始设置绕不过的。
开心努力一辈子
17楼2010-06-22 17:04:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sxlion811

金虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
resonant(金币+1):感谢应助:-) 2010-06-23 16:39:12
楼主mm做的是离散的多指数拟合,你可以试试用连续的拟合方法确定x大概的分布位置,这样K的初始值大概确定的差不多了。

A的初始值也好办(值范围为0-1),原始数据归一化后,直接赋A为0.01就可以了。算完后,然后在转换回来就ok。
开心努力一辈子
18楼2010-06-22 17:11:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pwzhou

铁杆木虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
resonant(金币+1):感谢应助:-) 2010-06-23 16:39:19
你是要做去卷积拟合吗?用matlab和Labview都可以实现,我有自己写的源代码。
引用回帖:
Originally posted by zxwuli at 2010-05-19 18:10:29:


origin里好像没有卷积,我还需要用到卷积的东西,所以用origin不行,呵呵!

19楼2010-06-23 16:09:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuchengyou6097

金虫 (著名写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
resonant(金币+1):感谢参与 2010-07-10 18:26:23
直接用Matlab中的 polyfit函数就可以
20楼2010-07-10 11:10:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zxwuli 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见