matlab,最小二乘法,指数型函数

time=0:1:24;tem=[15,14,14,14,14,15,16,18,20,20,23,25,28,31,32,31,29,27,25,24,22,20,18... time=0:1:24;tem=[15,14,14,14,14,15,16,18,20,20,23,25,28,31,32,31,29,27,25,24,22,20,18,17,16];用指数型函数a*exp(-b*(t-c)^2)进行最小二乘法拟合,求出a ,b,c参数,并画出拟合曲线求完整的matlab程序,完整的程序! 展开
 我来答
tianxiawulang
2014-01-06 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2653万
展开全部

问题分析

你给的拟合公式一有些问题,很难达到理想的拟合效果,参考代码如下:

time = 0:1:24;
tem = [15,14,14,14,14,15,16,18,20,20,23,25,28,31,32,31,29,27,25,24,22,20,18,17,16];
f = inline('x(1)*exp(-x(2)*(t-x(3)).^2)', 'x', 't');
x0 = [30 0.1 15];
x = lsqcurvefit(f,x0,time,tem)
plot(time,tem,'-o',time,f(x,time),'r.:');

得到的拟合系数(依次为a、b、c):

Optimization terminated: relative function value
 changing by less than OPTIONS.TolFun.
x =
   27.7940    0.0057   14.2074

 

改进拟合公式

如果考虑修改拟合公式,加入一个常数项d,即a*exp(-b*(t-c)^2)+d,则代码修改如下:

time = 0:1:24;
tem = [15,14,14,14,14,15,16,18,20,20,23,25,28,31,32,31,29,27,25,24,22,20,18,17,16];
f = inline('x(1)*exp(-x(2)*(t-x(3)).^2)+x(4)', 'x', 't');
x0 = [30 0.1 15 14];
x = lsqcurvefit(f,x0,time,tem)
plot(time,tem,'-o',time,f(x,time),'r.:');

程序运行结果如下:

Optimization terminated: relative function value
 changing by less than OPTIONS.TolFun.
x =
   16.6593    0.0283   14.5690   14.1598

由图可见,效果相对而言比较理想。

WM_THU
2014-01-06 · TA获得超过7164个赞
知道大有可为答主
回答量:4285
采纳率:80%
帮助的人:3933万
展开全部

如果能加上一个直流偏置项的话,可以得到比较满意的拟合精度。

而只按您要求的模型,拟合误差会很大(rmse=2)。可能是我自己估计的参数初始值有问题?您能给一组可靠些的初始值么?下图是取对数后做二次函数拟合的结果。

追问
对,大概就是这个意思
还有你这个纵坐标怎么怪怪的,都只有个位数
把完整的程序发一下吧
追答

完整程序在附件里。用的方法是取对数以后做线性最小二乘。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式