声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2086|回复: 8

[编程技巧] 请问在matlab中,曲线的指数形式拟合怎么实现?

[复制链接]
发表于 2006-8-28 20:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
在很多的matlab书籍中都只提到了曲线的线性拟合和多项式拟合,但对指数拟合很少有提到,可现在我需要用指数拟合来做一个问题,请各位大虾指教下指数形式的拟合该怎么实现,谢谢先~~~
回复
分享到:

使用道具 举报

发表于 2006-8-28 20:43 | 显示全部楼层
取对数,然后用多项式拟合
 楼主| 发表于 2006-8-28 20:54 | 显示全部楼层

回复 #1 skyboyliu 的帖子

谢谢哈
但是具体是怎么做的呢?
能不能给详细指点下啊?
发表于 2006-8-28 20:58 | 显示全部楼层
 楼主| 发表于 2006-8-28 21:13 | 显示全部楼层

回复 #3 skyboyliu 的帖子

我去看了那帖子,上面也是这样说的,但是最后也没有具体解决怎么做的问题
校长能不能给个具体的例子啊?
比如我要拟合的式子的形式是
y=a*exp(d1*x)+b*exp(d1*x)+c*exp(d3*x)
数据为
x=[0.1:0.1:1];
y=[0 10 30 45 53 64 74 82 90 96];
该怎么做呢?

[ 本帖最后由 skyboyliu 于 2006-8-29 09:57 编辑 ]
发表于 2006-8-29 01:20 | 显示全部楼层
连x和y都不同维你就敢拿上来作例子问问题...
  1. function ExpFitSolve
  2. clc
  3. x=[0.1:0.1:1];
  4. y=[0 10 30 45 53 64 74 82 90 96];
  5. str=['a(1)*exp(a(2)*x)+a(3)*exp(a(4)*x)+a(5)*exp(a(6)*x)'];
  6. ff=inline(str,'a','x');
  7. a0 =[-300,-5,200,-1,-40,0];                    % Starting guess
  8. [a,resnorm] = lsqcurvefit(ff,a0,x,y)
  9. str1=[num2str(a(1)),'*exp(',num2str(a(2)),'*x)+',num2str(a(3)),'*exp(',num2str(a(4)),'*x)+',...
  10.     num2str(a(5)),'*exp(',num2str(a(6)),'*x)'];
  11. ff1=inline(str1,'x');
  12. xx=linspace(0.1,1);
  13. plot(xx,ff1(xx),x,y,'r*')
复制代码

运行结果:
  1. Optimization terminated: relative function value
  2. changing by less than OPTIONS.TolFun.
  3. a =
  4. -215.6447   -0.9299  217.4042   -0.1350  -21.9148   -0.9272
  5. resnorm =
  6.    33.1770
复制代码

11111.jpg
假如不知道各个拟合参数的具体意义的话,这种问题用1stopt最方便,用MATLAB猜测初值都累死了!
  1. Title "Type your title here";
  2. Parameters p(1:6);
  3. //Variable ;
  4. Function y=p1*exp(p2*x)+p3*exp(p4*x)+p5*exp(p6*x);
  5. data;
  6. //x   y
  7.   0   0
  8.   .1  10
  9.   .2  30
  10.   .3  45
  11.   .4  53
  12.   .5  64
  13.   .6  74
  14.   .7  82
  15.   .8  90
  16.   .9  96
  17.   1.0 103
复制代码

运行结果:

  1. p1                 -204.397990804389
  2. p2                 -0.940369929518947
  3. p3                 225.924142434237
  4. p4                 -0.105081317615115
  5. p5                 -23.3984698872791
  6. p6                 -0.105081295787684
复制代码

11111.jpg

[ 本帖最后由 bainhome 于 2006-8-29 01:29 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2006-8-29 09:53 | 显示全部楼层

回复 #5 skyboyliu 的帖子

谢谢大牛啊~~`
当时在输入y时少输了一个~~`
由于是对lstopt不了解就用了matlab做了,
而且有很多东西用matlab做很方便,就没有去学lstopt了~~
非常感谢分享,我去试试
 楼主| 发表于 2006-8-29 12:31 | 显示全部楼层

回复 #5 skyboyliu 的帖子

再请教下
在[a,resnorm] = lsqcurvefit(ff,a0,x,y)的左边,resnorm有什么作用?
我在程序中好象没看到在哪有利用它啊~~
在我删了它后运行,也能得到结果,这是怎么回事呢?
谢谢!!
发表于 2006-8-29 15:11 | 显示全部楼层
原帖由 skyboyliu 于 2006-8-29 12:31 发表
再请教下
在 = lsqcurvefit(ff,a0,x,y)的左边,resnorm有什么作用?
我在程序中好象没看到在哪有利用它啊~~
在我删了它后运行,也能得到结果,这是怎么回事呢?
谢谢!!


帮助里有说明:the value of the squared 2-norm of the residual at x: sum{(fun(x,xdata)-ydata).^2}
可以返回也可以不返回,所以去掉也可以正常运行
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 17:56 , Processed in 0.068568 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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