lgx517 发表于 2007-4-2 22:40

如何运用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)
奇怪的是得出的结果要么是虚数要么就不收敛。

恳请各位高手帮帮忙,指点一下,不胜感激。

xjzuo 发表于 2007-4-3 09:18

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 编辑 ]

dingd 发表于 2007-4-3 09:59

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

lgx517 发表于 2007-4-3 11:20

谢谢大家的帮助。
再次感谢xjzuo的帮助。:@)
页: [1]
查看完整版本: 如何运用nlinfit拟合下列式子