【发布时间】:2019-06-13 00:16:11
【问题描述】:
我正在尝试创建一个 while 循环,该循环使用 Bethe-Bloch 方程计算重带电粒子的停止能力和射程。我在设置循环以在循环迭代时保存每个值时遇到问题。
我的想法是,我有一个方程停止功率 (-dEdx),当给定初始能量值时,它会输出一个值,表示在 dx 上损失了多少能量。
在这里的示例代码中,初始能量 = 250 (MeV),我正在尝试计算每个 dx 的新能量。这应该看起来像 E = 250、249.99、249.96 等 我不是 100% 确定循环是否有任何其他问题,但我主要无法弄清楚如何保持 E 的每个单独值,以便我可以绘制能量在总距离 x 上的变化。
该公式似乎只为 E 吐出 1 个值,并且没有填充所有其他列。
任何帮助将不胜感激!
clear
clc
c = 2.998e10;
pm = 938.272; % proton mass
em = 0.510991; % electron mass
re = 2.818e-13; % classical electron radius
z = 1; % charge of proton (+)
na = 6.022e23; % avagadros number
rho = 1;
dx = 0.01;
x = 0:dx:350; % 350mm = 35cm
n = na.*10./18.*rho;
E = x*0;
E(1) = 250;
while E > 0
gam = E./pm + 1;
beta = sqrt(gam.^2-1)./gam;
dEdx = (4.*pi.*n.*z^2.*em.*re.^2)./beta.*(log(2.*em.*c.^2.*beta.^2./(75.*(1-beta.^2)))-beta.^2);
dE = -dEdx.*dx;
E(x(E)) = E(x(E)) + dE;
end
在每次迭代中保留 gam,beta,dEdx,dE,E 的所有值可能很有用。例如 E = [250, 249.99, 249.96, ..., 0]
提前致谢!
【问题讨论】:
标签: matlab while-loop