matlab 求exp函数拟合

1/((exp(a(1)+a(2)*x)+16^(-1))) 这是函数
y =

96259
97542
98705
100072
101654
103008
104357
105851
107507
109300
111026
112704
114333
115823
117171
118517
119850
121121
122389
123626
124761
125786
126743
127627
128453
129227
129988
130756
131448
132129
132802
133450
134091
134735
135404

x =

1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
上面是X,Y的值 请大家帮忙写一下matlab代码进行一下数据拟合·· 总是报错不知道为什么

fun=@(a,x) 1./((exp(a(1)+a(2)*x)+16^(-1)));
fita=nlinfit(x,y,fun,[0 1]);

输入的x,y是你要拟合的数据的自变量和因变量
[0 1]是给拟合参数a(1) a(2)的初值,
如果能够给出比较接近结果的初值,拟合收敛比较快
如果初值离实际结果的值很远,有可能使得拟合不收敛,得不到结果

得到的fita(1)和fita(2)就是a(1) a(2)两个参数追问

那个之前的@(a,x)是什么意思啊·· 还有初值的确定怎么来弄· 网上找了找都说没有具体的确定方法

追答

@是函数的句柄
@(a,x) 相当于一个函数有a和x两个输入参数

fun=@(a,x) 1./((exp(a(1)+a(2)*x)+16^(-1)));

相当于定义了一个函数fun(a,x) = 1./((exp(a(1)+a(2)*x)+16^(-1)));

不知道初值,就用[0 1]吧

温馨提示:答案为网友推荐,仅供参考
相似回答