背景
关于威布尔分布的介绍和最小二乘法拟合方法已在此博客介绍,此处不再赘述。
Matlab代码
使用方法为 [威布尔参数beta,威布尔参数eta]=Weibullfit(样本数组s,样本个数n)
%Project: 威布尔分布拟合/威布尔参数估计函数
%Author: Jace
%Data: 2022/3/4
%====================原理====================
%s为威布尔分布的自变量,F(s)为威布尔分布的因变量:
%F(s)=1-exp(-(s/eta)^beta)
%将威布尔分布化为线性,假设
%x=log(s)
%y=log(log(1/1-F(s)))
%将s按大小顺序排列后,得
%F(s)=i/n+0.1
%n为样本总数
%====================函数====================
function [beta,eta]=Weibullfit(s,n)
%初始化
x_Sum=0;
y_Sum=0;
xy_Sum=0;
xx_Sum=0;
%求平均值和累计和
for i=1:n%求样本累积和
x_Sum=x_Sum+log(s(i));
y_Sum=y_Sum+log(log(1/(1-(i/(n+0.1)))));
xy_Sum=xy_Sum+log(s(i))*log(log(1/(1-(i/(n+0.1)))));
xx_Sum=xx_Sum+log(s(i))^2;
end
%估计分布参数
beta=(n*xy_Sum-x_Sum*y_Sum)/(n*xx_Sum-(x_Sum^2));
eta=exp((x_Sum/n)-(y_Sum/n)/beta);
end
测试用例
%Project: 威布尔分布拟合测试函数
%Author: Jace
%Data: 2022/3/4
clear all;
close all;
N=100;%样本总数
%--------威布尔分布参数----------
eta=1;
beta=3;
X=wblrnd(eta,beta,N,1);%生成威布尔分布样本
Xs=sort(X);%排序
%---------初始化----------
F=zeros(1,41);
Q=zeros(1,N);
%---------拟合估计参数----------
% [WG]=wblfit(X,N);%matlab自带最大似然估计法拟合,估计参数
[Wbeta,Weta]=Weibullfit(Xs,N);
%---------生成横纵坐标以用于绘制分布图像----------
for t=1:N
Q(t)=t/(N+1);
end
for k=1:41
i=(k-1)/10;
F(k)=Weibull(i,Wbeta,Weta);
end
%---------绘图----------
i=1:N;
j=1:40;
figure
hold on; box on;
plot(Xs(i),Q(i),'b.');
plot(j/10,F(j),'-r.');
legend('Sample','Weibull');
其中Weibull函数为
%Project: 威布尔函数
%Author: Jace
%Data: 2022/3/4
function [F]=Weibull(s,bata,eta)
F=1-exp(-(s/eta)^bata);
end
效果
蓝色点为样本点,红色曲线为拟合威布尔分布曲线
|