请问如何用matlab对一列数据画出对数正态分布曲线,并得到如下图所示的参数

我的数据地址是('工作簿数据.xlsx','sheet2','G2:G106556')... 我的数据地址是('工作簿数据.xlsx','sheet2','G2:G106556') 展开
 我来答
jimtien
2019-05-26 · TA获得超过7653个赞
知道大有可为答主
回答量:2146
采纳率:88%
帮助的人:1100万
展开全部
close all;
clear all;
data = xlsread('工作簿数据.xlsx','sheet2','g2:g106556'); %读入数据
%测试数据 data = lognrnd(8,.7,10000,1);
[y x]=hist(data,200);   %统计频次分布
h=bar(x,y,1);  %画直方图
hold on;

%对数正态分布密度函数
fun=@(p,x) p(1)./x.*exp(-((log(x)-p(2))/p(3)).^2/2);
%A=p(1),mu=p(2),sigma=p(3)

[maxy ind]=max(y); 
%做非线性数据拟合
p=nlinfit(x,y,fun,[maxy*x(ind),log(x(ind)),1]);

%画拟合曲线
x1 = min(x):0.01:max(x);
yfit=fun(p,x1); 
plot(x1,yfit,'r','linewidth',1);

%极大似然处 x=exp(mu-sigma^2);
xmax=exp(p(2)-p(3)^2);
ymax=fun(p,xmax);
plot([xmax xmax],[0 ymax],'g','linewidth',2);

%期望值处 x=exp(mu+sigma^2/2)
xmean=exp(p(2)+p(3)^2/2);
ymean=fun(p,xmean);
plot([xmean xmean],[0 ymean],'c','linewidth',2);

xlim([min(x) max(x)]);
xlabel('BC浓度(ng/m^3)');
ylabel('频数');
legend('统计数据',['对数正态分布:\mu=' num2str(p(2)) ',\sigma=' num2str(p(3))],...
    ['极大概然分布位置:x=' num2str(xmax)],['期望值位置:x=' num2str(xmean)]);
text(xmean+10000,ymean+10,'$ y=\frac{A}{x}e^{-\frac{(lnx-\mu)^2}{2\sigma^2}} $',...
    'interpreter','latex','FontSize',18);
更多追问追答
追问
大神好厉害啊,请问能用matlab对拟合效果进行检验吗
追答
logn_cdf=[data, cdf('logn',data,8,.7)];% 求累计概率
H0:符合指数分布
h= kstest(data,logn_cdf) %缺省alpha=0.05
h=0:不能拒绝H0,
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式