You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:30:58