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: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
我得到的曲线跟版主基本一样,但两个参数却差异很大
p1 = 4.145
p2 = 1.926
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
插个脚,点评一下哈。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%置信区间内的解并给出误差值。
综上,各有千秋~~果然是大侠啊 恩,很多matlab拟合的函数最终调用的都是fit函数来完成的,所以用fit函数不但简洁而且高效;
另外,lz不是求的标准的weibull分布的参数估计和曲线拟合,我开始用wblfit也拟合不出来这个参数,而且这个函数要求输入必须为正数。
页:
[1]