首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定变量的均匀分布,用随机变量函数绘制概率密度函数MATLAB。

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

Stack Overflow用户
提问于 2014-10-13 02:23:58
回答 1查看 1.1K关注 0票数 0

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

到目前为止,我已经用物理方程,r = V^2*sin(2*theta)/g来计算平均值和西格玛。sigmatheta = (pi/2)/sqrt(12)和meantheta = pi/2/2简化方程,r=100*sin(2*θ)。我知道均匀分布,ftheta(θ)从0到pi/2,等于2/pi,.6366。文中给出了一个均匀概率密度函数绘图的程序。我已经替换了我认为适合这个具体问题的数字。用公式g(meantheta) + sigmatheta^2/2 *(g‘(平均θ)),r的平均值应该是58.87,但图上显示的是63.65,所以我已经看到,在代码或我对这个问题的理解中可能有一些错误。fr(r)是弹丸射程的概率密度图。

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

附注:抱歉,背景信息太长了,谢谢!

代码语言:javascript
复制
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)]);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-13 03:36:56

你的ymax100*sin(pi),它是0,和ymin一样。所以你的第二个直方图不正确。我已经修复了这个问题,以及您代码中的其他一些内容。

但它不起作用的原因是另一个问题。您正在通过将您的函数应用到期望的角度来计算距离的期望值。这是不正确的,因为函数不是线性的,所以63.65是(大约)正确的期望值(即200/pi=65.66...)。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26332089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档