jifulei 发表于 2010-9-21 17:08:59

weibull拟合及参数估计

请教大家:
手头有一组风速分布数据,如下所示:
time = [ 1   2   3   4   5   6   7   8   9   101112];
conc = ;
请教各位,采用二参数weibull函数
modelFun =@(p,x) (p(2)/p(1)) .* (x ./ p(1)).^(p(2)-1) .* exp(-(x ./ p(1)).^p(2));
如何在matlab中拟合出数据的weibull分布曲线,及求出该分布的两个参数?

rocwoods 发表于 2010-9-21 17:09:00

本帖最后由 rocwoods 于 2010-9-21 17:51 编辑

time = [ 1   2   3   4   5   6   7   8   9   101112];
conc = ;
OptSet = fitoptions('Method','NonlinearLeastSquares',...
'Lower',,...
'Upper',,...
'Startpoint',);
MyWeibullModel = fit(time',conc','weibull',OptSet );
plot(MyWeibullModel ,'m')
hold on
plot(time,conc,'*')
p1 = MyWeibullModel.a
p2 = MyWeibullModel.b
p1 =
    0.0647

p2 =
    1.9258

jifulei 发表于 2010-9-21 19:20:20

我得到的曲线跟版主基本一样,但两个参数却差异很大
       p1 =       4.145
       p2 =       1.926

qibbxxt 发表于 2010-9-21 21:02:09


clear;clc;close all
x=1:12;
conc = ;
modelFun = @(p,x) (p(2)/p(1)) .* (x ./ p(1)).^(p(2)-1) .* exp(-(x ./ p(1)).^p(2));
nlintool(x,conc,modelFun,)
>> beta
beta =
    4.1455    1.9261
>> betaci
betaci =
    3.8277    4.4632
    1.7036    2.1486
>> rmse
rmse =
    0.0168
>> ypred
ypred =
    0.0653
>> ypredci
ypredci =
    0.0480    0.0827
>> residuals
residuals =
    0.0323
   -0.0360
    0.0086
    0.0153
    0.0094
   -0.0012
   -0.0076
   -0.0046
   -0.0001
   -0.0005
   -0.0006
   -0.0005

lengyunfeng 发表于 2010-9-21 22:38:42

插个脚,点评一下哈。roc的思路是对的,但可能是没看清的原因,他求出来的是标准weibull概率密度函数里的a和b,而非lz所给的函数modelFun。lz可以把他的3~7句改为:OptSet = fitoptions('Method','smooth');
ftype=fittype('(p2/p1)*(x/p1)^(p2-1)*exp(-1*(x/p1)^p2)');
MyWeibullModel = fit(time',conc',ftype,OptSet );就能得到你在3#的东西了。
而q的办法则相对麻烦些,直接用拟合工具nlintool,然后在出来的窗口中选export选项,把拟合参数导出来,就可以直接看p了(在这里p对应于beta);不过他这办法有其它好处,就是可以直接在GUI里进行拟合后的估算,找出95%置信区间内的解并给出误差值。
综上,各有千秋~~果然是大侠啊

qibbxxt 发表于 2010-9-22 21:29:04

恩,很多matlab拟合的函数最终调用的都是fit函数来完成的,所以用fit函数不但简洁而且高效;
另外,lz不是求的标准的weibull分布的参数估计和曲线拟合,我开始用wblfit也拟合不出来这个参数,而且这个函数要求输入必须为正数。
页: [1]
查看完整版本: weibull拟合及参数估计