给定变量的均匀分布,使用随机变量函数绘制概率密度函数MATLAB

时间:2014-10-13 02:23:58

标签: matlab statistics probability-density

我有一个关于使用 MATLAB 来查找概率密度函数的问题。问题是关于具有重力的大炮射弹的范围, g = 9.8 m / s 和速度, v = sqrt(980)m / s 。角度 theta是0和pi / 2之间的均匀分布的随机变量。我必须使用随机变量的函数和射弹的平均距离来绘制θ的均匀分布和范围fr(r)的概率密度函数。

到目前为止,我已经使用物理方程式, r = V ^ 2 * sin(2 * theta)/ g 来计算平均值和sigma。 sigmatheta =(pi / 2)/ sqrt(12)and meansheta = pi / 2/2简化等式,r = 100 * sin(2 * theta)。我知道均匀分布,ftheta(theta)从0到pi / 2并且等于2 / pi,.6366。给出以下代码作为均匀和概率密度函数绘图的示例。我已经取代了我认为适合这个具体问题的数字。使用公式,g(meanheta)+ sigmatheta ^ 2/2 *(g'(意思是)),r的平均值应该是58.87,但是图表显示63.65,所以我已经看到可能有代码中的一些错误或我对问题的理解。 fr(r)是射弹范围的概率密度图。

均匀分布图正确,但我似乎有概率密度函数的错误。我想知道我是否能得到一些帮助来修复它。

P.S。很抱歉有很长的背景信息 谢谢!

samp_num=1000000;
xmin =0;                    %xmin for uniform distribution, a x is theta
xmax=pi/2;                  %xmax for uniform distribution, b
deltx=xmax-xmin;            %difference between xmax,xmin, pi/2, b-a
x=xmin+((deltx)*rand(1,samp_num));%numbers between 0 and pi/2
y=(100*sin(2.*x));          %g(x)=y=100*sin(2*x) y is range
ymax=(100*sin(2.*xmax));    %g(pi/2), g(b)
ymin=(100*sin(2.*xmin));    %g(0), g(a)
delty=ymax-ymin;            %g(b)-g(a)
mean_x=mean(x);             %ux
std_x=std(x);               %sigmax
mean_y=mean(y);             %uy
std_y=std(y);
bin_sizex=deltx/100;
binsx=[xmin:bin_sizex:xmax];
u=hist(x,binsx);
u1=u/samp_num/bin_sizex;
bin_sizey=delty/100;
binsy=[ymin:bin_sizey:ymax];
v=hist(y,binsy);
v1=v/samp_num/bin_sizey;
sum_v1=sum(v1)*bin_sizey;
subplot(2,1,1)
bar(binsx,u1)
legend(['mean=',num2str(mean_x),'std=',num2str(std_x)]);
subplot(2,1,2)
bar(binsy,v1)
legend(['mean=',num2str(mean_y),' std=',num2str(std_y)]);

1 个答案:

答案 0 :(得分:1)

ymax 100*sin(pi)0ymin,与63.65相同。所以你的第二个直方图拼错了。我已经解决了这个问题以及代码中的其他一些问题。

但它不起作用的原因是另一个问题。您通过将函数应用于角度的预期值来计算距离的预期值。这是不正确的,因为函数不是线性的,因此200/pi=65.66...是(大约)正确的期望值(samp_num=1000000; N=100 xmin=0; %xmin for uniform distribution, a x is theta xmax=pi/2; %xmax for uniform distribution, b deltx=xmax-xmin; %difference between xmax,xmin, pi/2, b-a x=xmin+(deltx)*rand(1,samp_num);%numbers between 0 and pi/2 y=100*sin(2.*x); %g(x)=y=100*sin(2*x) y is range ymax=max(y); %g(pi/2), g(b) ymin=min(y); %g(0), g(a) delty=ymax-ymin; %g(b)-g(a) mean_x=mean(x); %ux std_x=std(x); %sigmax mean_y=mean(y); %uy std_y=std(y); [u,binsx]=hist(x,N); u1=u/samp_num/(deltx/(N)); [v,binsy]=hist(y,N); v1=v/samp_num/(delty/(N)); subplot(2,1,1) bar(binsx,u1) legend(['mean=',num2str(mean_x),'std=',num2str(std_x)]); subplot(2,1,2) bar(binsy,v1) legend(['mean=',num2str(mean_y),' std=',num2str(std_y)]); )。

{{1}}