栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python——链式反应

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python——链式反应

1、题目

      放射性物质的链式反应是一个随机过程,借助M-C方法模拟研究链式反应,计算其的倍增系数k以及临界质量M。

2、算法及分析

     设轴块为长方体a×a×b,发生裂变的轴核位于轴块内随机点(x0,y0,z0)处。随机点坐标的值域为

      1.给定轴块质量M、轴块边长之比s=ab,旧裂变个数N0,密度为1。则确定:

      2.产生九个0~1的随机数

      3.旧裂变位置

      4.旧裂变放出的两个中子的方向

      5.中子的飞行距离

      6.可能发生新裂变的位置

      7.检查上述位置是否在轴块内,如果在N的值加1

      8.重复2~7,执行N0,计算k

3、程序 

#链式反应
import numpy as np
import random as rd
import math as ma
from matplotlib import pyplot as plt
from scipy import signal
def f(m,s1,N0):
    N=0
    a=(m*s1)**(1/3);b=(m*(s1**(-2)))**(1/3)
    for p in range(N0):
        r=[]
        for i in range(9):
            r.append(rd.random())
        x0=a*(r[0]-0.5);y0=a*(r[1]-0.5);z0=b*(r[2]-0.5)
        dr1=2*ma.pi*r[3];theta1=ma.acos(2*r[4]-1);dr2=2*ma.pi*r[5];theta2=ma.acos(2*r[6]-1)
        d1=r[7];d2=r[8]
        x1=x0+d1*ma.sin(theta1)*ma.cos(dr1)
        y1=y0+d1*ma.sin(theta1)*ma.cos(dr1)
        z1=z0+d1*ma.cos(theta1)
        x2=x0+d2*ma.sin(theta2)*ma.cos(dr2)
        y2=y0+d2*ma.sin(theta2)*ma.cos(dr2)
        z2=z0+d2*ma.cos(theta2)
        if -0.5*a<=x1<=0.5*a and -0.5*b<=y1<=0.5*b and -0.5*a<=z1<=0.5*a:
            N=N+1
        if -0.5*a<=x2<=0.5*a and -0.5*b<=y2<=0.5*b and -0.5*a<=z2<=0.5*a:
            N=N+1
    k=N/N0
    return k
m=[];s1=[];c1=[];p=50;K=50
for jo in range(1,p):
    for ji in range(1,K):
        m.append(jo*0.1)
        s1.append(ji*0.1)
        t1=m[ji-1+(jo-1)*(p-1)];t2=s1[ji-1]
        c1.append(f(t1,t2,10**4))
m=np.array([m])
m=m.reshape(-1,p-1)
s1=np.array([s1])
s1=s1.reshape(-1,p-1)
c1=np.array([c1])
c1=c1.reshape(-1,p-1)
df=0
if type(len(c1)/2)!=type(1):
    df=len(c1)-4
if type(len(c1)/2)==type(1):
    df=len(c1)-3
c1=signal.savgol_filter(c1,df,4)
d3=plt.axes(projection='3d')
v1=np.ones(c1.shape)
d3.plot_surface(m,s1,v1,cmap='rainbow')
d3.plot_surface(m,s1,c1,cmap='rainbow')
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
d3.set_zlabel('倍增系数k')
d3.set_xlabel('质量M/kg')
d3.set_ylabel('轴边长之比s')
d3.set_title('链式反应(经过4阶光滑处理)')
plt.show()	
#平衡态
import random as rd
from matplotlib import pyplot as plt
def f(M):
    t1=[];N=100000;B=0
    for i in range(N):
        t1.append(1)
    for j in range(M):
        r=rd.random()
        k=int(r*N)
        t1[k]=-t1[k]
        B=B-t1[k]
    F=B/N
    return F
x1=[];x2=[]
for op in range(1,100):
    x1.append(f(op*10**4))
    x2.append(op*10**4)
plt.plot(x2,x1,c='k',label='N=100000')
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.xlabel('时间t(s)')
plt.ylabel('粒子数比n/N')
plt.title('平衡态')
plt.legend()
plt.show()

4、计算结果 

FIG1. 链式反应

迭代次数K数K

FIG2. 气体平衡态

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001757.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号