<think>
我们首先需要明确玻色-爱因斯坦凝聚(BEC)中定容热容 \(C_V\) 与约化温度 \(T/T_c\) 的关系。根据统计物理,对于理想玻色气体,热容的表达式可以通过总能量的温度导数得到。具体步骤如下:
1. 首先,临界温度 \(T_c\) 由下式给出:
$$ T_c = \frac{2\pi \hbar^2}{m k_B} \left( \frac{n}{\zeta(3/2)} \right)^{2/3} $$
其中 \(n\) 是粒子数密度,\(\zeta\) 是Riemann zeta函数,\(\zeta(3/2)\approx 2.612\)。
2. 在温度 \(T\) 时,系统的总能量 \(E\) 为:
$$ E = \frac{V}{4\pi^2} \left( \frac{2m}{\hbar^2} \right)^{3/2} k_B T^{5/2} \int_0^\infty \frac{\epsilon^{3/2}}{e^{\epsilon} (e^{\mu/(k_B T)} - 1)} d\epsilon $$
但注意,在凝聚态以下(\(T<T_c\)),化学势 \(\mu=0\);在凝聚态以上(\(T>T_c\)),化学势 \(\mu<0\) 且由粒子数守恒条件确定。
3. 定容热容 \(C_V = \left( \frac{\partial E}{\partial T} \right)_V\)。
4. 为了得到 \(C_V\) 随 \(T/T_c\) 的变化,我们需要计算不同温度下的能量,然后数值求导,或者直接使用解析表达式(如果可能)。但解析表达式较为复杂,通常采用数值积分和数值微分。
由于直接求导解析式困难,我们通常采用数值方法:
- 对于 \(T<T_c\),化学势 \(\mu=0\),能量表达式可简化为:
$$ E = \frac{V}{4\pi^2} \left( \frac{2m}{\hbar^2} \right)^{3/2} (k_B T)^{5/2} \Gamma(5/2) \zeta(5/2) $$
其中 \(\Gamma(5/2)=3\sqrt{\pi}/4\),\(\zeta(5/2)\) 是Riemann zeta函数。所以:
$$ E \propto T^{5/2} $$
因此,热容 \(C_V \propto T^{3/2}\)。
- 对于 \(T>T_c\),化学势 \(\mu\) 是负的,且由下式确定:
$$ n = \frac{(m k_B T)^{3/2}}{\sqrt{2} \pi^2 \hbar^3} \int_0^\infty \frac{\sqrt{\epsilon} d\epsilon}{e^{\epsilon-\mu/(k_B T)} - 1} = \frac{(m k_B T)^{3/2}}{\sqrt{2} \pi^2 \hbar^3} g_{3/2}(e^{\mu/(k_B T)}) $$
其中 \(g_{3/2}(z)\) 是玻色-爱因斯坦函数。然后能量为:
$$ E = \frac{3}{2} k_B T V \frac{(m k_B T)^{3/2}}{\sqrt{2} \pi^2 \hbar^3} g_{5/2}(e^{\mu/(k_B T)}) $$
然后,热容需要通过数值微分得到。
因此,计算步骤为:
1. 定义温度范围,通常从0.1*Tc到2*Tc。
2. 对于每个温度T,计算对应的化学势(当T>Tc时,需要求解方程得到化学势;当T<=Tc时,化学势为0)。
3. 计算每个温度下的能量E。
4. 通过能量对温度的数值导数计算Cv。
由于数值求解化学势需要解方程,我们可以使用MATLAB的数值求解函数(如fzero)。同时,玻色函数 \(g_s(z)\) 可以用数值积分或内置函数(如果存在)计算。MATLAB没有内置的玻色函数,所以我们需要自己实现积分。
注意:在实际计算中,为了简化,我们通常使用无量纲化。令 \(t = T/T_c\),并定义无量纲能量,然后计算热容。
下面是一个可能的MATLAB代码框架:
```matlab
% 计算理想玻色气体的定容热容 Cv 随 T/Tc 的变化
clear; clc;
% 物理常数(这里我们使用无量纲化,因此很多常数会被约掉)
% 我们关注的是 Cv/Nk_B 与 T/Tc 的关系
% 步骤1:定义玻色函数 g_{s}(z) = \frac{1}{\Gamma(s)} \int_0^\infty \frac{x^{s-1}}{e^x/z - 1} dx
% 或者用级数表示:g_s(z) = \sum_{k=1}^\infty \frac{z^k}{k^s}
% 对于s>1,级数收敛。对于z接近1时,级数收敛慢,需要很多项。
% 实现玻色函数 g_s(z) (s>1)
g = @(s,z) sum(z.^(1:10000) ./ (1:10000).^s, 2); % 对k从1到10000求和,注意z在[0,1]内
% 但是,当z接近1时,级数收敛慢,我们可以使用另一种方法(数值积分):
% g_s(z) = (1/gamma(s)) * integral(@(x) x.^(s-1)./(exp(x)./z -1), 0, inf)
% 但是当z接近1时,被积函数在0附近有奇点,所以我们可以使用级数展开或变换。
% 这里我们使用级数展开,因为z<1(在凝聚温度以上,z=exp(mu/kT)<1),而对于T<Tc,z=1,但此时我们不需要这个函数。
% 实际上,对于T<=Tc,我们有显式表达式,所以只需要T>Tc时使用g_s(z)且z<1。
% 我们使用级数求和,取足够多的项(如10000项)对于大多数情况足够,除非z非常接近1。
% 为了避免z太接近1时级数收敛慢,我们可以使用一个函数,当z<0.99时用级数,当z>=0.99时使用渐进展开?或者直接使用数值积分。
% 这里为了简单,我们使用足够多的项(100000项)并假设z不会太接近1(在Tc附近,z接近1,收敛很慢,需要更多项或更好的方法)
% 另一种方法是使用MATLAB的符号工具箱或内置函数,但这里我们避免使用。
% 我们重新定义玻色函数,使用级数求和(对于s=3/2,5/2等)
% 注意:当z接近1时,g_s(z)趋近于zeta(s)
% 步骤2:定义临界温度下的条件:在T=Tc时,z=1,有 n = (mk_B Tc)^{3/2} / (sqrt(2)*pi^2*hbar^3) * zeta(3/2)
% 所以,无量纲化后,我们可以用这个关系消去常数。
% 我们定义无量纲化的变量:
% 令 t = T/Tc
% 对于 t <=1 (T<=Tc): 化学势mu=0,所以z=1
% 能量 E = (V (2m)^{3/2} (k_B T)^{5/2}) / (4 pi^2 hbar^3) * g_{5/2}(1) * Gamma(5/2)
% 而 Gamma(5/2)=3*sqrt(pi)/4
% 所以 E = const * T^{5/2} * g_{5/2}(1)
% 总粒子数 N = const * T^{3/2} * g_{3/2}(1) (在T=Tc时,g_{3/2}(1)=zeta(3/2))
% 因此,E/N = [g_{5/2}(1)/g_{3/2}(1)] * (T/Tc)^{3/2} * (T/Tc) * (k_B T_c) ? 需要仔细无量纲化。
% 实际上,通常我们计算每粒子的热容 Cv/Nk_B。
% 我们定义:
% 在温度t时,每粒子的能量 u = E/(N k_B T_c)
% 则 Cv/Nk_B = du/dt (注意:这里t=T/Tc,所以dE/dT = dE/dt * dt/dT = dE/dt * (1/Tc)
% 而 Cv = dE/dT = dE/dt * (1/Tc) 所以每粒子的热容为 Cv/N = (1/N) * dE/dt * (1/Tc) = (k_B) * (1/(N k_B T_c)) * dE/dt * k_B T_c
% 实际上,我们令 u = E/(N k_B T_c) 是无量纲能量,则:
% Cv/(N k_B) = du/dt (因为 dE/dT = d(u * N k_B T_c)/d(t * T_c) = N k_B * du/dt)
% 因此,我们需要计算 u(t) 然后求导。
% 对于 t<=1:
% E = const * T^{5/2} * g_{5/2}(1)
% N = const * T_c^{3/2} * g_{3/2}(1) (注意在Tc时,N由临界条件确定)
% const = V (2m)^{3/2} k_B^{5/2} / (4 pi^2 hbar^3) * Gamma(5/2) 但注意,在粒子数表达式中,有:
% N = const' * T^{3/2} * g_{3/2}(z) 其中 const' = V (2m)^{3/2} k_B^{3/2} / (4 pi^2 hbar^3) * Gamma(3/2)
% 且 Gamma(3/2)=sqrt(pi)/2
% 通过比较,可以消去常数。实际上,我们有:
% E = (Gamma(5/2)/Gamma(3/2)) * (g_{5/2}(1)/g_{3/2}(1)) * (T^{5/2}/T_c^{3/2}) * (N k_B T_c) * (g_{3/2}(1)/g_{3/2}(1))?
% 更直接地,在T<=Tc时,凝聚在基态的粒子数N0不为0,但激发态的粒子数N_ex = N (T/T_c)^{3/2},激发态的能量E = (3/2) k_B T N_ex * (g_{5/2}(1)/g_{3/2}(1))
% 因为对于理想玻色气体,激发态的能量为:E = (3/2) k_B T \frac{V}{\lambda^3} g_{5/2}(1) 其中λ是热波长,λ= h/sqrt(2pi m k_B T)
% 且 N_ex = \frac{V}{\lambda^3} g_{3/2}(1)
% 所以 E = (3/2) k_B T N_ex \frac{g_{5/2}(1)}{g_{3/2}(1)}
% 而 N_ex = N (T/T_c)^{3/2} 因为在T=Tc时,N_ex=N,即 g_{3/2}(1)=n \lambda_c^3,而λ_c是Tc时的热波长,所以有N_ex/N = (T/T_c)^{3/2}
% 因此,E = (3/2) k_B T N (T/T_c)^{3/2} \frac{\zeta(5/2)}{\zeta(3/2)}
% 所以,每粒子能量(无量纲)u = E/(N k_B T_c) = (3/2) (T/T_c)^{5/2} \frac{\zeta(5/2)}{\zeta(3/2)}
% 对于 T>Tc,没有凝聚,总粒子数N = N_ex,但化学势不为0(z<1),所以:
% N_ex = N = \frac{V}{\lambda^3} g_{3/2}(z) => g_{3/2}(z) = \frac{N \lambda^3}{V}
% 而 λ^3 = (h^2/(2pi m k_B T))^{3/2}
% 在T=Tc时,有 g_{3/2}(1) = \zeta(3/2) = \frac{N \lambda_c^3}{V} 其中λ_c对应T_c。
% 所以: g_{3/2}(z) = \zeta(3/2) \cdot (T_c/T)^{3/2}
% 即: g_{3/2}(z) = \zeta(3/2) / t^{3/2} 其中 t=T/Tc>1
% 同时,能量 E = \frac{3}{2} k_B T \frac{V}{\lambda^3} g_{5/2}(z)
% 所以 u = E/(N k_B T_c) = [ \frac{3}{2} k_B T \frac{V}{\lambda^3} g_{5/2}(z) ] / (N k_B T_c)
% = \frac{3}{2} \frac{T}{T_c} \frac{V}{N} \frac{1}{\lambda^3} g_{5/2}(z)
% 将λ用λ_c表示: λ = λ_c * (T_c/T)^{1/2}
% => λ^3 = λ_c^3 (T_c/T)^{3/2}
% 所以:
% u = \frac{3}{2} t \frac{V}{N} \frac{1}{\lambda_c^3} (T/T_c)^{3/2} g_{5/2}(z)
% = \frac{3}{2} t \frac{V}{N} \frac{1}{\lambda_c^3} t^{3/2} g_{5/2}(z) [t^{3/2} = (T/T_c)^{3/2}]
% 而由临界点:V/(N λ_c^3) = 1/(n λ_c^3) = 1/g_{3/2}(1) = 1/\zeta(3/2)
% 所以 u = \frac{3}{2} t \cdot t^{3/2} \frac{g_{5/2}(z)}{\zeta(3/2)} = \frac{3}{2} \frac{t^{5/2}}{\zeta(3/2)} g_{5/2}(z)
% 其中z由方程 g_{3/2}(z) = \zeta(3/2) / t^{3/2} 确定。
% 因此,总结:
% t = T/Tc
% 对于 t<=1:
% u(t) = \frac{3}{2} \frac{\zeta(5/2)}{\zeta(3/2)} t^{5/2}
% 对于 t>1:
% g_{3/2}(z) = \zeta(3/2) / t^{3/2} --> 需要解这个方程得到z(t)
% u(t) = \frac{3}{2} \frac{t^{5/2}}{\zeta(3/2)} g_{5/2}(z)
% 那么,热容 Cv/(N k_B) = du/dt
% 步骤3:计算
% 对于t<=1,可以直接求导:
% du/dt = \frac{3}{2} \frac{\zeta(5/2)}{\zeta(3/2)} * (5/2) t^{3/2} = \frac{15}{4} \frac{\zeta(5/2)}{\zeta(3/2)} t^{3/2}
% 对于t>1,需要计算z(t),然后计算g_{5/2}(z),然后对t求导(由于z也是t的函数,所以需要链式法则,或者数值导数)
% 由于解析求导复杂,我们采用数值导数:
% Cv(t) = [u(t+dt)-u(t)]/dt (或者使用中心差分)
% 步骤4:编程
% (a) 设置t的范围,比如从0.01到2.5
% (b) 对于t<=1,直接计算u(t)和Cv(t)(也可以求导公式)
% (c) 对于t>1,对于每个t,求解z:g_{3/2}(z) = zeta(3/2)/t^{3/2}
% 然后计算u(t) = (3/2) * t^{5/2} * g_{5/2}(z) / zeta(3/2)
% (d) 然后对u(t)进行数值求导得到Cv(t)
% 注意:在t=1处,左右导数应该相等(相变点,热容连续,但导数不连续)
% 实现玻色函数 g_s(z) (使用级数求和,注意z在0到1之间)
% 由于在t>1时,z<1,且当t接近1+时,z接近1-,级数收敛慢,所以需要很多项。
% 我们预先计算zeta(3/2)和zeta(5/2)
zeta32 = zeta(3/2); % 如果MATLAB没有内置,可以自己算:zeta(3/2)=2.6123753486854883
zeta52 = zeta(5/2); % 1.3414872572509175
% 如果MATLAB没有zeta函数,我们可以使用:
% zeta32 = sum(1./(1:1000000).^(3/2));
% zeta52 = sum(1./(1:1000000).^(5/2));
% 或者使用我们上面写的g函数,当z=1时,g_s(1)就是zeta(s)
% 定义玻色函数 g_s(z) for vector z (0<z<1) and s=3/2,5/2
% 使用足够多的项(例如1000000项)以在z接近1时获得较好精度
function y = g_s(s, z)
maxk = 1000000;
k = 1:maxk;
y = zeros(size(z));
for i=1:length(z)
y(i) = sum( (z(i).^k) ./ (k.^s) );
end
end
% 但是,当z接近1时,上述级数收敛到zeta(s),但收敛速度慢。对于z离1较远时,可以取少一些项。
% 另一种方法是使用积分,但积分在z接近1时也有困难。
% 为了提高速度,我们可以使用向量化,但循环也可以接受,因为z的个数不会太多(我们取100个温度点)。
% 步骤:
% 1. 定义t数组
t_min = 0.01;
t_max = 2.5;
Nt = 200;
t = linspace(t_min, t_max, Nt);
% 2. 分配数组 u 和 cv
u = zeros(size(t));
cv = zeros(size(t));
% 3. 对于t<=1的部分
ind1 = t<=1;
t1 = t(ind1);
u1 = (3/2) * (zeta52/zeta32) * t1.^(5/2);
u(ind1) = u1;
% 4. 对于t>1的部分
ind2 = t>1;
t2 = t(ind2);
% 预先计算每个t2对应的z
z = zeros(size(t2));
% 方程:g_{3/2}(z) = zeta32 ./ (t2.^(3/2))
options = optimset('TolX',1e-6);
for i = 1:length(t2)
tt = t2(i);
target = zeta32 / (tt^(3/2));
% 由于g_{3/2}(z)是z的单调增函数,且z在(0,1)内,所以解在(0,1)内
% 使用fzero求解
fun = @(z) g_s(3/2, z) - target;
% 初始猜测,当tt接近1时,z接近1,当tt很大时,z接近0。我们可以设置初始猜测为exp(-1/tt)之类的,但这里用0.5作为初始猜测,或者用1-1/tt^2
% 注意:当tt很大时,target很小,所以z也很小,此时g_s(3/2,z)≈z,所以z0≈target
% 当tt接近1时,target接近zeta32,所以z0接近1
% 因此,我们根据target的大小来设置初始值
if target<0.1
z0 = target;
else
z0 = 0.9; % 或者用1-1/tt^2
end
z(i) = fzero(fun, z0, options);
end
% 计算对应的g_{5/2}(z)
g52 = g_s(5/2, z);
% 计算u(t2)
u2 = (3/2) * (t2.^(5/2)) .* g52 / zeta32;
u(ind2) = u2;
% 5. 计算热容cv = du/dt
% 使用中心差分(除端点外)
dt = t(2)-t(1);
% 第一个点:向前差分
cv(1) = (u(2)-u(1))/dt;
% 中间点:中心差分
for i=2:length(t)-1
cv(i) = (u(i+1)-u(i-1))/(2*dt);
end
% 最后一个点:向后差分
cv(end) = (u(end)-u(end-1))/dt;
% 注意:在t=1处,我们使用中心差分,但t=1可能刚好在t1的最后一个点和t2的第一个点之间,我们上面划分的t1和t2在t=1处是分开的,所以u在t=1处是连续的(因为当t=1时,两种表达式都等于(3/2)*(zeta52/zeta32)),但是导数在t=1处是不连续的(这是相变特征),所以数值导数在t=1处可能会有波动,但没关系。
% 6. 画图
figure;
plot(t, cv, 'b-', 'LineWidth', 2);
xlabel('T/T_c');
ylabel('C_v / N k_B');
title('玻色-爱因斯坦凝聚的热容');
grid on;
% 为了比较,我们也可以画出理论曲线:在t<=1时,cv = 15/4 * (zeta52/zeta32) * t.^(3/2)
hold on;
cv_theory_low = (15/4) * (zeta52/zeta32) * t1.^(3/2);
plot(t1, cv_theory_low, 'r--');
% 图例
legend('数值计算', '低温解析');
% 注意:在t>1的部分,我们没有解析表达式,所以只画数值结果。
% 保存数据或显示
% 注意:由于在t>1时,我们使用了数值求解和数值导数,可能会有数值误差,特别是在t接近1时,因为此时z接近1,级数求和需要很多项才能精确。
% 改进:在t>1且t接近1时,可以使用更多项的级数或者使用积分方法精确计算玻色函数。
% 另外,我们也可以使用解析导数公式来避免数值导数的误差,但需要先求dz/dt,然后链式法则,这里不展开。
% 注意:我们定义的g_s函数用了1000000项求和,计算可能较慢,但精度在大多数情况下足够。
% 如果速度有问题,可以考虑使用更高效的方法计算玻色函数。
% 最后,我们输出图像和结果。
```
以上代码框架给出了计算玻色-爱因斯坦凝聚热容的方法。注意,由于在接近$T_c$时,数值计算可能不够精确,需要调整参数(如级数求和的项数)以提高精度。
参考文献:
[^1]: 玻色-爱因斯坦凝聚的相关理论可参考统计物理教材,如Pathria的《Statistical Mechanics》。
§§相关问题§§
1. 如何提高在临界温度附近数值计算的精度?
2. 除了数值微分,还有哪些方法可以计算热容?
3. 实际玻色气体(如有相互作用的)的热容与理想气体有何不同?
</think>
以下是使用MATLAB计算玻色-爱因斯坦凝聚(BEC)定容热容 \(C_V\) 随约化温度 \(T/T_c\) 变化关系的代码实现,基于理想玻色气体的理论模型。代码包含详细注释和物理公式说明。
```matlab
% 玻色-爱因斯坦凝聚定容热容计算
% 计算理想玻色气体的 Cv/NkB 随 T/Tc 的变化
clear; clc;
% 物理常数定义
zeta32 = zeta(3/2); % ζ(3/2) ≈ 2.612
zeta52 = zeta(5/2); % ζ(5/2) ≈ 1.341
kB = 1.380649e-23; % 玻尔兹曼常数 (J/K)
% 温度范围设置 (T/Tc)
t = linspace(0.01, 2.5, 500); % 约化温度 T/Tc
% 预分配数组
u = zeros(size(t)); % 无量纲能量 u = E/(N*kB*Tc)
cv = zeros(size(t)); % 无量纲热容 Cv/(N*kB)
% ====== 计算核心部分 ======
for i = 1:length(t)
if t(i) <= 1
% T <= Tc 区域: 化学势 μ=0
u(i) = (3/2) * (zeta52/zeta32) * t(i)^(5/2);
else
% T > Tc 区域: 需数值求解化学势
target = zeta32 / t(i)^(1.5);
z_guess = min(0.99, 0.9/t(i)); % 初始猜测值
% 求解 g_{3/2}(z) = ζ(3/2)/t^{3/2}
z_sol = fzero(@(z) g_bose(3/2, z) - target, z_guess);
% 计算能量和热容
u(i) = (3/2) * t(i)^(2.5) * g_bose(5/2, z_sol) / zeta32;
end
end
% 数值计算热容 (中心差分法)
dt = t(2) - t(1);
cv(2:end-1) = (u(3:end) - u(1:end-2)) / (2*dt); % 中心差分
cv(1) = (u(2) - u(1)) / dt; % 前向差分
cv(end) = (u(end) - u(end-1)) / dt; % 后向差分
% ====== 可视化结果 ======
figure('Color', 'white', 'Position', [100, 100, 800, 600])
plot(t, cv, 'b-', 'LineWidth', 2.5)
hold on
% 标记相变点
plot([1, 1], [0, 2.5], 'r--', 'LineWidth', 1.5)
text(1.02, 0.1, 'T_c', 'FontSize', 14, 'Color', 'r')
% 理论极限值标记
plot(0, 0, 'ko', 'MarkerSize', 8) % T=0时 Cv=0
plot(1, 1.925, 'ko', 'MarkerSize', 8) % T=Tc时 Cv/NkB≈1.925
% 添加标注
annotation('textarrow', [0.3, 0.4], [0.7, 0.6], 'String','凝聚相','FontSize',12)
annotation('textarrow', [0.7, 0.6], [0.7, 0.6], 'String','正常相','FontSize',12)
% 图形设置
xlabel('$T/T_c$', 'Interpreter', 'latex', 'FontSize', 14)
ylabel('$C_v/Nk_B$', 'Interpreter', 'latex', 'FontSize', 14)
title('玻色-爱因斯坦凝聚定容热容', 'FontSize', 16)
grid on
set(gca, 'FontSize', 12, 'GridLineStyle', '--')
legend('热容曲线', '相变点', '理论极值点', 'Location', 'northwest')
% ====== 玻色函数定义 ======
function g = g_bose(s, z)
% 计算玻色函数 g_s(z) = Σ_{k=1}^∞ z^k / k^s
% 参数: s-阶数, z-逸度 (0 ≤ z ≤ 1)
max_terms = 100000; % 最大迭代项数
g = 0;
tol = 1e-10; % 收敛容差
for k = 1:max_terms
term = z^k / k^s;
g_prev = g;
g = g + term;
% 检查收敛
if abs(g - g_prev) < tol
break;
end
end
end
```
### 物理模型说明
1. **低温区 ($T \leq T_c$)**:
化学势 $\mu = 0$,热容解析表达式:
$$C_v/Nk_B = \frac{15}{4}\frac{\zeta(5/2)}{\zeta(3/2)}\left(\frac{T}{T_c}\right)^{3/2}$$
2. **高温区 ($T > T_c$)**:
需数值求解方程:
$$g_{3/2}(z) = \frac{\zeta(3/2)}{(T/T_c)^{3/2}}$$
其中 $z = e^{\mu/k_BT}$ 为逸度,$g_s(z)$ 是玻色函数:
$$g_s(z) = \sum_{k=1}^{\infty} \frac{z^k}{k^s}$$
3. **热容计算**:
通过数值微分能量函数得到:
$$\frac{C_v}{Nk_B} = \frac{d}{d(T/T_c)}\left[\frac{E}{Nk_BT_c}\right]$$
### 关键特征
1. **相变点 ($T = T_c$)**:
- 热容连续但导数不连续
- 理论极大值 $C_v/(Nk_B) \approx 1.925$
2. **温度依赖**:
- $T \ll T_c$ 时: $C_v \propto T^{3/2}$
- $T \gg T_c$ 时: 趋近经典值 $3/2$
### 结果说明
运行代码将生成热容曲线图,显示:
- 蓝色曲线:$C_v/(Nk_B)$ 随 $T/T_c$ 变化
- 红色虚线:相变温度 $T_c$
- 黑色圆点:理论极值点 $(0,0)$ 和 $(1, 1.925)$

*图:理想玻色气体定容热容随约化温度的变化[^1]*