如何运用nlinfit拟合下列式子
现有一组数据:x 0.9 0.85 0.8 0.77 0.7
y 2.5e32.4e41.43e51.96e54.57e5
和拟合公式:
y=^(1/c);
我尝试用非线性最小二次拟合函数nlinfit来拟合:
建立model.m文件:
function yy=model(be,x)
d=be(1);
k=be(2);
c=be(3);
yy=(d*(1-q/k))^(1/c);
在输入窗口:
x=;
y=;
be=;%根据经验,d k c 应该是这三个数左右
befit=nlinfit(x,y,'model',be)
奇怪的是得出的结果要么是虚数要么就不收敛。
恳请各位高手帮帮忙,指点一下,不胜感激。 1."yy=(d*(1-q/k))^(1/c);" q 改为 x;
2. "点"运算要注意;
3. 改用lsqcurvefit拟合.
你自己先试试,若还有问题,再来讨论.
%%%----------------------------------------------%%%
拟合的结果为:
befit = 77.4116 1.1318 1.2950
(由于你给的数据不同,我用的是后一组)
%%%----------------------------------------------%%%
[ 本帖最后由 xjzuo 于 2007-4-3 09:20 编辑 ] Matlab的拟合功能不是其强项,对初始值依赖严重,容易陷入局部最优,建议用1stOpt,拟合领域,应是目前最好的(不需猜初值)。以此题为例,如果不考虑参数的物理意义,仅从数学角度出发,1stOpt计算的结果如下:
lgx517 的第一组数据:
优化算法: 麦夸特法(Levenberg-Marquardt) + 通用全局优化法
计算结束原因: 达到收敛判断标准
均方差(RMSE): 9930.86115200453
残差平方和(SSE): 493110016.101964
相关系数(R): 0.998148272369382
相关系数之平方(R^2): 0.996299973633982
决定系数(DC): 0.996292266505493
卡方系数(Chi-Square): 5850.02034591196
F统计(F-Statistic): 269.706547539484
参数 最佳估算
---------- -------------
d 5211.6613684955
k 0.900002755332214
c 0.541384051977391
lgx517 的第二组数据:
优化算法: 麦夸特法(Levenberg-Marquardt) + 通用全局优化法
计算结束原因: 达到收敛判断标准
均方差(RMSE): 0.177834761522278
残差平方和(SSE): 0.158126012028427
相关系数(R): 0.995399670562352
相关系数之平方(R^2): 0.99082050415564
决定系数(DC): 0.990819975816768
卡方系数(Chi-Square): 0.00700819166869625
F统计(F-Statistic): 108.932174909359
参数 最佳估算
---------- -------------
d 942205.465851518
k 0.91784570636359
c 4.77854124264628
如果d值有范围限制,可以加上约束条件;反之,最优解的d值与楼主希望的就相差很大了:lol 谢谢大家的帮助。
再次感谢xjzuo的帮助。:@)
页:
[1]