我有一个问题,用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)是弹丸射程的概率密度图。
的均匀分布图是正确的,但我似乎有一个错误的概率密度函数。我想知道我能不能得到一些帮助来修理它。
附注:抱歉,背景信息太长了,谢谢!
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)]);发布于 2014-10-13 03:36:56
你的ymax是100*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)]);https://stackoverflow.com/questions/26332089
复制相似问题