注册 登录
编程论坛 Matlab

与拟合有关的参数确定

司马长聊 发布于 2007-05-07 23:01, 1674 次点击
s=a*t+b*exp(c*t)
其中,a,b,c是常数
t取值为 0 3 6 9 12 15 18 21 24 27 30
s取值为 0 30 75 128 183 236 285 340 392 445 499
s与t拟合,求a,b,c
注:同学请我帮忙做的,说是很急,因为有一段时间不接触了,希望各位不吝赐教(不一定是详细解答,有哪一位肯指个方向就很感激了)!

[此贴子已经被作者于2007-5-8 16:42:42编辑过]

8 回复
#2
seidel2007-05-08 19:22
这是一个非线性的数据拟合问题,你可以找本非线性分析方面的书来看看!
#3
尘埃1222007-05-09 12:20

你可以按以下的步骤试着运行

(1)先在matlab中建好m 文件

function F=sima(beta,xdata)

F=beta(1).*xdata+beta(2).*exp(beta(3).*xdata);


(2)在主窗口或新建运行文件
clear
clc

xdata=[0 3 6 9 12 15 18 21 24 27 30];
ydata=[0 30 75 128 183 236 285 340 392 445 499];

xdata=xdata';
ydata=ydata';
beta0=[0.1 0.1 0.1];
beta=lsqcurvefit(@sima,beta0,xdata,ydata);
y_fit=sima(beta,xdata);

r=corrcoef(ydata,y_fit);
r2=r(1,2).^2;


得出三参数结果为【15.031 1.21 0.126】
R2为0.9982,还是比较高的

(3)程序中主要是利用了matlab自身的lsqcurvefit函数对给定函数进行参数拟合,有一定的局限性(受初值影响较大),但在这程序中拟合结果还算可以了,呵呵

希望司马能用上

#4
seidel2007-05-11 14:38
我感觉这个问题不用那个复杂的公式吧!他们的规律性还是很强的,为什么用这么一个高度非线性的公式拟合哪!!
#5
尘埃1222007-05-12 12:21

呵呵,楼主的问题也许根据已知数据和模型拟合参数,既然已经提供了,复不复杂关系也许不大了,呵呵

seidel有高见?
#6
seidel2007-05-13 08:59
如果是给定模型了!那就直接应用循环来实现吧!反正没有别的办法啦!!
#7
尘埃1222007-05-13 09:50
呵呵,seidel是高手,有事没事多过来帮忙解答些问题
#8
seidel2007-05-14 18:46
我也学的很浅啊!有什么问题大家一块解决,群众的力量是无穷的。我们要围绕在以斑竹为核心的编程论坛周围,坚持每天上网发贴和大家交流。哈哈
#9
youyouyou12007-08-19 19:26
版主的答案好像仅是一个局部最优,最优结果:

a=17.066666, b=-18.454545445, c=0;



1