普朗克公式MATLAB实现:从热辐射原理到数值计算避坑指南

简介:这份资源面向从事红外仿真、物理模拟与科学计算的工程师及科研人员,聚焦如何用MATLAB实现普朗克公式的数值计算。普朗克公式是描述黑体辐射能量分布的基本定律,掌握其编程实现是红外仿真与辐射度分析的基础技能。资源包共5个文件,均为m脚本文件,压缩包约3KB,涵盖普朗克公式计算、辐射度计算、曲线拟合与映射函数等模块,便于读者直接运行、修改参数并对照理解各步骤的数值处理逻辑。代码中定义了普朗克常数、光速与玻尔兹曼常数,设定温度与波长范围后通过循环遍历组合计算辐射出射度,并借助可视化函数呈现温度、波长与辐射强度的关系,读者可据此快速搭建自己的黑体辐射计算流程。目前已有4854人学习下载,适合需要将物理公式落地为可执行脚本、并希望借助图形化结果分析数据的初中级MATLAB用户参考。

1. 普朗克公式到底在算什么:从“烧红的铁块”说起

一块铁放进炉子里加热,温度低的时候它只是微微发暗,继续升温会变成暗红、橙红,再高就发白发亮。这个“颜色随温度变化”的现象,背后就是热辐射。普朗克公式要算的,正是不同温度下,一个理想辐射体在每个波长上到底辐射出多少能量。它把“温度”和“光谱”这两件事用一条曲线绑在了一起。

很多人第一次听到“普朗克 辐射度”会觉得这是量子力学里的古董,跟自己没关系。但只要涉及红外测温、遥感成像、热像仪标定、太阳能光谱模拟,甚至白炽灯的光色估算,这条公式就是绕不开的底层账本。搞懂它,你就能看懂一条光谱曲线为什么长成那个形状,也能明白为什么经典物理在这里会“翻车”。

2. 为什么经典公式会崩:普朗克公式存在的理由

2.1 从瑞利-金斯到“紫外灾难”

在普朗克之前,物理学家用经典电磁学和统计力学推导过一个公式,叫瑞利-金斯公式。它的思路很自然:把空腔里的电磁波看成无数个驻波模式,每个模式按能量均分定理分到一份能量。短波长时模式数量急剧增加,算出来的辐射度就一路飙升,波长趋近于零时直接冲到无穷大。

这个结果显然不对。实验测出来的曲线在短波方向是往下掉的,不是往上炸的。因为这件事发生在紫外波段附近,大家把它叫做“紫外灾难”。它不是实验误差,而是经典理论框架本身出了问题。普朗克公式就是为了解决这个矛盾而出现的。

2.2 能量不是连续的:普朗克的关键假设

普朗克的破局点在于一个当时看起来很“玄学”的假设:振子的能量不能连续变化,只能一份一份地取,每份的大小是 ( h\nu )。( h ) 就是普朗克常数,( \nu ) 是频率。这个“能量量子化”的假设,直接掐断了短波方向能量无限堆积的可能。

通俗地说,经典理论认为能量像水龙头里的水,想放多少放多少;普朗克说不对,能量像硬币,只能一枚一枚地给。波长越短,频率越高,一枚“硬币”的面值就越大,能分到硬币的模式就越少,辐射度自然就掉下来了。这条公式后来成了量子力学的起点之一,但它本身只是一个关于热辐射能量分布的计算式。

2.3 公式长什么样:每个符号都有物理含义

普朗克公式常见的形式有两种,一种按波长写,一种按频率写。做数值计算时,按波长写更直观,因为实验数据通常以波长为横轴。它的光谱辐射度形式是:

[ B(\lambda, T) = \frac{2hc^2}{\lambda^5} \cdot \frac{1}{e^{hc/(\lambda k T)} - 1} ]

其中 ( B ) 是光谱辐射度,单位是 ( \mathrm{W \cdot m^{-2} \cdot sr^{-1} \cdot m^{-1}} );( \lambda ) 是波长;( T ) 是绝对温度;( h ) 是普朗克常数;( c ) 是光速;( k ) 是玻尔兹曼常数。分母里的指数项决定了曲线的形状,( \lambda^5 ) 决定了短波方向的衰减。

在 MATLAB 里算这条曲线,核心就是把这几个常数代进去,然后对波长向量做逐元素运算。下面是一段可以直接运行的代码:

% 普朗克光谱辐射度计算(按波长) h = 6.62607015e-34; % 普朗克常数,单位 J·s c = 2.99792458e8; % 光速,单位 m/s k = 1.380649e-23; % 玻尔兹曼常数,单位 J/K T = 3000; % 温度,单位 K lambda = linspace(100e-9, 5000e-9, 2000); % 波长范围 100nm 到 5000nm % 逐元素计算,注意用点乘和点除 B = (2*h*c^2) ./ (lambda.^5) ./ (exp(h*c./(lambda*k*T)) - 1); plot(lambda*1e9, B); xlabel('波长 (nm)'); ylabel('光谱辐射度 (W·m^{-2}·sr^{-1}·m^{-1})'); title(['普朗克曲线,T = ' num2str(T) ' K']);

这段代码里,lambda.^5和exp(...)前面的点号是关键。MATLAB 对向量做乘方、乘除时,必须用点运算,否则会当成矩阵运算直接报错。linspace生成等间距波长点,点数取 2000 是为了让曲线平滑,太少会看到折线。温度改成 5000 或 6000,你会看到峰值往短波方向移动,这就是维恩位移定律的直观体现。

3. 普朗克公式和它的“亲戚们”:别把近似当原式

3.1 维恩近似与瑞利-金斯近似

普朗克公式有两个常用的近似版本。短波区域,指数项远大于 1,分母里的减 1 可以忽略,得到维恩近似;长波区域,指数项很小,展开后得到瑞利-金斯近似。这两个近似在各自区间里和普朗克公式吻合得很好,但一旦跨区间使用就会出问题。

初学者最容易犯的错,就是拿维恩近似去算远红外,或者拿瑞利-金斯近似去算可见光短波。前者会偏小,后者会偏大,而且偏差不是一点点。判断用哪个近似,先看 ( hc/(\lambda k T) ) 这个无量纲量的值:远大于 1 用维恩,远小于 1 用瑞利-金斯,接近 1 就老老实实用原式。

3.2 斯特藩-玻尔兹曼定律是积分结果

斯特藩-玻尔兹曼定律说,总辐射度正比于 ( T^4 )。它不是独立于普朗克公式的另一个规律,而是把普朗克公式对所有波长积分之后得到的结果。换句话说,普朗克公式是“每一条波长上分多少”,斯特藩-玻尔兹曼是“所有波长加起来一共多少”。

在 MATLAB 里验证这件事很简单:把上面算出来的 ( B ) 对 ( \lambda ) 做数值积分,再和 ( \sigma T^4 ) 对比。如果波长范围取得足够宽,两者应该很接近。这个练习能帮你建立“光谱量”和“总量”之间的换算直觉。

3.3 常见误区:普朗克公式不是“黑体才有用”

很多人以为普朗克公式只适用于理想黑体,实际物体用不上。这个说法只对了一半。实际物体的辐射度确实不等于黑体,但可以通过发射率 ( \varepsilon(\lambda, T) ) 把黑体辐射度修正过来:( B_{\text{real}} = \varepsilon \cdot B_{\text{planck}} )。发射率小于 1,且随波长和温度变化。

所以普朗克公式仍然是计算实际物体热辐射的起点。做红外测温时,如果忽略发射率修正,读出来的温度会明显偏离真实值。这也是为什么红外热像仪都要设置发射率参数,本质上就是在普朗克公式前面乘一个系数。

4. 在 MATLAB 里算普朗克公式:容易翻车的几个点

4.1 单位不统一是头号杀手

普朗克常数用 J·s,光速用 m/s,玻尔兹曼常数用 J/K,波长却经常有人填成纳米。一旦波长用纳米代入,( \lambda^5 ) 会小得离谱,指数项也会大得离谱,结果要么是 0 要么是 Inf。血泪经验是:所有输入量先统一到国际单位制,波长用米,温度用开尔文,最后画图时再把横轴换成纳米。

温度也一样,摄氏度不能直接代。3000 K 是 2727 摄氏度左右,如果误填 3000 当成摄氏度,实际温度差了将近 3000 K,曲线峰值位置会完全不对。写代码时最好在变量名里带上单位,比如T_K、lambda_m,减少自己坑自己的概率。

4.2 指数溢出与数值稳定

当 ( \lambda ) 很小、( T ) 很低时,( hc/(\lambda k T) ) 可能是一个非常大的数,exp直接溢出成 Inf,分母变成 Inf,结果变成 0。这在物理上是合理的,因为短波方向辐射度确实趋近于零,但数值上会给出警告。如果不想看到警告,可以对指数项做截断,或者用对数域计算后再取指数。

另一个坑是波长向量从 0 开始。( \lambda = 0 ) 会导致除零,直接产生 NaN。波长范围应该从一个小正数开始,比如 1e-9 米,而不是 0。这些细节在写脚本时不起眼,但一旦批量跑参数扫描,就会变成一堆无效点。

4.3 画图时的坐标选择

普朗克曲线在波长轴上通常用纳米,在频率轴上用 THz,两者形状看起来是反的。如果横轴用波长,峰值随温度升高向左移动;如果横轴用频率,峰值随温度升高向右移动。这不是公式变了,而是横轴方向反了。画图前先想清楚自己要表达什么,别把两张图放在一起直接对比峰值位置。

另外,纵轴用线性坐标时,短波方向的细节会被压扁;用对数坐标能看清整个量级变化。如果目的是展示峰值位置,线性坐标更直观;如果目的是展示数量级跨度,对数坐标更合适。MATLAB 里用semilogy或loglog切换,不需要改计算公式。

5. 什么时候该用普朗克公式,什么时候别硬套

普朗克公式的适用边界其实很清楚:它描述的是热平衡状态下的电磁辐射谱。只要物体处于热平衡,或者可以近似认为局部热平衡,它就能用。比如白炽灯灯丝、炉膛内壁、地表红外辐射、恒星光谱,这些场景下普朗克公式都是第一手工具。

但下面几种情况就要小心。第一种是激光、LED 这类非热辐射光源,它们的发光机制不是热平衡辐射,光谱形状和普朗克曲线完全不是一回事,硬套只会得到错误结论。第二种是等离子体或荧光材料,存在非平衡过程,需要更复杂的辐射输运模型。第三种是极短时间尺度的瞬态辐射,热平衡还没建立起来,普朗克公式的前提就不成立。

还有一个实际判断标准:看发射率是否接近常数。如果发射率随波长剧烈变化,比如金属在短波处发射率低、长波处发射率高,直接用黑体公式加一个常数修正就会带来较大误差。这时候要么用光谱发射率逐点修正,要么换用更精细的模型。

我自己刚开始用 MATLAB 算这条曲线时,曾经把波长单位写成纳米,跑出来一条几乎贴地的直线,还以为是温度设低了。后来把单位统一成米,曲线立刻正常。从那以后,我每次写热辐射相关的脚本,都会在开头强制走一遍单位检查:波长是不是米、温度是不是开尔文、常数是不是国际单位制。这个习惯帮我省掉了不少返工时间。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

Agent上下文管理五路线解析:从窗口瓶颈到记忆分层

Agent上下文管理五路线解析:从窗口瓶颈到记忆分层

做Agent的朋友最近应该都有同一种焦虑:上下文不够用了。单轮对话的任务还好,一旦进入多步规划、多工具调用、长对话连续执行,模型的输入窗口就成了瓶颈,而且这个瓶颈不只是“放不下”那么简单——放得下但不重要、放得下但太贵、放…

2026/10/20 5:09:59 阅读更多 →
AutoGen多智能体框架:工程化落地的开源底座

AutoGen多智能体框架:工程化落地的开源底座

1. 这不是又一个“AI Agent 框架”,而是让多智能体协作真正落地的工程化底座“微软 AutoGen:多智能体 AI 应用的开源框架”——这个标题里藏着三个被多数人忽略的关键定语:“微软”、“多智能体”、“工程化”。它不是在讲“怎么调用一个大模…

2026/10/20 5:09:59 阅读更多 →
基于YOLO的行人跌倒检测系统实战:数据、训练与部署优化

基于YOLO的行人跌倒检测系统实战:数据、训练与部署优化

最早接触行人跌倒检测,是帮朋友做一套家庭看护系统的原型。当时第一反应很简单:拿现成的目标检测模型,在视频流上框出人,再判断这个人是站着还是躺着,不就完了吗?真正跑起来才发现,这事和"…

2026/10/20 5:09:59 阅读更多 →

最新新闻

HTTP请求头伪造入门:从SWPUCTF新生赛题看Web安全

HTTP请求头伪造入门:从SWPUCTF新生赛题看Web安全

1. 题目初印象:从名字里能读出什么先说结论:这道[SWPUCTF 2021 新生赛]Do_you_know_http是一道典型的、面向新手的Web安全入门题,核心考察的是对HTTP协议基础知识的理解与抓包改包能力。它不会要求你掌握复杂的漏洞利用链,也不涉及…

2026/10/20 5:43:15 阅读更多 →
用Python打造PPT生成工具:Markdown转pptx的架构设计与实现

用Python打造PPT生成工具:Markdown转pptx的架构设计与实现

1. 为什么我要自己动手做一个PPT生成工具先说说我做这个项目的起因。我在一家中型公司做技术方案相关的工作,平均每周要出三到五份PPT,有的是给客户讲架构,有的是给内部做技术评审,还有的是给管理层做汇报。时间长了就发现一个很尴…

2026/10/20 5:43:15 阅读更多 →
AI生产力全链路:数据、模型与工程三位一体落地方案

AI生产力全链路:数据、模型与工程三位一体落地方案

“三位一体”这个词在AI圈被说得有点烂了,但真正能讲清楚、能落地的方案并不多。我最近在梳理一个叫 Joker AIx 的全链路方案,越做越觉得它其实代表了一种趋势,核心就是围绕数据、模型、工程这三根支柱,把AI生产力这件事从头到尾串…

2026/10/20 5:43:15 阅读更多 →
OpenSSL证书实战:从自签名到私有CA搭建与信任配置

OpenSSL证书实战:从自签名到私有CA搭建与信任配置

先看浏览器地址栏里的小锁图标,再看那些打着“不受信任”警告的自签名证书页面。很多人在内网部署系统、做联调、跑测试环境时,就是用OpenSSL随手生成一个证书顶着用,结果要么被浏览器拦得死死的,要么被同事吐槽“就这&#xff1f…

2026/10/20 5:43:15 阅读更多 →
主动式AI驱动服务器支持:从故障响应到预测性维护的服务升级

主动式AI驱动服务器支持:从故障响应到预测性维护的服务升级

“永不停机”这四个字放在过去,基本属于销售话术。但这次认真看了联想这套 Premier Support Plus 服务之后,我得承认,底层的逻辑确实变了:服务器支持从“等用户打电话说坏了再响应”,变成了“用主动式 AI 提前发现问题…

2026/10/20 5:43:15 阅读更多 →
小白程序员必看:如何成为高薪AI全栈工程师?

小白程序员必看:如何成为高薪AI全栈工程师?

本文介绍了AI全栈工程师这一新兴高薪岗位,解释了其概念、所需技能以及为何如此火爆。文章指出,AI全栈工程师能够使用AI编程工具独立完成从界面到上线的整个系统开发,降低了行业门槛,提升了个人不可替代性。文章还澄清了关于AI全栈…

2026/10/20 5:42:15 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →