用Matlab绘制普朗克曲线并寻找峰值点

张开发
2026/5/30 4:38:57 15 分钟阅读
用Matlab绘制普朗克曲线并寻找峰值点
matlab绘制普朗克曲线含峰值点波长和温度范围可调。 便于直观理解普朗克公式。最近在研究物理光学相关的内容普朗克公式一直是个很重要的理论基础。为了能更直观地理解它我决定用Matlab来绘制普朗克曲线并且让波长和温度范围都可以自由调节顺便把峰值点也标出来。普朗克公式简介普朗克公式描述了黑体辐射能量密度随波长和温度的分布公式为matlab绘制普朗克曲线含峰值点波长和温度范围可调。 便于直观理解普朗克公式。\[ B(\lambda, T) \frac{2hc^2}{\lambda^5} \frac{1}{e^{\frac{hc}{\lambda kT}} - 1} \]其中 \( B(\lambda, T) \) 是光谱辐射亮度\( \lambda \) 是波长\( T \) 是绝对温度\( h \) 是普朗克常数 \( (6.626 \times 10^{-34} Js) \)\( c \) 是真空中的光速 \( (2.998 \times 10^{8} m/s) \)\( k \) 是玻尔兹曼常数 \( (1.381 \times 10^{-23} J/K) \)。Matlab 代码实现% 定义常数 h 6.626e-34; % 普朗克常数 c 2.998e8; % 光速 k 1.381e-23; % 玻尔兹曼常数 % 设置波长和温度范围 lambda_min 1e-9; % 最小波长单位米 lambda_max 1000e-9; % 最大波长单位米 lambda linspace(lambda_min, lambda_max, 1000); % 在最小和最大波长间生成1000个点 T_min 100; % 最低温度单位K T_max 1000; % 最高温度单位K T linspace(T_min, T_max, 5); % 在最低和最高温度间生成5个温度值 figure; hold on; for i 1:length(T) % 根据普朗克公式计算光谱辐射亮度 B (2 * h * c^2)./ (lambda.^5).* (1./ (exp((h * c)./ (lambda * k * T(i))) - 1)); % 找到峰值点 [peak_value, peak_index] max(B); peak_wavelength lambda(peak_index); % 绘制曲线 plot(lambda * 1e9, B, DisplayName, [T , num2str(T(i)), K]); % 标记峰值点 scatter(peak_wavelength * 1e9, peak_value, ro, DisplayName, [Peak at , num2str(peak_wavelength * 1e9, 3),nm, T , num2str(T(i)), K]); end xlabel(Wavelength (\lambda, nm)); ylabel(Spectral Radiance (W/(m^2·sr·m))); title(Planck Curves with Peak Points); legend; hold off;代码分析常数定义首先定义了普朗克常数h、光速c和玻尔兹曼常数k这些常数在普朗克公式中是固定不变的。波长和温度范围设置设置了波长的最小值lambdamin和最大值lambdamax然后使用linspace函数在这个范围内生成1000个均匀分布的点作为后续计算的波长值。同样地设置了温度的最小值Tmin和最大值Tmax并生成5个温度值。循环计算与绘图通过for循环遍历每个温度值。在每次循环中根据普朗克公式计算该温度下不同波长对应的光谱辐射亮度B。这里使用了点乘. *和点除. /等数组运算因为lambda是一个数组要对每个波长值进行计算。寻找峰值点使用max函数找到B中的最大值peakvalue及其索引peakindex再通过索引从lambda数组中找到对应的峰值波长peak_wavelength。绘图与标记使用plot函数绘制普朗克曲线横坐标是波长单位转换为纳米纵坐标是光谱辐射亮度。同时使用scatter函数标记出每个温度下普朗克曲线的峰值点并在图例中显示峰值波长和对应的温度。图形标注最后使用xlabel、ylabel和title函数对图形进行标注让图像更加清晰易懂并使用legend函数显示曲线和峰值点的说明。通过这样的代码实现我们可以很直观地看到不同温度下普朗克曲线的形状以及它们的峰值点位置对普朗克公式有了更深刻的理解。希望这篇博文对同样在研究这个问题的小伙伴有所帮助。

更多文章