威布尔分布拟合/威布尔参数估计Matlab函数

背景

关于威布尔分布的介绍和最小二乘法拟合方法已在此博客介绍,此处不再赘述。

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函数为,需添加在同路径为Weibull.m

%Project: 威布尔函数
%Author: Jace
%Data: 2022/3/4
function [F]=Weibull(s,bata,eta)
F=1-exp(-(s/eta)^bata);
end

效果

威布尔分布拟合/威布尔参数估计Matlab函数_第1张图片
蓝色点为样本点,红色曲线为拟合威布尔分布曲线

你可能感兴趣的:(算法,Matlab,matlab,算法)