24小时热门版块排行榜    

查看: 5157  |  回复: 10

匿名

用户注销 (小有名气)

本帖仅楼主可见

» 收录本帖的淘帖专辑推荐

科研工具专辑

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   同方向广播   申请仿真EPI   回复此楼   编辑   查看我的主页
回帖置顶 ( 共有1个 )

匿名

用户注销 (小有名气)

本帖仅楼主可见
7楼2012-01-06 09:03:10
已阅   申请仿真EPI   回复此楼   编辑   查看我的主页
回帖支持 ( 显示支持度最高的前 50 名 )

dbb627

荣誉版主 (著名写手)

[code]
S=0;
N=5e7;
for i=1:N
     p=rand;
     E=3.0*(p<0.15)+1*(0.15<=p&p<0.4)+0.7*(0.4<=p&p<=1);
     r = -20+40*rand;
     a=-pi/2+pi/2*rand;
if r>=35/2
       a1=atan((35/2-r)/45);
       a2=atan((-35/2-r)/(45+35));
       S=E*(a>=a2&&a<=a1)+S;
elseif r>=-35/2 &r<35/2
      a1=atan((35/2-r)/(45+35));
      a2=atan((-35/2-r)/(45+35));
      S=E*(a>=a2&&a<=a1)+S;
else
      a1=atan((35/2-r)/(45+35));
      a2=atan((-35/2-r)/45);
      S=E*(a>=a2&&a<=a1)+S;  
    end
end
   Sa=S/N
[code]
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
5楼2011-12-10 11:01:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lvqing323

木虫 (正式写手)

【答案】应助回帖

★ ★
xiegangmai: 金币+2, 谢谢参与! 2013-04-05 21:17:30
不好意思,修改不了。上面的程序多计了一次数,修改如下:
引用回帖:
% 能谱嘛,应该是几种粒子输运到达的几率值
clc;clear;
N=5e5;R1=20;d=40;R2=35/2;len=35;
count=zeros(1,3);
for i=1:N
    % 抽取发射位置
    rand_pos=rand(1,2);
    Rr=R1*rand_pos(1);
    a=2*pi*rand_pos(2);
    xr=Rr*cos(a);
    yr=Rr*sin(a);
    % 抽取发射粒子方向
    rand_vel=rand(1,2);
    sita=pi*rand_vel(1);
    b=2*pi*rand_vel(2);
    % 粒子到达探测器近平面区域
    L1=d/abs(cos(sita));
    xd1=xr+L1*abs(sin(sita)*cos(b));
    yd1=xr+L1*abs(sin(sita)*sin(b));
    Rd1=sqrt(xd1^2+yd1^2);
    % 粒子到达探测器远平面
    L2=(d+len)/abs(cos(sita));
    xd2=xr+L2*abs(sin(sita)*cos(b));
    yd2=xr+L2*abs(sin(sita)*sin(b));
    Rd2=sqrt(xd2^2+yd2^2);
    % 抽取粒子
    rand_par=rand;
    if rand_par<=0.15
        % 对应3.0MeV粒子抽样机率
        if Rd1<=R2||Rd2<=R2
            if Rd1<=R2&&Rd2<=R2
                continue;
            else
                count(3)=count(3)+1;
            end
        end
    elseif rand_par>0.15&&rand_par<=0.4
        % 对应1.0MeV粒子抽样机率
        if Rd1<=R2||Rd2<=R2
                        if Rd1<=R2&&Rd2<=R2
                            continue;
                        else
                            count(2)=count(2)+1;
                        end
        end
    else
        % 其余粒子0.7MeV能量
        if Rd1<=R2||Rd2<=R2
            if Rd1<=R2&&Rd2<=R2
                continue;
            else
                count(1)=count(1)+1;
            end
        end
    end
end
spec=count./N
EnergyMean=0.7*spec(1)+1.0*spec(2)+3.0*spec(3)

但是仍然不是二楼的结果:
引用回帖:
spec =

    0.0643    0.0272    0.0164


EnergyMean =

    0.1215

缘来如梦,缘去为空。
10楼2013-04-04 19:21:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

王碎碎狼(金币+1): 有帮助 2012-01-06 09:03:58
写了一个,不知道是不是符合你的要求
CODE:
S=0;
N=5e7;
for i=1:N
     p=rand;
     E=3.0*(p<0.15)+1*(0.15<=p&p<0.4)+0.7*(0.4<=p&p<=1);
     r = -20+40*rand;
     a=-pi/2+pi/2*rand;
if r>=35/2
       a1=atan((35/2-r)/45);
       a2=atan((-35/2-r)/(45+35));
       S=E*(a>=a2&&a<=a1)+S;
elseif r>=-35/2 &r<35/2
      a1=atan((35/2-r)/45);
      a2=atan((-35/2-r)/(45+35));
      S=E*(a>=a2&&a<=a1)+S;
else
      a1=atan((35/2-r)/(45+35));
      a2=atan((-35/2-r)/45);
      S=E*(a>=a2&&a<=a1)+S;  
    end
end
  
Sa=S/N

Sa =

    0.1502
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
2楼2011-12-10 10:53:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

引用回帖:
2楼: Originally posted by dbb627 at 2011-12-10 10:53:27:
写了一个,不知道是不是符合你的要求
[code]
S=0;
N=5e7;
for i=1:N
     p=rand;
     E=3.0*(p<0.15)+1*(0.15<=p&p<0.4)+0.7*(0.4<=p&p<=1);
     r = -20+40*rand;
     a= ...

原理图如下


The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
3楼2011-12-10 10:54:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

[quote]2楼: Originally posted by dbb627 at 2011-12-10 10:53:27:
写了一个,不知道是不是符合你的要求
CODE:
S=0;
N=5e7;
for i=1:N
     p=rand;
     E=3.0*(p<0.15)+1*(0.15<=p&p<0.4)+0.7*(0.4<=p&p<=1);
     r = -20+40*rand;
     a= ... [/quote]


有点错误
[code]
S=0;
N=5e7;
for i=1:N
     p=rand;
     E=3.0*(p<0.15)+1*(0.15<=p&p<0.4)+0.7*(0.4<=p&p<=1);
     r = -20+40*rand;
     a=-pi/2+pi/2*rand;
if r>=35/2
       a1=atan((35/2-r)/45);
       a2=atan((-35/2-r)/(45+35));
       S=E*(a>=a2&&a<=a1)+S;
elseif r>=-35/2 &r<35/2
     [color=red] a1=atan((35/2-r)/(45+35));[/color]
      a2=atan((-35/2-r)/(45+35));
      S=E*(a>=a2&&a<=a1)+S;
else
      a1=atan((35/2-r)/(45+35));
      a2=atan((-35/2-r)/45);
      S=E*(a>=a2&&a<=a1)+S;  
    end
end
   Sa=S/N

Sa =

    0.1502
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
4楼2011-12-10 10:58:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

vakikd

铜虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
这个应该不难吧,给一个粒子,
第一步,随机一个初始位置,一个初始方向,
第二步,分别对三种能量的粒子进行分析,即是分别乘以发射系数
第三步,根据第一步的位置和方向,判断能否被探测器所接收,有方向有位置,探测器位置也有了,实际这一步,就是判断粒子在沿轴方向进行45cm距离后,在不在探测器放盘上,看看一个粒子,三种能量被接受多少(三种粒子有概率的,你懂的)
第四步,取大于1000000个粒子,循环
6楼2012-01-06 01:43:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lvqing323

木虫 (正式写手)

【答案】应助回帖

★ ★
xiegangmai: 金币+2, 谢谢参与! 2013-04-05 21:17:16
感觉上面计算的是均值,既然是求能谱,应该是不同粒子到达的几率,我编的程序,和你们的结果对不上,不知道是哪里的问题,请指正:
引用回帖:
% 能谱嘛,应该是几种粒子输运到达的几率值
clc;clear;
N=5e5;R1=20;d=40;R2=35/2;len=35;
count=zeros(1,3);
for i=1:N
    % 抽取发射位置
    rand_pos=rand(1,2);
    Rr=R1*rand_pos(1);
    a=2*pi*rand_pos(2);
    xr=Rr*cos(a);
    yr=Rr*sin(a);
    % 抽取发射粒子方向
    rand_vel=rand(1,2);
    sita=pi*rand_vel(1);
    b=2*pi*rand_vel(2);
    % 粒子到达探测器近平面区域
    L1=d/abs(cos(sita));
    xd1=xr+L1*abs(sin(sita)*cos(b));
    yd1=xr+L1*abs(sin(sita)*sin(b));
    Rd1=sqrt(xd1^2+yd1^2);
    % 粒子到达探测器远平面
    L2=(d+len)/abs(cos(sita));
    xd2=xr+L2*abs(sin(sita)*cos(b));
    yd2=xr+L2*abs(sin(sita)*sin(b));
    Rd2=sqrt(xd2^2+yd2^2);
    % 抽取粒子
    rand_par=rand;
    if rand_par<=0.15
        % 对应3.0MeV粒子抽样机率
        if Rd1<=R2||Rd2<=R2
            count(3)=count(3)+1;
        end
    elseif rand_par>0.15&&rand_par<=0.4
        % 对应1.0MeV粒子抽样机率
        if Rd1<=R2||Rd2<=R2
            count(2)=count(2)+1;
        end
    else
        % 其余粒子0.7MeV能量
        if Rd1<=R2||Rd2<=R2
            count(1)=count(1)+1;
        end
    end
end
spec=count./N;
EnergyMean=0.7*spec(1)+1.0*spec(2)+3.0*spec(3)

缘来如梦,缘去为空。
8楼2013-04-04 19:03:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lvqing323

木虫 (正式写手)

【答案】应助回帖


王碎碎狼(xiegangmai代发): 金币+1, 谢谢参与! 2013-04-05 21:17:22
上面的SPEC好为三种粒子到达的几率,至于EnergyMean值,应该和 前面的程序输出的Sa相一致,但结果不一样,不知道怎么回事。请高手指正哟。
程序仅供参考,欢迎批评指正。
输出:
引用回帖:
spec =

    0.1455    0.0606    0.0362


EnergyMean =

    0.2709

缘来如梦,缘去为空。
9楼2013-04-04 19:05:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 王碎碎狼 的主题更新
信息提示
请填处理意见