十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

微环光频梳仿真:从LLE方程到MATLAB分步傅里叶实现

微环光频梳仿真:从LLE方程到MATLAB分步傅里叶实现 1. 微环光频梳到底在仿真什么先弄懂物理图景1.1 一束单频光为什么能变成一排离散频率很多人第一次接触微环谐振腔光频梳是在Nature或者Science的新闻稿上一束单一的激光打进一个几微米大小的环里出来就变成了一排间隔均匀的“梳齿”每一根齿都是一个独立的频率通道能做到几十甚至上百条。这个现象看起来违背直觉但本质上它和一个极其基础的物理过程相关——Kerr非线性效应以及谐振腔的边界约束。我在这里打个比方。你往一个密闭房间里喊一嗓子墙壁来回反射会形成驻波如果房间里有某种“非线性材料”能把一部分声波能量“搬”到另一个频率上去那么经过足够多来回之后房间里就会充满各种频率的驻波。微环腔也一样光在环内反复绕行原本单一频率的泵浦光通过Kerr非线性不断发生四波混频把能量逐步转移到等间隔的新频率上边带再继续混频最终形成一条覆盖很大带宽的频率梳。需要注意的是这不是一个多模激光器随机发光的场景。微环光频梳最迷人的地方在于所有梳齿在相位上是相互锁定的这意味着时间域上它对应一个极窄的脉冲序列孤子而不是一堆杂乱无章的模式。这种“频域上是梳子、时域上是脉冲”的双重特性让它成为光通信、微波光子学、精密测量等领域的重要工具。1.2 LLE方程是微腔频率梳的第一性原理模型搞清楚物理图景之后问题就来了怎么在电脑里把这排梳齿计算出来你可以用FDTD时域有限差分或者Eigenmode expansion去严格求解Maxwell方程但这对于几微米尺度、需要累积数百圈演化的问题来说计算量是灾难性的。FDTD的内存和时长消耗足以让普通工作站直接崩溃。所以业界几乎全部采用一个平均场模型——Lugiato-Lefever方程也就是大家常说的LLE方程。它的核心思想是把光在环腔内每一圈的演化“摊平”成一个慢变包络场在时间尺度上用一个非线性薛定谔方程来描述。它假设腔内场在每一圈内的变化不大于是把一圈一圈的离散传播过程近似成一个连续的偏微分方程。这个近似在微环损耗较低、单圈非线性相移较小的情况下相当准确而微环光频梳恰好满足这些条件。LLE方程长这样t_R ∂E(t,τ)/∂t [-α/2 - iδ0 iL∑(βk/k!)(i∂/∂τ)^k iγL|E|²] E(t,τ) √θ E_in看起来很唬人对吧但逐项拆开每一项都有明确的物理含义t_R是光绕环一圈的时间左边表示场包络随“慢时间”的演化——注意这个“慢时间”不是真实时间而是圈数的连续化τ是快时间坐标代表腔内脉冲的局部时间位置α是腔内总损耗包含传播损耗和耦合损耗δ0是泵浦激光频率相对谐振模式频率的失谐量βk是各阶色散系数k2就开始对应群速度色散GVD它是决定梳是否能产生的关键γ是Kerr非线性系数与材料三阶非线性有关θ是外腔耦合率E_in是泵浦场幅度最后一项√θ Ein表示泵浦光从直波导耦合进微环。这个方程之所以重要是因为几乎所有的微腔光频梳现象都能从它里面解出来调制不稳定型梳、孤子型梳、混沌态甚至呼吸孤子。MATLAB仿真微环光频梳本质上就是数值求解这个方程。1.3 仿真目标和输出从时域包络到光频梳光谱在动手写代码之前一定要明确你的仿真输出是什么。我见过不少同学跑完了代码看着屏幕上一条彩虹色图发呆不知道自己在看什么。微环光频梳仿真最核心的输出有两个第一腔内光场在等间隔频点上的幅度——就是频率梳的光谱。对慢变场做傅里叶变换取模的平方你会看到一系列等间隔的峰这就是梳齿。齿间距在频率轴上等于自由光谱范围FSR也就是1/t_R。第二腔内光场在时间域上的包络形态。这是判断梳态类型的重要依据如果是平直流加一些小幅纹波可能是调制不稳定态MI态如果是一个或几个孤立的脉冲在时间窗口内周期出现那就是孤子态soliton state。我建议仿真时同时保存时域和频域数据不要只看光谱。因为很多数值问题在频域里看不出来但在时域里一眼就能发现——比如场发散、边界反射、脉冲漂移等。到这里物理模型算是清楚了。接下来才是本文的重头戏——怎么把LLE方程变成一段能在MATLAB里跑起来、结果不发散的代码。2. LLE方程的归一化把“难啃”的物理方程变成MATLAB友好的形式2.1 为什么必须做归一化很多初学者拿到LLE方程第一反应是直接照着公式在MATLAB里写。结果写出来的代码变量量级千差万别场幅度小到10^-3色散项大到10^6泵浦项又只有0.1的级别——数值求解时这些量级差异会让误差吞噬真实物理。所以第一件要做的事情就是归一化。归一化的目的不是装酷而是让方程里每一项都在O(1)量级附近变化这样数值方法的误差可控物理参数的调节也变得直观。2.2 标准的无量纲化过程LLE方程常见的归一化方式是引入无量纲时间变量τ和慢时间t以及无量纲场ψ。具体变换如下ψ E / E_s其中E_s sqrt(α/(2γL))这是一个特征场幅度用来把损耗和非线性项的相对强度归一化。无量纲时间坐标定义为θ τ / t_R即把快时间按绕腔周期归一化这样θ的取值范围就是[0, 1)正好对应环腔一圈的时间。无量纲慢时间取s t / (2t_R/α)即把损耗速率作为时间尺度。经过这一套变换归一化后的LLE方程变成∂ψ/∂s [-(1iδ) i|ψ|² - i d (∂/∂θ)²] ψ f这里的参数含义δ是归一化失谐量δ 2δ0/α表示泵浦频率偏离谐振频率的程度d是归一化色散系数d -β2 L / t_R² × (2/α)注意它的符号和大小直接决定梳能否形成f是归一化泵浦幅度f sqrt(8γL θ/(α³)) × E_in。这套归一化还有一个额外的好处当腔内场稳定后|ψ|²的平均值可以直接反映腔内光功率相对于特征功率的倍数这对判断非线性是否足够强非常方便。2.3 归一化参数和物理参数的换算关系表为了让你在代码里不蒙圈我把最常用到的换算关系整理成一张表。这张表我贴在自己工位上跑仿真的时候经常要翻它。物理量符号归一化对应量常用换算关系慢时间圈数连续化tss t·(α/2t_R)快时间腔内位置τθθ τ/t_R范围[0,1)腔内场E(t,τ)ψ(s,θ)ψ E/sqrt(α/(2γL))失谐量δ0δδ 2δ0/α群速度色散β2dd -2β2L/(α t_R²)泵浦场E_inff Ein·sqrt(8γLθ/α³)输出光谱S(ω) |FFT(ψ)|²提示d的符号取决于β2的符号。反常色散β2 0时d 0这是形成孤子梳的前提。正常色散β2 0时d 0一般只能产生其他类型的梳态或者根本不产生梳。仿真前先算清楚你的d是正还是负。3. 分步傅里叶法求解LLE代码级全流程实现3.1 为什么选分步傅里叶法LLE方程在数学上是一个带周期边界的非线性偏微分方程但它没有通用的解析解只能数值求解。数值方法有两大类有限差分法和分步傅里叶法Split-Step Fourier Method, SSFT。我强烈建议用后者。分步傅里叶法的核心逻辑是把方程里的线性算符色散项和非线性算符Kerr项分开处理。在一个足够小的步长Δs内先让光场在频域中走完色散部分再回到时域中走完非线性部分。因为色散项在频域里是简单的乘法非线性项在时域里也只是乘一个相位因子每一步的计算量都很小而且可以借助MATLAB的FFT函数获得极高的速度。相比之下有限差分法虽然也能解但时间步长受稳定性条件限制往往需要非常细的网格跑一次完整演化可能要几个小时。分步傅里叶法在同样精度下速度能快一到两个数量级。3.2 第一步初始化网格与泵浦场求解的第一步是定义计算网格。这里的关键不是随便取个点数而是要理解网格背后的物理分辨率。假设微环的FSR对应的时间窗口是t_R那么频率域的梳齿间隔就是1/t_R。如果你希望仿真的光谱范围覆盖例如10 THz的带宽而FSR是100 GHz那么需要仿真的梳齿总数约100根对应的频率网格点数需要至少2到3倍的余量——建议取N2^124096点起步复杂场景直接上2^14或2^15。点数越多频率覆盖越宽但计算耗时也线性增长。初始化代码如下% 基础参数物理量 c 2.99792458e8; % 光速 m/s n_g 1.95; % 群折射率 R 10e-6; % 环半径 L 2*pi*R; % 环周长 t_R n_g * L / c; % 绕环时间对应FSR % 腔损耗和耦合参数 alpha_total 0.02; % 总损耗主要是耦合损耗 theta alpha_total; % 假设临界耦合耦合率 损耗 % 色散参数以D2形式给出单位为Hz D2_hz 200e6; % 二阶色散200MHz均值在1.55um附近常见 beta2 -D2_hz * t_R^3 / (2*pi); % 换算为β2 % 非线性参数 n2 2.6e-20; % 硅的Kerr非线性折射率 A_eff 1.5e-12; % 有效模场面积 m^2 gamma 2*pi*n2/(1.55e-6*A_eff); % 非线性系数 1/(W*m) % 泵浦功率输入波导中的光功率 P_in 0.1; % 100 mW E_in sqrt(P_in); % 归一化参数 alpha_norm alpha_total; Es sqrt(alpha_total / (2*gamma*L)); f E_in * sqrt(8*gamma*L*theta / alpha_total^3); delta 0.5; % 归一化失谐先给一个小失谐 d_coef -2*beta2*L/(alpha_total*t_R^2); % 计算网格 N 4096; theta_grid linspace(-0.5, 0.5 - 1/N, N); % 归一化时间坐标[-0.5, 0.5) omega 2*pi*fftshift((0:N-1) - floor(N/2)); % 角频率网格这里有几个细节值得说明。第一theta_grid的取值范围为[-0.5, 0.5)对应归一化的一圈这比[0,1)更好因为方便观察脉冲是否位于窗口中心。第二omega必须用fftshift处理确保频率为0分量在数组中间否则色散项的乘法会出错。第三d_coef的符号我在上面已经提到要确保β2 0也就是反常色散。3.3 第二步线性色散项频域传播色散项在频域的传播形式是ψ̃(ω, sΔs) ψ̃(ω, s) · exp(i·d·ω²·Δs/2)注意我这里用的是归一化方程里的- i d (∂/∂θ)²这一项。对θ做傅里叶变换后∂/∂θ变成iω所以这一项变成- i d · (iω)² -i d · (-ω²) i d ω²。因此在频域的传播因子是exp(i d ω² Δs/2)。在MATLAB中这一操作本质上是对FFT后的频谱乘上一个复数相位因子。这个操作非常快也是整个算法高效的核心。3.4 第三步非线性项时域求解非线性项|ψ|²ψ在时域中表现为自相位调制SPM在传播距离Δs内光场乘上一个与强度相关的相位因子ψ(θ, sΔs) ψ(θ, s) · exp(i·|ψ|²·Δs)这个操作的物理意义是光强越大的地方感受到的非线性折射率变化越大所以相位改变越多。这也是为什么可以形成频率梳——强光部分不断产生新的频率分量。非线性项和色散项需要交替执行。标准的对称分步傅里叶法是先走半个步长的色散再走一个步长的非线性再走半个步长的色散。这种对称形式可以减小误差使其与步长的平方成正比。我建议直接用对称形式虽然代码多几行但精度提升明显。3.5 完整MATLAB核心代码把以上所有环节拼接起来一个最基础的微环光频梳LLE方程求解器如下% 分步傅里叶法求解归一化LLE方程 % psi的演化 psi 0.1 * ones(N, 1); % 初始场给一个接近0的小常数 psi psi 0.001 * (randn(N,1) 1i*randn(N,1)); % 加一点噪声作为扰动种子 % 参数 s_total 500; % 总演化时间归一化 N_steps 20000; % 总步数 ds s_total / N_steps; % 色散相位算子 phase_disp exp(1i * d_coef * omega.^2 * ds/2); % 对称分步中的半步色散 % 演化主循环 for step 1:N_steps % 第一个半步色散频域 psi ifft(fft(psi) .* phase_disp); % 非线性步时域 psi psi .* exp(1i * abs(psi).^2 * ds); % 第二个半步色散频域 psi ifft(fft(psi) .* phase_disp); % 损耗、失谐和泵浦项这是LLE与普通NLS不同的地方 psi psi (-psi *(1 1i*delta) f) * ds; end % 提取光谱 spectrum abs(fftshift(fft(psi), 1)).^2; freq_axis fftshift(omega) / (2*pi); % 归一化频率以FSR为单位这段代码虽然是“能跑”的版本但你直接拿去做研究还远远不够。最核心的问题是它用了显式Euler法处理损耗和泵浦项这会限制时间步长——如果d_coef很大或者f很大步长稍微大一点就会数值发散。实际项目里我会把损耗-泵浦项的一部分做隐式处理或者使用高阶Runge-Kutta法在慢时间方向积分这里就不展开了。3.6 边界条件、时间窗口与频率分辨率在调试仿真代码时最容易出问题的是“时间窗口”和“边界条件”的组合。LLE方程要求周期边界条件也就是说θ-0.5和θ0.5处是同一个物理位置。这在FFT中天然满足——FFT本身假设输入序列是周期的。但有一个陷阱如果光脉冲在窗口内演化时“漂移”到了边界它会在另一边折返出现看起来像多了一个脉冲。这是因为傅里叶网格的周期性与真实微环的周期性不完全一致——真实环的周期性由腔长决定而仿真窗口的周期性由FFT决定。如果仿真的频谱范围没有完全覆盖所有参与混频的频率分量那么能量就会在边界处“卷绕”回来形成假脉冲。解决方法是确保时间窗口足够宽给脉冲留足空间定期检查场在边界处是否有非零值如果有增大N或调整色散参数如果发现脉冲漂移多半是因为傅里叶频谱不对称检查d_coef和失谐δ的符号是否正确。注意如果仿真过程中|ψ|²的最大值突然暴涨到初始值的几十倍并继续增长那几乎可以断定是数值不稳定而不是物理上的锁模现象。先把步长缩小一半重跑如果暴涨消失说明是步长问题如果依然暴涨再检查频谱是否因为窗口太小而产生了混叠。4. 参数扫描与结果判读从热噪声到梳状光谱的演进4.1 固定参数仿真失谐量与泵浦功率的相互作用把基础代码跑通之后下一步就是做参数扫描。微环光频梳的最核心控制旋钮就两个泵浦失谐δ和泵浦功率f。对初学者我建议先固定f扫描δ观察光谱形态的变化。以一个典型参数组为例d_coef -2归一化色散负号代表反常色散这里取负值因为归一化公式里已经带负号f 4。当δ从0逐渐增加到0.5时你能观察到δ很小时接近0腔内场基本在低强度状态光谱只有泵浦线没有明显的梳齿。这是因为失谐太小时腔内光强不足非线性相移无法突破损耗δ增大到0.3附近开始出现一对对称边带随后边带数量迅速增多光谱逐渐铺展成梳状。这是调制不稳定型梳的特征δ继续增大到0.8左右光谱可能出现混沌状态——梳齿形状不规则时域场快速起伏。这时候的梳“看起来”很宽但实际每个齿的相位噪声很大不适合精密测量用途δ超过某个阈值后系统可能进入孤子态。一条平稳的、低噪声的频率梳从混沌中跳变出来——这就是大家追求的孤子微梳。这个扫描过程本身就是一篇很好的学术论文素材。我在实际实验中观察过多次这种“从无到有、从混沌到孤子”的过渡仿真能完美复现这一过程这是LLE方程价值的最大体现。4.2 时域波形与频域光谱对应观察我强烈建议你在仿真时把每一阶段的时域波形和频域光谱并排画出来看。具体操作是每隔一定步数保存一次psi然后同时输出两个子图figure; subplot(2,1,1); plot(theta_grid, abs(psi).^2); xlabel(归一化时间); ylabel(腔内功率); title(时域包络); subplot(2,1,2); plot(fftshift(omega)/(2*pi), 10*log10(spectrum 1e-12)); xlabel(归一化频率 (FSR单位)); ylabel(光谱强度 (dB)); xlim([-50, 50]);时域中你会看到三种典型形态平底高噪声样式对应调制不稳定态单一的窄峰对应孤子态多峰快速振荡对应高阶孤子或者呼吸子。这三种形态的频域光谱差异也很明显MI态的光谱包络比较平坦但齿根很高孤子态的光谱则是明显的sinc^2包络因为时间域是sech形脉冲呼吸子的光谱包络随时间周期性波动。这些特征不需要额外分析工具肉眼就能判断。这对你做实验前的参数预筛选非常有帮助——先用仿真找到孤子态存在的参数窗口再去实验室调谐激光器能省下一大半时间。4.3 调制不稳定性与孤子两种典型梳态很多人一听说“微环光频梳”就以为只有孤子态才算成功。这是个误解。调制不稳定性MI本身也是一个正常的工作状态。在MI态下微环的输出光谱宽度可以超过孤子态但相位相干性较差。早期微腔光频梳演示就是从MI态开始的。如果你做光通信MI态可能也行但如果你做光学频率基准或者双光梳光谱那必须用孤子态。区分两者最简单的方法就是看光谱包络孤子光谱有着非常光滑的sech²形包络在高频端平滑下降MI光谱则更像一段“带噪声的平顶”高频端不再光滑。另一个判据是时域孤子是明显的孤立脉冲MI是平坦背景上的微扰。在仿真中从MI态过渡到孤子态通常需要把δ从0附近逐渐增大到一个特定值并且在某个临界点会观察到腔内场的“跳变”——强度突然降低但脉冲变得极其稳定。这个跳变就是热效应等实验中常说的“step”现象在方程层面的体现。仿真中没有热效应所以这个跳变更纯粹、更容易研究。4.4 如何判定仿真是否收敛仿真最怕的不是不收敛而是看起来收敛了但结果完全错误。我总结了几个常用的收敛判据腔内总能量随时间趋于恒定。积分|ψ|²在整个时间窗口上的值如果它在后20%的演化时间内波动小于0.1%可以认为达到了稳态。光谱形状不再变化。每1000步计算一次光谱比较两次之间的差异。如果差异接近机器精度说明稳态达成。没有明显的数值振荡。检查时域波形如果边缘处出现高频锯齿状结构说明FFT解析不足。有一点必须提醒有些情况下系统处于呼吸子状态它永远不会完全稳定总能量会周期性波动。这时候“收敛”的定义不再是定值而是周期。要注意区分呼吸子周期和数值不稳定的振荡周期——呼吸子周期通常较长且稳定数值振荡则通常是高频、幅度不受限制的。5. 仿真中的物理陷阱与数值坑实测排查记录5.1 傅里叶网格的“时间窗口”设错了会怎样我在做微环光频梳仿真初期踩过一个很深的坑时间窗口设置得不够宽导致梳齿间距在频谱上完全错了。具体情况是我用FSR100GHz的微环参数但取值N1024把时间窗口做成了10个t_R的长度。结果FFT的频率分辨率变成了10GHz输出光谱看起来像是“一条条连续谱”而不是离散梳齿。这个问题本质上是傅里叶变换的离散化没有和物理的周期边界对齐。正确的做法是时间窗口必须正好等于t_R的整数倍。对于单环微腔就取N个点均匀分布在[-t_R/2, t_R/2)区间这样FFT得到的频率间隔恰好等于FSR每个频点对应一个谐振模式。多取几个t_R当然也可以但每个模式会对应多个频点谱看起来更“连续”反而干扰判断。5.2 泵浦项归一化的单位困惑泵浦项f的换算是整个归一化过程中最容易出错的环节。我见过不止一个同学在这里把尺寸搞错了一百倍导致仿真结果和实验对不上。f E_in × sqrt(8γLθ/α³) 这个公式中E_in sqrt(P_in)P_in是输入波导的泵浦功率单位W。假设γ100/W/mL6.28e-5mθα0.02P_in0.1W那么f sqrt(0.1) × sqrt(8×100×6.28e-5×0.02 / 0.02³) 0.316 × sqrt(502.4) ≈ 0.316 × 22.4 ≈ 7.08这是一个偏大的泵浦幅度足以激发强非线性效应。如果算出来f只有0.1那基本说明泵浦功率太小或损耗太大腔内无法累积足够光强形成频率梳。实际上当你把归一化恢复为物理单位时腔内平均功率≈ (α/(2γL)) × mean(|ψ|²)。用这个公式检查你的仿真结果是否在物理合理范围内比如几百毫瓦级就能验证归一化是否正确。5.3 分步傅里叶法的步长与非线性相位误差分步傅里叶法的误差来源主要是非线性相位在每个步长内的累积。每个步长内非线性相移是|ψ|²Δs如果这个值太大比如超过0.1 rad那么非线性项和色散项之间的耦合就会被粗略地“切割”开导致频谱出现伪峰。我一般按下述方式估算安全步长先跑一遍记录每步的最大|ψ|²然后确保|ψ|²_max × Δs 0.05。如果这个条件不满足就减小Δs或增大步数。这个条件在孤子态下尤其重要因为孤子的峰值强度远高于平均强度非线性相位累积非常快。如果一个孤子脉冲的峰值|ψ|²50步长Δs1e-3那单步相位就是0.05 rad勉强可以接受但如果你用Δs1e-2单步相位达到0.5 rad那就基本告别仿真正确性了。5.4 “梳齿”看起来太密/太疏时怎么处理仿真结果出来后经常会遇到两个审美问题一种情况是梳齿太密看起来像一片连续的发光带。这通常是因为物理上的FSR太大、频率覆盖不够或者是显示范围太窄。把光谱的横轴范围拓宽只关注中心几十个梳齿问题就解决了。另一种情况是梳齿太疏只有孤零零几根。这通常意味着非线性太弱还没能把能量扩展到更多频率分量。解决办法是增大泵浦功率f或者降低损耗α。如果你不想动物理参数可以把失谐δ调大一点通常腔内场强会上升非线性也会增强。提示修改物理参数时不要只改一个。比如增大泵浦功率会改变失谐的有效值因为Kerr效应会移动腔的谐振频率所以实际仿真中可以同时把δ适当调大一些才能观察到孤子态。这也是很多文献里“功率和失谐一起扫描”的原因。6. 从简单到进阶下一步可以往哪个方向扩展等到基础LLE仿真跑通你手里已经有一个能产生频率梳的“虚拟微环”了。这时候可以做的事情很多我按难度递增列几个方向供你参考。第一增加高阶色散项。前面的方程只保留了一阶色散项d(∂/∂θ)²而实际微环的三阶色散会导致孤子自频移效应改变梳光谱的对称性。加入三阶色散以后你会发现梳光谱不再左右对称——这是因为高阶色散打破了时间反演对称性这在色散波生成的物理中非常关键。第二模拟双泵浦或者辅助光注入。很多实验中使用两束不同波长的泵浦光来操控微梳状态。这在LLE框架里只需要把泵浦项改成两个频率分量的叠加但要注意在快时间坐标里它们会表现为一个随时间变化的拍频项。这个扩展对理解微梳的调谐机制很有帮助。第三耦合多个微环。如果两个微环通过波导耦合在一起它们各自的频率梳会互相注入锁定产生更复杂的频谱响应。这种系统难度会跳一个数量级但物理上也非常有趣。第四把仿真结果与实验数据对比。如果你有实验平台可以把实验光谱和仿真光谱放在一起拟合。通过调节仿真中的损耗、色散、失谐参数让仿真光谱和实验光谱的梳齿包络重合这本身是一种很好的参数标定方法。我自己的经验是仿真的最核心价值不是“取代实验”而是“指导实验”。在实验室里盲目扫描激光器频率和功率几个小时都未必能看到一次孤子步进但先用仿真扫一遍参数空间找到孤子态的大致区域再到实验室里微调效率高得多。最后一个实用小技巧在做参数扫描时不要用单个固定循环跑完所有参数而是用MATLAB的parfor并行。一个典型的网格扫描比如δ取200个点、f取50个点单次仿真2分钟串行算要一周用parfor在多核机器上可能一个晚上就出结果。跑之前用一次仿真验证单点结果正确再扩展扫描范围这是避免浪费算力的最好方式。关于微环光频梳的MATLAB仿真就聊到这里。如果你正在做相关课题建议先跑通基础版LLE再逐步加入高阶效应和辅助光注入。这算是被很多人验证过的稳妥路径。每次仿真出图后记得把物理单位换算放在旁边避免忘记当前参数对应的真实实验条件。
返回列表