
简介普朗克定律是热辐射与黑体辐射研究中的基础内容描述了不同温度下黑体光谱辐射强度随波长的分布规律。这份Matlab资源将定律公式转化为可直接运行的绘图脚本面向物理、热能、光学及相关专业学生与需要绘制多曲线图、不均匀刻度图的工程技术人员帮助理解温度升高时峰值波长向短波方向移动等核心特征。压缩包共3个文件包含两个m脚本和一个png结果图整体仅227KB。m脚本分别实现普朗克公式计算与图形绘制并对横轴波长做不均匀刻度处理使曲线分布更清晰png图展示了不同温度下的黑体单色辐射能力随波长变化的对照曲线便于直观检验代码效果。目前已有8371人学习下载适合课程作业、论文配图或科研演示时快速复用。通过运行代码可自行调整温度范围与参数得到符合实际教学或研究需求的辐射分布曲线省去从零推导与调试绘图细节的麻烦。1. 普朗克公式那根曲线为什么课本总拿它当黑体辐射的“标准答案”如果你用 Matlab 画过普朗克公式在不同温度下的光谱辐射强度曲线会发现一个反直觉的现象温度从 3000K 升到 6000K峰值波长不是等比例往左挪峰值高度也不是等比例往上蹿——曲线的形状被两个物理常数死死钉住往左往右、往上往下都遵循一套“看不见的刻度规则”。这就是普朗克定律最迷人的地方它用一个代数表达式把温度、波长和辐射强度之间的非线性关系压缩成了一条光滑的单峰曲线。但多数人第一次用 Matlab 画这组曲线时踩的坑不是公式写错而是“画出来的图跟课本长得不一样”横轴刻度不均匀、多条曲线挤在一起看不清、峰值对不上维恩位移定律的预言。这些问题的根源是辐射强度在短波区变化剧烈、在长波区又趋于平缓线性坐标根本压不住这个动态范围。搞懂普朗克定律的曲线绘制不只是学会一个 plot 命令而是理解黑体辐射强度随波长分布的底层数学结构为什么低频段用瑞利-金斯近似、高频段用维恩近似、中间只有一个狭长的过渡带。这篇文章从公式的物理含义拆到 Matlab 的绘图实现最后落到不均匀刻度与多曲线对比的设计取舍。2. 普朗克分布公式从辐射强度到波长变量的数学结构2.1 公式里两个指数项为什么一个管短波、一个管长波普朗克定律最常见的形式是光谱辐射出射度关于波长的函数% 波长范围100nm 到 3000nm单位换算成米 lambda linspace(100e-9, 3000e-9, 2500); % 物理常数 h 6.626e-34; % 普朗克常数单位 J·s c 2.998e8; % 光速单位 m/s k 1.381e-23; % 玻尔兹曼常数单位 J/K % 普朗克公式光谱辐射出射度单位 W/(m^3) T 5800; % 色温单位 K M_lambda (2*pi*h*c^2 ./ lambda.^5) ./ ... (exp(h*c ./ (lambda*k*T)) - 1);这段代码里lambda.^5是幂律项exp(...)是指数项。波长极短时lambda.^5让分母变得极小但指数项exp(h*c/(lambda*k*T))增长得更快整个分式被压向零波长极长时指数项趋近于1 h*c/(lambda*k*T)分母近似为h*c/(lambda*k*T)抵消掉一个lambda整体按lambda^-4衰减。这就是普朗克曲线在短波端急坠、长波端缓降的数学原因。2.2 峰值波长为什么只跟温度成反比维恩位移定律的推导路径对上式求导并令导数为零会得到一个超越方程x 5(1 - e^(-x))其中x h*c/(lambda*k*T)。数值解出x ≈ 4.965于是峰值波长满足lambda_peak h*c / (4.965*k*T) ≈ 2.898e-3 / T这个结果就是维恩位移定律。它说明一件事黑体辐射曲线的峰值波长完全由温度唯一决定和材料无关。用 Matlab 验证时直接把不同温度代入公式再用find或max找峰值位置就能在图上叠一条2.898e-3/T的理论线如果两条线不重合说明波长采样不够密或者单位搞错了。2.3 单位陷阱波长用纳米还是米公式分母差出 10^9普朗克公式里lambda的单位必须与国际单位制保持一致。很多人写成lambda 300:0.5:3000并直接代入结果曲线峰值位置差了三个数量级——因为lambda此时是纳米而h*c/(lambda*k*T)里的lambda必须用米。正确的做法是让lambda向量以米为单位构造绘图时再除以1e-9把横轴标签改成纳米lambda_m linspace(100e-9, 3000e-9, 2500); % 国际单位米 lambda_nm lambda_m * 1e9; % 绘图用纳米 plot(lambda_nm, M_lambda, LineWidth, 1.5); xlabel(波长 \lambda (nm)); ylabel(光谱辐射出射度 M_\lambda (W·m^{-2}·m^{-1}));绘制出的纵轴单位是“每米波长间隔的辐射通量密度”课本有时写成W·m^-2·μm^-1那是把米换成微米后额外乘了一个换算系数。两种单位画出来的曲线形状一致但纵轴数值完全不同混用会造成“我的曲线比课本矮 10^6 倍”的困惑。3. 多温度曲线对比线性坐标、对数坐标与不均匀刻度的本质差异3.1 线性坐标下为什么低温曲线“看不见”用 Matlab 一次画 3000K、4000K、5000K、6000K 四条曲线时线性纵轴下 3000K 的曲线峰值可能只有 6000K 峰值的几十分之一叠在一起就像贴在横轴上的一条细线。这不是数据错了而是黑体辐射强度随温度四次方增长温度翻倍总辐射出射度变为 16 倍峰值波长左移的同时峰值高度飙升。线性坐标能直观表现“谁高谁低”却把低温和高温曲线压成了不可读的比例关系。3.2 对数-对数坐标如何打开动态范围把横轴和纵轴都取对数后普朗克公式变成两个渐近段的叠加短波段是指数项主导曲线在对数坐标里呈指数衰减长波段是幂律项主导斜率约为 -4。用 Matlab 的loglog绘图loglog(lambda_nm, M_lambda, LineWidth, 1.5); hold on; % 叠加瑞利-金斯近似验证长波斜率 M_rj (2*pi*c*k*T) ./ lambda_m.^4; loglog(lambda_nm, M_rj, --, LineWidth, 1);看这张图的人能一眼读出两条曲线在长波区逐步重合在短波区分开普朗克曲线拐头向下瑞利-金斯近似则持续发散——这正是“紫外灾变”的直接视觉证据。对数坐标不是为了炫技而是把“指数项 vs 幂律项”这两个不同量级的物理过程放进同一张图让读者从图形斜率反推公式结构。3.3 不均匀刻度横轴按波长段拉大到底改变了什么物理认知不均匀刻度图的常见做法是把横轴拆成两个区段短波区用线性刻度、长波区用对数刻度或者直接用set(gca, XScale, log)让整个横轴对数化。前者适合突出峰值附近的结构后者适合展示全波段渐近行为。需要警惕的是刻度选择会改变人眼对曲线面积的判断——对数横轴下曲线下方“看似相等”的两块面积实际积分相差几个数量级总辐射出射度斯特藩-玻尔兹曼定律是对lambda从 0 到无穷做积分这个积分结果不随横轴刻度改变但你在图上量出来的面积会变。因此不均匀刻度只能作为展示工具不能作为比较积分通量的依据。4. 从 Matlab 多曲线图到物理验证峰值位置、面积积分与维恩线4.1 在同一张图上叠加多条温度曲线而不互相遮挡的布置策略当温度跨度从 3000K 到 6000K 且只取少数几条线时线性坐标反而可读峰值从左往右依次排开高度依次上升。但曲线数量超过五条就必须靠颜色渐变和线型区分。推荐的布置是用冷暖渐变映射温度低温用蓝、高温用红并叠加峰值点标记T_list [3000, 4000, 5000, 6000]; cmap turbo(numel(T_list)); figure(Color, w); hold on; for i 1:numel(T_list) T T_list(i); M (2*pi*h*c^2 ./ lambda_m.^5) ./ ... (exp(h*c ./ (lambda_m*k*T)) - 1); plot(lambda_nm, M, Color, cmap(i,:), ... LineWidth, 1.8, DisplayName, sprintf(%d K, T)); [M_peak, idx] max(M); plot(lambda_nm(idx), M_peak, o, ... Color, cmap(i,:), MarkerSize, 5); end legend(Location, northeast);这段代码里max(M)返回峰值强度及其线性索引idx直接索引lambda_nm得到峰值波长。实际跑出来的峰值波长会偏在2.898e-3/T计算值旁边的一个采样间隔内因为离散网格不可能正好落在连续函数的极值点上——这不是代码错误而是采样分辨率的固有误差。4.2 用 trapz 数值积分验证斯特藩-玻尔兹曼四次方关系普朗克公式对全波段积分得到斯特藩-玻尔兹曼定律M_total σ·T^4。用 Matlab 的trapz对波长做数值积分可以直接验证sigma 2*pi^5*k^4 / (15*h^3*c^2); for i 1:numel(T_list) M_integral(i) trapz(lambda_m, ... (2*pi*h*c^2 ./ lambda_m.^5) ./ ... (exp(h*c ./ (lambda_m*k*T_list(i))) - 1)); end % 对比理论值 theory sigma * T_list.^4; ratio M_integral ./ theory;trapz用梯形法累加离散点之间的面积。由于普朗克曲线在短波端急剧衰减、长波端缓慢衰减数值积分对波长上限非常敏感——如果lambda_m只取到 3000nm6000K 曲线在该波长的辐射强度仍未完全衰减积分结果会比理论值偏小几个百分点。收敛判断的标准做法是不断把上限翻倍观察ratio是否趋近 1。4.3 检查公式是否写对的五个“零成本”信号公式写错时曲线会给出极其明显的物理不合理信号不需要比对教科书只看下列现象就能定位现象可能原因排查动作峰值波长不随温度移动T被写成了标量或循环里没更新disp(T)查看循环变量曲线在短波端单调上升指数项漏了-1检查分母是否为exp(...) - 1长波端数值溢出为Inflambda太小、h*c/(lambda*k*T)超过 700改用logspace生成波长向量或使用数值稳定的log重写公式纵轴数值比课本小 10^9波长单位用了纳米但公式按米算统一以米代入公式绘图时再换算所有曲线形状完全一致公式里lambda被意外截断成了标量size(lambda)检查维度这五条里最隐蔽的是指数溢出。exp(x)在x大于约 700 时直接返回Inf而普朗克公式里h*c/(lambda*k*T)在室温、极短波长下轻轻松松超过这个值于是短波区出现一条“断崖”。用对数形式重写可以绕开logM log(2*pi*h*c^2) - 5*log(lambda_m) - ... log(expm1(h*c ./ (lambda_m*k*T))); M exp(logM);expm1(x)对很小的x计算exp(x)-1既避免了长波区分母减法的灾难性抵消又避免了短波区exp溢出。5. 绘制不均匀刻度的原理与实操从semilogy到自定义坐标轴映射5.1 竖轴取对数、横轴保持线性semilogy在普朗克曲线上的物理意义semilogy保持波长横轴线性、纵轴取对数适合观察同一温度下短波与长波的强度跨越。线性横轴尊重“波长均匀分布”的物理直觉对数纵轴则能同时显示峰值强度与长波尾巴的微弱辐射。这种组合广泛应用于红外传感场景的响应曲线分析传感器往往关心短波端的滚降特性线性横轴能直接读出半功率点波长对数纵轴则能看清 -20dB 衰减发生在哪个波段。5.2 自定义不均匀横轴把 100–400nm 与 400–3000nm 放进同一视口有些场景希望短波区拉宽、长波区压缩用 Matlab 的tiledlayout并排两张图是最稳的写法tiledlayout(1, 2, TileSpacing, compact); % 左图紫外到可见波段线性横轴 nexttile; xlim([100, 800]); plot(lambda_nm, M_lambda, LineWidth, 1.5); % 右图可见到近红外波段横轴截断 nexttile; xlim([400, 3000]); plot(lambda_nm, M_lambda, LineWidth, 1.5);两张子图共享同一套普朗克数据但横轴范围不同视觉上“放大”了短波区的细节。这种做法的代价是横轴尺度在拼缝处不连续读者不能从图上直接量出全波段面积。它本质上是把一个非线性坐标变换拆成了两段线性映射牺牲整体性换取局部可读性。5.3 用set(gca, XScale, ...)实现单图不均匀刻度时需要注意的纵轴数值变化如果把整条横轴切成两段、每段用不同缩放比最直接的做法是生成一个“视觉位置向量”把真实波长映射到像素坐标% 定义视觉横轴映射短波区放大 3 倍 lambda_vis lambda_nm; lambda_vis(lambda_nm 400) ... lambda_nm(lambda_nm 400) * 3 200; % 400nm 以上保持线性 plot(lambda_vis, M_lambda, LineWidth, 1.5); set(gca, XTick, [100, 200, 400, 800, 1600, 3000]);这段代码会得到一张横轴刻度间距不均匀的图但XTick只决定标签位置不决定真实数据的对应关系。读者看到 100 到 200 之间的距离和 400 到 800 之间的距离一样宽时会误以为波长间隔相等——这是在操纵视觉比例不是在画真实的物理曲线。我一般把这种图定位为“示意用”并在图注里写明“横轴经过非线性压缩”避免误导。6. 设计取舍到底该用线性坐标还是对数坐标取决于你想说服谁6.1 三种可视化方案的适用边界对照方案优点缺点推荐场景线性-线性物理量直接可读面积与积分成正比动态范围不足低温曲线被压扁教材插图、温度跨度小于 2 倍对数-对数全波段覆盖渐近斜率直观面积与积分不成比例峰值位置难读验证瑞利-金斯/维恩近似、传感器响应线性-对数峰值强度可对比长波尾巴可见横轴被压缩短波细节丢失工业黑体炉校准曲线6.2 验证模型可信度的习惯不只看峰值还要看斜率我一般不会拿“曲线峰值吻合”当作公式写对的证据。更可靠的验证是把普朗克曲线和瑞利-金斯近似叠画在同一张 loglog 图里检查长波段两条线重合的长度再把维恩近似M_approx (2*pi*h*c^2./lambda.^5) .* exp(-h*c./(lambda*k*T))叠画检查短波段重合的长度。重合区间越长说明采样范围越合理如果两条近似线在图中段就分叉说明温度或波长范围选得不合适肉眼对比失去意义。这种“用渐近线框住真实曲线”的验证方式比单纯数格子可靠得多。从那以后我每次画普朗克多曲线图都强制走一遍“公式检查 → 单位换算 → 对数坐标验证峰值 → 数值积分复盘”的流程才算敢把图放进文档里希望帮到你。本文还有配套的精品资源点击获取