作业帮 > 数学 > 作业

matlab累积分布函数图(cdf)

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/25 08:29:56
matlab累积分布函数图(cdf)
y=rand(1,3000)
ymin=min(y);
ymax=max(y);
x=linspace(ymin,ymax,20);
yy=hist(y,x); %计算各个区间的个数
yy=yy/length(y); %计算各个区间的个数
bar(x,yy) %画出概率密度分布图
s=0 ;
for i=2:length(x)

s=[s,trapz(x([1:i]),yy([1:i]))];
end
figure;
plot(x,s,x,s,'*')
谁能告诉我这个程序是什么意思,为什么最后画出的cdf图,最后的值不是1呢
很感谢你的回答,但是我仿真了一下,最后的值虽然与1相差不大,但是理论上应该严格等于1的吧,我用这种方法仿真了其它曲线,但是最后的值都只有0.9几
你如果把
y=rand(1,3000)
改为
y=rand(1,30000)
同时
x=linspace(ymin,ymax,20);
改为
x=linspace(ymin,ymax,200);
试一下就会发现结果就会变为1
原因是trapz函数是梯形积分公式,而本问题中,各个概率是矩形分布,将矩形变为梯形,肯定会引起误差的
你看一下sum(yy)就会发现,其自身就是1,也就是说yy的值表示的并不是概率密度分布,而是某个区间的百分比yy/区间长度才是概率密度函数
y=rand(1,3000);
ymin=min(y);
ymax=max(y);
x=linspace(ymin,ymax,20);
yy=hist(y,x); %计算各个区间的个数
yy=yy/length(y)/(x(2)-x(1)); %计算各个区间的个数
bar(x,yy) %画出概率密度分布图
s=0 ;
for i=2:length(x)
s=[s,trapz(x([1:i]),yy([1:i]))];
end
figure;
plot(x,s,x,s,'*')