在 MATLAB 中,可以使用 mle
函数来拟合数据到某个特定的概率分布,包括正态分布。“MLE” 是 “Maximum Likelihood Estimation”(最大似然估计)的缩写,这是一种常用的参数估计方法。
下面是如何使用 mle
函数来拟合正态分布参数的示例:
% 假设我们有一组来自正态分布的数据
data = randn(1000, 1);
% 使用 mle 函数拟合正态分布参数
params = mle(data, 'distribution', 'normal');
% params(1) 是估计的均值,params(2) 是估计的标准差
mu_est = params(1);
sigma_est = params(2);
在这个例子中,我们首先生成了一组来自标准正态分布的随机数据(均值为 0,标准差为 1)。然后,我们使用 mle
函数来拟合这些数据到一个正态分布,指定 ‘distribution’ 参数为 ‘normal’。mle
函数返回的结果是一个包含估计的参数的向量。对于正态分布,第一个参数是均值,第二个参数是标准差。
请注意,如果你的数据实际上并不是来自正态分布,那么使用 mle
函数拟合正态分布参数可能会得到不准确的结果。在这种情况下,你可能需要考虑其他的拟合方法或者其他的分布假设。
MATLAB代码:
clc;clear all;close all;warning off;%
data=normrnd(0,1,100,1);
x0=[2,2];% 初值
phat = mle(data,'pdf',@(x,mu,sigma) mypdffun(x,mu,sigma),'start',x0);% 调用mle函数
phat
%% 画概率图
[counts,centers]=hist(data,30);
figure;
bar(centers,counts/sum(counts)); %画出概率密度分布图
xlabel('额度','fontname','宋体');
ylabel('概率','fontname','宋体');
title('分布图','fontname','宋体');
a1=normcdf(sort(data),phat(1),phat(2));
[counts,centers]=hist(data,30);
a0=counts/sum(counts);
g=cumsum(a0);
figure;
plot(centers,g,'b*'); %画出概率密度分布图
hold on;
plot(sort(data),a1,'r');
legend({'样本','拟合'},'fontname','宋体');
xlabel('数值','fontname','宋体');
ylabel('累积概率','fontname','宋体');
title('正态分布累积概率','fontname','宋体');
function y=mypdffun(x,mu,sigma)
% 正态分布
y=1./(sigma*sqrt(2*pi)).*exp((-(x-mu).^2)/(2*sigma^2));% 概率密度函数
程序结果:
phat =
0.0864134176671681 0.942444505587593
>>