文章目录
-
- 一、通信与无线系统
-
- [1. QuaDRiGa:移动无线信道建模](#1. QuaDRiGa:移动无线信道建模)
- [2. SimRIS:可重构智能表面辅助通信](#2. SimRIS:可重构智能表面辅助通信)
- 二、图像处理与计算机视觉
-
- [1. VLFeat:经典计算机视觉算法库](#1. VLFeat:经典计算机视觉算法库)
- [2. Iso2Mesh:三维图像与几何网格生成](#2. Iso2Mesh:三维图像与几何网格生成)
- 三、脑机接口与神经工程
-
- [1. EEGLAB:脑电数据处理与独立成分分析](#1. EEGLAB:脑电数据处理与独立成分分析)
- [2. BCILAB:脑机接口解码与运动想象分类](#2. BCILAB:脑机接口解码与运动想象分类)
- 四、信号处理与时频分析
-
- [1. LTFAT:Gabor 变换与滤波器组](#1. LTFAT:Gabor 变换与滤波器组)
- [2. TFTB:非平稳信号的时频分布](#2. TFTB:非平稳信号的时频分布)
- 五、控制与机器人
-
- [1. CasADi:非线性优化与最优控制](#1. CasADi:非线性优化与最优控制)
- [2. Robotics Toolbox:机械臂运动学与轨迹规划](#2. Robotics Toolbox:机械臂运动学与轨迹规划)
- 六、数学计算与优化
-
- [1. Chebfun:函数逼近与微分方程求解](#1. Chebfun:函数逼近与微分方程求解)
- [2. Manopt:黎曼流形上的数值优化](#2. Manopt:黎曼流形上的数值优化)
- 七、电力系统
- 八、声学与超声成像
-
- [1. k-Wave:声波传播与声场数值仿真](#1. k-Wave:声波传播与声场数值仿真)
- [2. USTB:超声波束形成与图像重建](#2. USTB:超声波束形成与图像重建)
- 九、科研绘图与数据可视化
-
- [1. gramm:统计绘图与分组可视化](#1. gramm:统计绘图与分组可视化)
- [2. export_fig:科研图形导出](#2. export_fig:科研图形导出)
- 十、从开源项目中学习算法与工程实现
MATLAB 的应用远不止 MathWorks 官方提供的函数和工具箱。在科学计算与工程研究中,许多高校、科研机构和独立开发者围绕特定问题开发了专门的 MATLAB 程序,并将源代码、示例和技术文档公开。这些项目经过长期积累,有些已经发展为相应研究领域中具有代表性的计算工具。
与一般的算法示例相比,成熟的科研工具箱通常包含更完整的数据组织方式、数值计算流程和结果分析方法。通过阅读这些项目的源代码,可以了解研究人员如何将数学模型转化为实际程序,以及不同算法在具体工程问题中如何应用。
本文按照专业领域,整理了无线通信、图像处理与计算机视觉、脑机接口、信号处理、控制与机器人、数学计算与优化、电力系统、声学与超声成像、科研绘图九个方向的 MATLAB 开源项目。对于其中具有代表性的工具箱,将结合数学模型和官方示例介绍其主要功能与技术特点。
一、通信与无线系统
无线通信系统的研究既涉及电磁波在传播环境中的变化,也涉及多天线信号处理、无线资源分配及网络协议等问题。不同层次的仿真通常需要不同的数学模型:信道建模关注传播路径与衰落特性,链路仿真研究信号传输和接收过程,网络仿真则需要考虑多用户之间的资源竞争与相互干扰。
1. QuaDRiGa:移动无线信道建模
项目地址:QuaDRiGa
QuaDRiGa(QUAsi Deterministic RadIo channel GenerAtor)由德国 Fraunhofer HHI 开发,主要用于生成移动通信系统的无线信道数据。它能够描述多天线系统中的多径传播、空间相关性及终端运动引起的信道变化。
在实际无线环境中,信号可能沿多条路径到达接收端。各路径具有不同的传播时延、衰减和相位,接收信号是这些传播分量共同作用的结果。时变多径信道通常可以表示为
h ( t , τ ) = ∑ ℓ = 1 L α ℓ ( t ) δ ( τ − τ ℓ ( t ) ) , h(t,\tau)=\sum_{\ell=1}^{L} \alpha_\ell(t)\delta\left(\tau-\tau_\ell(t)\right), h(t,τ)=ℓ=1∑Lαℓ(t)δ(τ−τℓ(t)),
其中, α ℓ ( t ) \alpha_\ell(t) αℓ(t) 为第 ℓ \ell ℓ 条路径的时变复增益, τ ℓ ( t ) \tau_\ell(t) τℓ(t) 为相应的传播时延。
QuaDRiGa 根据传播场景、天线配置、终端位置和运动轨迹生成信道冲激响应。对于 MIMO 和大规模 MIMO 系统,这些数据可以进一步用于研究波束赋形、接收信号功率和空间信道特性。
官方教程 t02_drive_course.m 展示了一个移动终端的信道仿真过程。程序建立车辆行驶路线,设置不同的传播环境,并根据终端运动生成时变信道。
在完成仿真场景配置后,可以通过以下命令取得信道数据:
matlab
c = l.get_channels;
这里,l 是已经配置好的 QuaDRiGa 场景布局对象,get_channels 根据相应的传播模型生成信道系数。对输出的多径系数进行分析,可以观察终端移动过程中信道响应的变化。
该示例将车辆运动、传播环境与信道计算组织在同一套模型中,能够用于研究移动场景下的无线传播特性。
官方示例:t02_drive_course.m
2. SimRIS:可重构智能表面辅助通信
可重构智能表面(Reconfigurable Intelligent Surface,RIS)通过调整表面单元的电磁响应,改变入射电磁波的反射特性。在无线通信研究中,RIS 可以作为传播环境中的可控单元,参与发送端与接收端之间的信道构造。
SimRIS 为这类系统提供了信道建模程序,能够根据传播场景、天线数量和 RIS 配置生成相应的无线信道矩阵。
对于典型的 RIS 辅助 MIMO 系统,其端到端等效信道可以写为
H e f f = D + G Φ H , H_{\mathrm{eff}}=D+G\Phi H, Heff=D+GΦH,
其中, H H H 表示发送端至 RIS 的信道矩阵, G G G 表示 RIS 至接收端的信道矩阵, D D D 表示发送端与接收端之间的直接信道, Φ \Phi Φ 是由 RIS 单元反射系数组成的对角矩阵。
从这个表达式可以看到,RIS 的作用体现在对级联信道 G Φ H G\Phi H GΦH 的调节上。不同的反射系数配置会改变等效信道,为相位优化和通信性能分析提供了研究空间。
SimRIS 的 MATLAB 界面可以设置传播环境、天线数量及 RIS 参数,生成的信道矩阵能够直接用于后续算法计算。例如,可以固定发送端和接收端的位置,改变 RIS 单元数量或反射相位,分析等效信道的变化。
通信领域还有一些研究方向明确的项目。WiLabV2Xsim 面向车联网通信,涉及 LTE-V2X、5G NR-V2X 等技术及相关资源分配问题;NYUSIM 主要用于毫米波及更高频段的信道模拟;COST 2100 则以多径簇和空间统计特性为基础研究 MIMO 信道。
这些项目分别从无线传播、通信链路和网络层面提供了不同的仿真方法。
二、图像处理与计算机视觉
MATLAB 的矩阵运算和图像可视化能力,使其长期用于图像处理算法的开发与实验。围绕计算机视觉、三维重建和几何计算,科研社区也积累了不少具有代表性的程序。
这一领域选择 VLFeat 和 Iso2Mesh 两个项目展开介绍。前者侧重从图像中提取和匹配视觉特征,后者则将三维图像数据转化为可用于几何分析与数值计算的网格。
1. VLFeat:经典计算机视觉算法库
项目地址:VLFeat
VLFeat 收录了 SIFT、HOG、MSER、SLIC 等经典计算机视觉算法,并提供相应的 MATLAB 接口。
在图像配准和视觉定位任务中,一个常见问题是:如何找到两幅图像中对应的局部区域?由于拍摄位置、尺度和方向可能不同,直接比较像素值往往难以建立稳定的对应关系。
SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)通过构造尺度空间检测局部特征点,并根据特征点附近的梯度信息生成描述子,使局部图像区域能够用数值向量表示。
VLFeat 的 SIFT 接口可以简洁地完成特征提取和匹配:
matlab
[fa, da] = vl_sift(Ia);
[fb, db] = vl_sift(Ib);
[matches, scores] = vl_ubcmatch(da, db);
其中,Ia 和 Ib 为单精度灰度图像。vl_sift 输出的 fa、fb 包含特征点的位置、尺度及方向,da、db 为对应的特征描述子。
vl_ubcmatch 根据描述子之间的距离建立匹配关系。得到匹配点以后,还可以进一步估计图像之间的几何变换,用于图像配准、全景拼接和视觉定位。
VLFeat 的官方教程详细介绍了尺度空间、特征检测及描述子计算过程。结合源码阅读这些内容,可以将 SIFT 的数学原理与具体实现联系起来。
官方教程:SIFT Overview
2. Iso2Mesh:三维图像与几何网格生成
项目地址:Iso2Mesh
在医学影像、计算几何和有限元分析中,三维体数据往往只是建模的起点。完成目标区域的分割后,研究人员还需要提取物体边界,并建立具有节点与单元连接关系的几何网格。
Iso2Mesh 由 Qianqian Fang 开发,主要完成三维体数据的表面重建与四面体网格生成。
其中几个常用函数分别承担不同的处理任务:
vol2surf:由三维体数据提取三角表面网格。vol2mesh:将三维体数据转换为四面体网格。surf2mesh:根据封闭表面网格生成内部体网格。plotmesh:显示网格的节点、单元及几何结构。
例如,在生物组织建模中,可以先对 CT 或 MRI 图像进行分割,获得目标组织的体素表示,再利用 Iso2Mesh 构造三维网格。生成的网格可作为有限元计算的几何基础,用于研究热传导、电场分布等问题。
这一过程展示了三维图像处理与数值计算之间的联系:图像提供空间结构信息,网格则把这些信息转化为可计算的离散几何模型。
图像处理领域还可以关注 MatConvNet 和 mexopencv。MatConvNet 提供卷积神经网络的 MATLAB 实现与训练接口,mexopencv 则将 OpenCV 中的图像处理和计算机视觉算法引入 MATLAB 环境。
三、脑机接口与神经工程
脑机接口(Brain-Computer Interface,BCI)尝试从神经活动中提取与特定认知或运动任务相关的信息,并将其转化为可供计算机使用的输出。
以脑电(EEG)脑机接口为例,一个典型研究流程包括信号采集、预处理、特征提取和分类解码。围绕这些任务,MATLAB 已经形成了较为成熟的科研工具生态。
1. EEGLAB:脑电数据处理与独立成分分析
项目地址:EEGLAB
EEGLAB 是用于 EEG 数据处理与分析的 MATLAB 工具箱,涵盖数据导入、滤波、事件分析、独立成分分析(ICA)、时频分析及可视化等任务。
脑电记录通常由多个神经源与非神经源活动共同构成。眼动、眨眼以及肌肉活动都可能在电极记录中留下明显成分,因此数据分析常常需要区分不同来源的信号。
独立成分分析采用统计方法估计观测信号中的独立成分。其基本线性混合模型为
X = A S , X=AS, X=AS,
其中, X X X 表示多通道观测数据, S S S 表示待估计的源信号, A A A 为混合矩阵。
EEGLAB 提供 runica 等 ICA 计算接口,并能够显示独立成分的头皮分布、时间序列和频谱特征。研究人员可以结合这些信息分析脑电数据中的不同成分。
官方教程以 eeglab_data.set 为示例数据,介绍脑电信号的加载、通道信息处理、试次划分以及 ICA 分解等操作。阅读这些示例,可以较完整地了解 EEG 数据从原始记录到后续分析的组织方式。
官方教程:EEGLAB Tutorials
2. BCILAB:脑机接口解码与运动想象分类
项目地址:BCILAB
EEGLAB 主要解决脑电数据的分析问题,BCILAB 则进一步将信号处理与机器学习结合,用于建立脑机接口预测模型。
运动想象分类是其中具有代表性的研究任务。实验中,受试者按照提示想象左手或右手运动,研究人员尝试从相应的 EEG 信号中识别不同的运动想象状态。
共空间模式(Common Spatial Patterns,CSP)是这一方向常用的空间特征提取方法。
设两类脑电信号的协方差矩阵分别为 C 1 C_1 C1 和 C 2 C_2 C2,CSP 可以通过广义特征值问题计算空间滤波方向:
C 1 w = λ ( C 1 + C 2 ) w . C_1w=\lambda(C_1+C_2)w. C1w=λ(C1+C2)w.
其 MATLAB 实现可以写为
matlab
[V, D] = eig(C1, C1 + C2);
得到广义特征向量后,可以从中选取具有类别区分能力的方向作为空间滤波器,将原始多通道信号投影到新的空间。
对于第 k k k 个空间滤波器,常用的特征是投影信号的对数方差:
f k = log ( Var ( w k T X ) ) . f_k=\log\left( \operatorname{Var}(w_k^\mathsf{T}X) \right). fk=log(Var(wkTX)).
由各空间滤波器得到的特征构成分类器的输入,再利用线性判别分析(LDA)等方法完成类别识别。
BCILAB 的 ParadigmCSP.m 源码展示了这一算法流程,包括协方差矩阵估计、空间滤波器计算、对数方差特征提取和分类模型构造。对运动想象 EEG 数据进行分析时,可以沿着这些计算环节理解信号中的空间信息如何转化为分类特征。
脑机接口领域的其他项目各有侧重。FieldTrip 提供 EEG、MEG 数据的时频分析、统计检验和源定位方法;Brainstorm 将多种神经电生理分析方法集成到图形界面中;BrainFlow 主要处理生理信号的采集与数据流;ERPLAB 则围绕事件相关电位(ERP)建立分析流程。
这些工具覆盖了从信号采集、脑电分析到分类解码的多个环节。
四、信号处理与时频分析
传统傅里叶变换能够描述信号的频率组成,但在雷达、语音、机械振动和生理信号等应用中,频率成分常常随时间变化。要研究这些非平稳信号,仅有整体频谱还不足以描述信号的局部结构。
时频分析通过引入时间定位信息,研究信号的频率成分如何随时间演化。LTFAT 和 TFTB 分别提供了这一领域中不同类型的算法实现。
1. LTFAT:Gabor 变换与滤波器组
项目地址:LTFAT
LTFAT(Large Time-Frequency Analysis Toolbox)包含 Gabor 变换、滤波器组、信号重构以及相关时频分析方法。
短时傅里叶变换(STFT)是理解这些方法的基础。对于离散信号 x n xn xn,可以通过沿时间轴移动的窗函数计算局部频谱:
X ( m , ω ) = ∑ n x n w n − m e − j ω n , X(m,\omega)= \sum_n xnwn-me^{-j\omega n}, X(m,ω)=n∑xnwn−me−jωn,
其中, w n − m wn-m wn−m 表示位于不同时间位置的分析窗。
在这一框架下,LTFAT 提供离散 Gabor 变换、逆变换及多种滤波器组算法。除了计算时频表示,还可以研究变换系数与原始信号之间的重构关系。
官方示例中,demo_dgt 展示离散 Gabor 变换,demo_audiodenoise 研究音频去噪,demo_ofdm 则将时频方法应用于一个简单的 OFDM 系统。
OFDM 使用多个正交子载波传输信息,其信号结构与离散傅里叶分析密切相关。通过这个示例,可以将通信系统中的多载波信号与时频分析的数学工具联系起来。
官方示例:LTFAT Demos
2. TFTB:非平稳信号的时频分布
TFTB 收录了多种经典时频分析方法,包括短时傅里叶变换、Wigner--Ville 分布、Cohen 类时频分布及重分配方法。
其中,Wigner--Ville 分布是一种二次型时频表示。对于连续信号 x ( t ) x(t) x(t),其表达式为
W x ( t , f ) = ∫ − ∞ ∞ x ( t + τ 2 ) x ∗ ( t − τ 2 ) e − j 2 π f τ d τ . W_x(t,f)= \int_{-\infty}^{\infty} x\left(t+\frac{\tau}{2}\right) x^*\left(t-\frac{\tau}{2}\right) e^{-j2\pi f\tau}\,\mathrm d\tau. Wx(t,f)=∫−∞∞x(t+2τ)x∗(t−2τ)e−j2πfτdτ.
这一方法利用信号在不同时间位置之间的相关关系构造时频表示。
TFTB 提供 tfrwv、tfrstft 等函数,分别用于计算 Wigner--Ville 分布和短时傅里叶变换对应的时频表示。
线性调频信号是一个很直观的研究对象。对于瞬时频率随时间线性变化的信号,时频图中的主要分量会沿时间轴形成具有一定斜率的轨迹。利用 TFTB 可以计算并观察这一结构,也可以比较不同方法生成的时频图。
经典的 WaveLab 同样属于这一方向的重要资源,其内容集中在小波变换、小波包、信号去噪及相关数学算法。
五、控制与机器人
控制系统研究需要从动力学模型出发,确定能够实现预期目标的控制输入;机器人研究则在此基础上涉及运动学、动力学、轨迹规划和空间运动等问题。
CasADi 与 Robotics Toolbox 分别从数值优化和机器人建模两个方向,展示了 MATLAB 在这一领域的应用。
1. CasADi:非线性优化与最优控制
项目地址:CasADi
CasADi 提供符号表达式构造、自动微分和非线性优化建模功能,在最优控制、轨迹优化与模型预测控制研究中具有广泛应用。
考虑连续时间动力系统
x ˙ ( t ) = f ( x ( t ) , u ( t ) ) , \dot{x}(t)=f(x(t),u(t)), x˙(t)=f(x(t),u(t)),
其中, x ( t ) x(t) x(t) 为系统状态, u ( t ) u(t) u(t) 为控制输入。最优控制的目标是在满足动力学及相关约束的条件下,使目标函数
J = ∫ 0 T L ( x ( t ) , u ( t ) ) d t J=\int_0^T L(x(t),u(t))\,\mathrm dt J=∫0TL(x(t),u(t))dt
达到最小。
这类问题的一个关键计算步骤,是将连续时间的动力学方程转化为有限维优化问题。
CasADi 官方的 direct_collocation_opti.m 使用直接配点法完成这一过程。程序在每个时间区间内利用多项式近似状态轨迹,并在选定的配点处施加动力学约束。
示例中的配点计算部分为
matlab
import casadi.*
d = 3;
tau = collocation_points(d, 'legendre');
[C, D, B] = collocation_coeff(tau);
opti = Opti();
这里,d=3 表示使用三次多项式,tau 为 Legendre 配点;C、D 和 B 分别参与多项式导数、区间端点状态和积分近似的构造。
随后,程序通过 Opti 建立状态变量、控制变量及约束,将离散后的问题交给非线性优化求解器。
沿着这份示例阅读,可以清楚看到连续时间最优控制问题如何转化为数值优化模型,也能理解自动微分在优化计算中的作用。
官方示例:direct_collocation_opti.m
2. Robotics Toolbox:机械臂运动学与轨迹规划
项目地址:Robotics Toolbox for MATLAB
Peter Corke 开发的 Robotics Toolbox 包含机械臂运动学、动力学、轨迹生成以及移动机器人算法,是 MATLAB 机器人学领域的经典项目。
对于串联机械臂,正运动学的基本问题是:已知各关节的运动变量,如何计算末端执行器相对于基坐标系的位置与姿态?
利用相邻关节坐标系之间的齐次变换,可以将机械臂末端位姿表示为
T 0 n ( q ) = T 0 1 ( q 1 ) T 1 2 ( q 2 ) ⋯ T n − 1 n ( q n ) . T_0^n(q)= T_0^1(q_1)T_1^2(q_2)\cdots T_{n-1}^n(q_n). T0n(q)=T01(q1)T12(q2)⋯Tn−1n(qn).
Robotics Toolbox 将机械臂的几何结构和相应计算方法封装为 MATLAB 对象。
官方示例使用 Puma 560 六自由度机械臂:
matlab
mdl_puma560
T = p560.fkine([0 0 0 0 0 0]);
mdl_puma560 加载机械臂模型,fkine 根据输入的关节变量计算末端位姿。
在此基础上,可以继续研究逆运动学以及关节空间轨迹规划。例如,通过 jtraj 生成连接不同关节配置的运动轨迹,再观察各关节变量和末端位姿随时间的变化。
这一项目将机器人几何模型与运动学计算组织得比较完整,适合结合机器人学教材学习 DH 参数、坐标变换及机械臂运动分析。
同一领域的 acados 则主要面向最优控制问题的高效数值求解。其 MATLAB 接口包含小车倒立摆等示例,可以用于研究非线性系统的轨迹优化和预测控制。
六、数学计算与优化
MATLAB 本身提供了丰富的数值线性代数、微积分与优化函数,而 Chebfun、Manopt 等第三方项目进一步将特定的数学结构引入计算过程。
Chebfun 关注连续函数的数值表示,Manopt 则研究具有几何约束的优化变量。两者分别从函数逼近和微分几何出发,为数学问题提供了专门的计算方法。
1. Chebfun:函数逼近与微分方程求解
项目地址:Chebfun
Chebfun 的一个突出特点,是将连续函数作为可以直接参与计算的对象。函数求导、积分、求根及微分方程求解,都可以通过相应的 MATLAB 接口完成。
其数值计算基础包括切比雪夫多项式及相关的自适应多项式逼近方法。
切比雪夫多项式满足
T n ( x ) = cos ( n arccos x ) , x ∈ − 1 , 1 . T_n(x)=\cos(n\arccos x), \qquad x\in-1,1. Tn(x)=cos(narccosx),x∈−1,1.
对于足够光滑的函数,可以利用多项式逼近获得高精度的数值表示,并在此基础上进行微积分计算。
Chebfun 对微分方程的处理也体现了类似思想。例如,考虑边值问题:
u ′ ′ ( x ) = 1 , − 1 ≤ x ≤ 1 , u''(x)=1,\qquad -1\leq x\leq1, u′′(x)=1,−1≤x≤1,
满足边界条件
u ( − 1 ) = 0 , u ( 1 ) = 1. u(-1)=0,\qquad u(1)=1. u(−1)=0,u(1)=1.
使用 Chebfun 可以直接构造微分算子:
matlab
L = chebop(-1, 1);
L.op = @(x,u) diff(u,2);
L.lbc = 0;
L.rbc = 1;
u = L\1;
plot(u);
这里,chebop 定义微分算子,L.op 指定算子的作用形式,L.lbc 和 L.rbc 设置左右边界条件。
最后通过反斜杠运算求解算子方程,得到数值解函数。
这一问题的解析解为
u ( x ) = x 2 + x 2 , u(x)=\frac{x^2+x}{2}, u(x)=2x2+x,
因此还可以将 Chebfun 的结果与解析表达式进行比较。
从这个简单例子可以看出,Chebfun 将微分算子、边界条件与数值求解过程连接在一起,使程序结构与原始数学模型保持了较为直接的对应关系。
官方教程:Linear Differential Operators and Equations
2. Manopt:黎曼流形上的数值优化
项目地址:Manopt
在矩阵优化中,变量经常受到单位范数、正交性或固定秩等约束。这些约束对应的可行集往往具有一定的几何结构,例如单位球面、Stiefel 流形和 Grassmann 流形。
Manopt 以这些几何空间为基础组织优化算法,使目标函数、梯度与流形结构能够共同参与数值计算。
其官方教程使用实对称矩阵的最大特征值问题作为示例。
对于实对称矩阵 A A A,Rayleigh 商满足
λ max ( A ) = max ∥ x ∥ 2 = 1 x T A x . \lambda_{\max}(A) =\max_{\|x\|_2=1}x^\mathsf{T}Ax. λmax(A)=∥x∥2=1maxxTAx.
因此,求最大特征值可以转化为单位球面上的最小化问题:
min ∥ x ∥ 2 = 1 − x T A x . \min_{\|x\|_2=1}-x^\mathsf{T}Ax. ∥x∥2=1min−xTAx.
Manopt 对这一问题的实现为
matlab
n = 100;
A = randn(n);
A = (A + A')/2;
manifold = spherefactory(n);
problem.M = manifold;
problem.cost = @(x) -x'*(A*x);
problem.egrad = @(x) -2*A*x;
[x, xcost, info] = trustregions(problem);
程序先构造实对称矩阵,再利用 spherefactory(n) 定义单位球面流形。
problem.cost 给出目标函数,problem.egrad 给出欧氏梯度,trustregions 则调用流形信赖域算法求解。
对于单位球面,黎曼梯度是欧氏梯度在切空间上的投影:
grad f ( x ) = ( I − x x T ) ∇ f ( x ) . \operatorname{grad}f(x) =(I-xx^\mathsf{T})\nabla f(x). gradf(x)=(I−xxT)∇f(x).
这里, I − x x T I-xx^\mathsf{T} I−xxT 是投影到球面切空间的正交投影矩阵。
这一关系说明,流形优化算法在计算过程中利用了可行集的几何结构。优化方向与变量所在空间的约束相联系,从而可以直接在流形上组织数值迭代。
Manopt 的其他示例还涉及正交矩阵、子空间和低秩矩阵等问题,适合进一步研究黎曼优化及矩阵计算方法。
官方教程:A First Example
在数值计算的其他分支中,iFEM 包含有限元离散、网格处理和自适应计算方法;gptoolbox 则提供离散微分几何、三维网格处理与相关优化算法。
七、电力系统
电力系统分析需要研究电网在给定运行条件下的电压、功率分布和设备运行状态。潮流计算是其中的基础问题,而最优潮流进一步将运行成本等目标与电网约束联系起来。
MATPOWER:潮流计算与电力系统优化
项目地址:MATPOWER
MATPOWER 是电力系统数值分析领域具有代表性的 MATLAB 项目,包含交流潮流、直流潮流、最优潮流及相关标准算例。
在稳态交流电网中,节点注入功率与电压幅值、电压相角之间存在非线性关系。
以节点 i i i 的有功功率为例:
P i = V i ∑ j = 1 n V j G i j cos ( θ i − θ j ) + B i j sin ( θ i − θ j ) , P_i=V_i\sum_{j=1}^{n}V_j \left G_{ij}\\cos(\\theta_i-\\theta_j) +B_{ij}\\sin(\\theta_i-\\theta_j) \\right, Pi=Vij=1∑nVjGijcos(θi−θj)+Bijsin(θi−θj),
其中, V i V_i Vi 为节点电压幅值, θ i \theta_i θi 为电压相角, G i j G_{ij} Gij 和 B i j B_{ij} Bij 分别表示节点导纳矩阵元素的实部和虚部。
潮流计算需要根据电网拓扑、发电机参数和节点负荷等数据,求解各节点的电压及支路功率。
MATPOWER 内置了多个标准电网算例,使用 runpf 即可进行潮流计算。例如:
matlab
results = runpf('case9');
这一命令对 9 节点系统进行潮流分析。计算结果中包含节点电压幅值、电压相角、发电机出力和支路功率等信息。
在此基础上,还可以研究满足电网运行约束的优化问题。MATPOWER 使用 runopf 求解最优潮流:
matlab
results = runopf('case30');
这里采用内置的 30 节点算例,求解给定网络与运行条件下的最优潮流问题。
通过修改节点负荷、发电机参数或线路数据,可以继续观察系统状态及优化结果的变化。MATPOWER 的标准算例和统一的数据结构,也使其成为研究潮流算法和电网优化模型的常用计算平台。
对于涉及机组组合、经济调度和多时段优化的问题,还可以查阅 MATPOWER 生态中的 MOST。
八、声学与超声成像
声学数值计算研究声波在介质中的传播,而超声成像进一步利用阵列接收到的信号估计介质内部的空间结构。这两个问题分别涉及声场正向计算和信号重建。
k-Wave 与 USTB 分别提供了这两个方向的计算方法。
1. k-Wave:声波传播与声场数值仿真
项目地址:k-Wave
k-Wave 是用于声学和超声传播计算的 MATLAB 工具箱,可以研究均匀或非均匀介质中的声波传播过程。
在均匀、无损介质中,线性声压满足经典波动方程:
∇ 2 p − 1 c 2 ∂ 2 p ∂ t 2 = 0 , \nabla^2p- \frac{1}{c^2} \frac{\partial^2p}{\partial t^2}=0, ∇2p−c21∂t2∂2p=0,
其中, p p p 表示声压, c c c 为介质声速。
k-Wave 采用基于声学一阶耦合方程的 k 空间数值方法进行计算,可以处理更一般的介质参数和声学传播问题。
在官方二维声波传播示例中,程序先建立规则计算网格,设置声速和初始声压分布,再指定用于记录声压的传感器位置。
完成这些设置后,使用以下函数进行声场计算:
matlab
sensor_data = kspaceFirstOrder2D( ...
kgrid, medium, source, sensor);
kgrid 定义空间计算网格,medium 描述介质属性,source 设置声源,sensor 则指定信号记录位置。
运行后,可以得到各传感器记录的声压时间序列。结合声场可视化,还能够观察声波在介质中的传播与波前演化。
这类数值模型也经常用于光声成像研究。例如,给定初始声压分布以后,可以通过正向声学计算获得相应的传感器信号,再以这些数据研究图像重建算法。
官方示例:Homogeneous Propagation Medium
2. USTB:超声波束形成与图像重建
项目地址:UltraSound ToolBox
USTB 主要面向超声通道数据处理、波束形成和图像重建,提供了相应的数据结构、计算接口及实验示例。
在阵列超声成像中,不同接收阵元记录的信号包含来自多个空间位置的散射响应。若要重建某个位置的信号,需要根据声波传播路径计算延时,再将各通道的数据进行校正和合成。
延时求和(Delay-and-Sum,DAS)是其中的基础方法。其接收信号合成过程可以概括为
b ( r ) = ∑ m = 1 M w m ( r ) s m ( τ m ( r ) ) , b(\mathbf r)= \sum_{m=1}^{M} w_m(\mathbf r) s_m\left(\tau_m(\mathbf r)\right), b(r)=m=1∑Mwm(r)sm(τm(r)),
其中, r \mathbf r r 表示待重建的空间位置, s m s_m sm 为第 m m m 个通道的接收信号, τ m \tau_m τm 为相应的延时, w m w_m wm 为通道权重。在实际脉冲回波成像中,总延时还需要考虑发射传播路径。
USTB 将波束形成过程封装为 MATLAB 对象,其典型调用方式为
matlab
mid = midprocess.das();
mid.channel_data = channel_data;
mid.scan = scan;
mid.dimension = dimension.both;
b_data = mid.go();
这里,channel_data 保存超声通道数据,scan 指定重建位置,mid.go() 执行波束形成。
USTB 还包含平面波、发散波、单阵元发射和聚焦发射等不同成像方式的研究示例。
2026 年发表的 The Generalized Beamformer in the UltraSound ToolBox 进一步将多种发射方式组织到统一的广义波束形成框架中,并提供相应的 MATLAB 程序与成像结果。
与 k-Wave 的声场传播计算相比,USTB 的研究重点位于接收信号处理与成像过程。两个项目分别涉及超声系统中的不同计算环节。
官方资源:USTB 项目主页
其他超声相关项目还包括 MUST 和 QUPS。MUST 提供超声发射、接收及成像仿真相关算法;QUPS 则围绕超声系统模型、成像流程和算法原型开发组织计算接口。
九、科研绘图与数据可视化
数值计算完成后,如何整理和展示结果同样影响科研工作的效率。对于包含多个实验组、重复仿真或多变量统计关系的数据,合理的绘图程序能够减少重复操作,并使不同图形之间保持一致的数据组织方式。
1. gramm:统计绘图与分组可视化
项目地址:gramm
gramm 受到 R 语言 ggplot2 图形语法思想的启发,将数据变量与图形元素之间的映射关系作为绘图的基础。
使用 gramm 时,可以指定横轴、纵轴、颜色和分面变量,再通过不同图形层组织散点、曲线、回归结果或统计汇总。
官方提供了汽车数据的示例,用于展示不同年份、汽缸数量和产地的汽车油耗情况。
matlab
load example_data.mat
g = gramm( ...
'x', cars.Model_Year, ...
'y', cars.MPG, ...
'color', cars.Cylinders);
g.geom_point();
g.facet_grid([], cars.Origin_Region);
g.draw();
这里,cars.Model_Year 和 cars.MPG 分别映射到横轴和纵轴,汽缸数量用于区分颜色,产地用于生成不同的分面。
geom_point 添加散点图层,facet_grid 根据指定变量组织子图,最后通过 draw 绘制。
在实验研究中,类似的组织方式可以用于比较不同算法、不同参数和多组实验数据。例如,当一次仿真包含多个参数组合时,可以使用颜色和分面分别表示不同的实验条件,使数据之间的关系更加清晰。
gramm 还包含统计汇总、回归曲线及其他可视化接口,适合处理包含复杂分组关系的实验数据。
2. export_fig:科研图形导出
项目地址:export_fig
MATLAB 图形在用于论文、报告和演示文稿时,通常需要保存为不同的文件格式。针对图像分辨率、矢量输出及背景等需求,export_fig 提供了专门的图形导出接口。
例如,绘制一条简单的曲线并同时导出 PDF 与 PNG 文件:
matlab
plot(1:10, (1:10).^2);
xlabel('x');
ylabel('y');
export_fig('result', '-pdf', '-png');
这段代码会将当前图形保存为 result.pdf 和 result.png。
对于需要生成多张科研图形的工作,可以将 export_fig 与已有的绘图脚本结合,实现批量导出和统一格式设置。
如果主要使用 LaTeX 进行论文写作,还可以关注 matlab2tikz。它能够将 MATLAB 图形转换为 TikZ/PGFPlots 代码,使图形能够进一步融入 LaTeX 排版流程。
十、从开源项目中学习算法与工程实现
本文整理的项目分布在九个研究领域,既包含 Chebfun、Manopt 这样的数学算法工具,也包含 QuaDRiGa、MATPOWER、k-Wave 等面向具体工程问题的计算框架。它们的功能和程序结构各不相同,反映了不同领域处理研究问题的方式。
阅读这些项目时,可以从官方示例中的数据输入、核心函数和计算结果入手,逐步建立对程序整体流程的认识。对于涉及数学算法的项目,还可以结合源码追踪公式中的变量和运算步骤,理解理论模型如何转化为数值计算。
许多科研工具箱同时提供了研究论文、技术报告和实验数据。将这些材料与程序结合阅读,有助于进一步了解算法的提出背景、具体实现及研究方法。
对于长期使用 MATLAB 开展科研和工程开发的读者,积累这样一批经过实际阅读和使用的项目,能够逐渐形成自己的技术资源库。当遇到相关问题时,既可以利用已有程序开展计算,也能够从成熟实现中寻找新的建模与算法思路。