【问题标题】:Given a uniform distribution of a variable, use a function of random variables to plot the probability density function MATLAB给定一个变量的均匀分布,使用随机变量的函数来绘制概率密度函数 MATLAB
【发布时间】:2014-12-07 13:14:22
【问题描述】:

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

到目前为止,我已经使用物理学中的方程 r = V^2*sin(2*theta)/g 来计算均值和 sigma。 sigmatheta = (pi/2)/sqrt(12) 和 meantheta = pi/2/2 简化方程,r = 100*sin(2*theta)。我知道均匀分布,ftheta(theta) 从 0 到 pi/2 并等于 2/pi, .6366。以下代码作为均匀和概率密度函数绘图的示例。我已经替换了我认为与这个特定问题有关的数字。使用公式 g(meantheta) + sigmatheta^2/2 *(g''(meantheta)),r 的平均值应该是 58.87,但绘图显示为 63.65,所以我已经看到代码中可能存在一些错误或者我对问题的理解。 fr(r) 是弹丸射程的概率密度图。

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

附言抱歉,背景信息太长 谢谢!

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)]);

【问题讨论】:

    标签: matlab statistics probability-density


    【解决方案1】:

    您的ymax100*sin(pi),即0,与ymin 相同。所以你的第二个直方图分箱不正确。我已经解决了这个问题,以及您代码中的其他一些问题。

    但它不起作用的原因是另一个问题。您通过将函数应用于角度的预期来计算距离的预期值。这是不正确的,因为函数不是线性的,所以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)]);
    

    【讨论】:

    • 现在我有一个关于均匀分布图的问题。通常当我在 a 和 b 之间有均匀分布时,fx(x) 将是 1/(b-a),但是当我使用您更正的代码时,均匀分布的图与预期值不匹配。关于原因的任何提示?
    • @azumakazuma 你说得对,我想我已经解决了。
    • 非常感谢您的帮助! :)
    猜你喜欢
    • 1970-01-01
    • 2016-05-25
    • 2020-04-05
    • 2012-11-08
    • 2011-05-03
    • 1970-01-01
    • 2020-09-08
    • 2023-04-03
    • 2015-04-05
    相关资源
    最近更新 更多