matlab 如何在频数统计图中添加对数正态分布拟合曲线
来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/07/28 12:00:06
matlab 如何在频数统计图中添加对数正态分布拟合曲线
一列Excel数据,导入后首先做出频数统计图,怎样才能在不改变这个图任何地点的基础上添加对数正态分布曲线,最后做到这种效果.求完整程序过程,
![](http://img.wesiedu.com/upload/a/5c/a5c581ccfa527c4188cecbb1b41e3a15.jpg)
![](http://img.wesiedu.com/upload/1/41/1410eb516a5f845a44ea72fd768cec58.jpg)
一列Excel数据,导入后首先做出频数统计图,怎样才能在不改变这个图任何地点的基础上添加对数正态分布曲线,最后做到这种效果.求完整程序过程,
![](http://img.wesiedu.com/upload/a/5c/a5c581ccfa527c4188cecbb1b41e3a15.jpg)
![](http://img.wesiedu.com/upload/1/41/1410eb516a5f845a44ea72fd768cec58.jpg)
![matlab 如何在频数统计图中添加对数正态分布拟合曲线](/uploads/image/z/15552987-51-7.jpg?t=matlab+%E5%A6%82%E4%BD%95%E5%9C%A8%E9%A2%91%E6%95%B0%E7%BB%9F%E8%AE%A1%E5%9B%BE%E4%B8%AD%E6%B7%BB%E5%8A%A0%E5%AF%B9%E6%95%B0%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83%E6%8B%9F%E5%90%88%E6%9B%B2%E7%BA%BF)
fun=@(p,x) p(1)./x.*exp(-((log(x)-p(2))/p(3)).^2/2);%对数正态分布密度函数
x=(0:0.02:6)*1e4;
y=fun([3e5,8.3,0.6],x)+rand(size(x)).*exp(-(x/2e4).^2)*20;
%原来你的图可能是用hist(data,n)画出来的
%就是将data数据分n个区间统计,画柱状图
%这里要保留hist的数据
%原来的语句要返回x y值
%[y x]=hist(data,n);
%这里因为没有数据所以用上边两句模拟x,y数据
bar(x,y,1);hold on;%根据x,y数据画柱状图
[maxy ind]=max(y);
p=nlinfit(x,y,fun,[maxy*x(ind),log(x(ind)),1]);%拟合
%p(1)~和幅度有关 p(2)~mu p(3)~sigma
yfit=fun(p,x); %计算拟合曲线
plot(x,yfit,'r','linewidth',2);
xmax=exp(p(2)-p(3)^2);%计算分布极大分布处和值 x=exp(mu-sigma^2);
ymax=fun(p,xmax);
plot([xmax xmax],[0 ymax],'g','linewidth',2);
xmean=exp(p(2)+p(3)^2/2);%计算期望值 x=exp(mu+sigma^2/2)
ymean=fun(p,xmean);
plot([xmean xmean],[0 ymean],'c','linewidth',2);
hold off;
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);
![](http://img.wesiedu.com/upload/3/04/304a938bc74ec5a1e8e7cba0c04b2a86.jpg)
x=(0:0.02:6)*1e4;
y=fun([3e5,8.3,0.6],x)+rand(size(x)).*exp(-(x/2e4).^2)*20;
%原来你的图可能是用hist(data,n)画出来的
%就是将data数据分n个区间统计,画柱状图
%这里要保留hist的数据
%原来的语句要返回x y值
%[y x]=hist(data,n);
%这里因为没有数据所以用上边两句模拟x,y数据
bar(x,y,1);hold on;%根据x,y数据画柱状图
[maxy ind]=max(y);
p=nlinfit(x,y,fun,[maxy*x(ind),log(x(ind)),1]);%拟合
%p(1)~和幅度有关 p(2)~mu p(3)~sigma
yfit=fun(p,x); %计算拟合曲线
plot(x,yfit,'r','linewidth',2);
xmax=exp(p(2)-p(3)^2);%计算分布极大分布处和值 x=exp(mu-sigma^2);
ymax=fun(p,xmax);
plot([xmax xmax],[0 ymax],'g','linewidth',2);
xmean=exp(p(2)+p(3)^2/2);%计算期望值 x=exp(mu+sigma^2/2)
ymean=fun(p,xmean);
plot([xmean xmean],[0 ymean],'c','linewidth',2);
hold off;
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);
![](http://img.wesiedu.com/upload/3/04/304a938bc74ec5a1e8e7cba0c04b2a86.jpg)