如何在while循环两次迭代后累加R_scat与R_i得到单一值?
解决方案
要实现两次迭代中所有R_scat值的总和,以及两次R_i的累加,只需在循环前初始化累加变量,每次迭代时更新这些变量即可,具体修改如下:
修改后的代码
# Libraries import numpy as np from scipy.integrate import odeint # Two counter propagating beams in x-axis laser_x = np.linspace(0, 100, 100) laser_negx= np.linspace(0, -100, 100) # Constant parameters m_Rb = 1.443*10**-25 #mass of rubidium 87 k_b = 1.38*10**-23 hbar = 1.05*10**-34 Rabi = 46.567*10**6 #Rabi frequency L = 38.116*10**6 #spontaneous decay rate # Changable paramaters #delta_omega = -20*10**-6 #delta_omega = np.linspace(-20*10**6, 0, 15) #delta_omega = np.array([-20*10**6, -15*10**6, -10*10**6, -5*10**6]) #difference in the laser frequency and the atomic resonance frequency lmbda = 700*10**-9 #wavelength of laser light k = (2*np.pi)/lmbda #wavevector of laser light V = 1.25*10**-4 #volume of MOT space length = 5*10**-2 #length of MOT Bohr = 9.274*10**-24 B = 5*10**-4 # Maxwell Boltzmann distribution variables T = 300 v = np.linspace(0, 10, 5) # Number of particles emitted T_oven = 300 #oven temperature P = 10**(4.312-(4040/T_oven)) #vapour pressure for liquid phase (use 4.857 for solid phase) A = 5*10**-4 #area of the oven aperture n = P/(k_b*T_oven) #atomic number density I_oven = ((n*A)/4) * (2/(np.pi)**0.5) * ((2*k_b*T_oven)/m_Rb)**0.5 #print("The flux of atoms from the oven is", format(I_oven, '.1E')) # Finding the rate of capture and population for the excited and ground states to find the scattering force i = 0 delta_omega = np.array([-20*10**6, -10*10**6]) # 初始化累加变量 total_all_R_scat = 0 # 存储所有R_scat元素的总和 total_R_i = 0 # 存储两次R_i的累加和 while i<len(delta_omega): delta = delta_omega[i] + (k*v) R_scat = L/2 * (Rabi**2/2)/(delta**2+(Rabi**2/2)+(L**2/4)) R_i = np.sum(R_scat) print(R_scat) print(R_i) # 更新累加值 total_all_R_scat += np.sum(R_scat) # 等价于 total_all_R_scat += R_i total_R_i += R_i i = i+1 # 输出最终结果 print("所有R_scat值的总和:", total_all_R_scat) print("两次R_i的累加和:", total_R_i)
运行结果说明
运行修改后的代码,除了会输出每次迭代的R_scat和R_i外,还会输出最终的累加结果:
[11184874.83348512 14217317.42150675 9999470.28332243 5605001.76872253 3272710.81864173] 44279375.125678554 [13353256.50318438 12896933.7374322 7756401.89830628 4365821.90749169 2646088.0800265 ] 41018502.126441054 所有R_scat值的总和: 85297877.25211961 两次R_i的累加和: 85297877.25211961
可以看到,两个最终结果数值一致,因为R_i本身就是单次迭代中R_scat所有元素的和,所以两次R_i的累加自然等于所有R_scat元素的总和。
内容的提问来源于stack exchange,提问作者Rainydays123
相关产品推荐
相关产品推荐

