–
基础篇
–
工具指南
–
科研工作流
–
提示词模板
–
附录
–
– MATLAB
目录
–
1. 简介与适用场景
–
什么时候优先用 MATLAB
–
AI 能做 / 不能做
–
最小闭环案例
–
2026 年可关注的变化
–
2. 安装与配置
–
获取方式
–
安装要点
–
推荐的初始配置
–
3. AI辅助使用核心技巧
–
对话式AI(Claude/ChatGPT/DeepSeek)
–
生成代码
–
解读报错
–
优化代码
–
编程辅助AI(Claude Code/Codex/Cursor/Copilot)
–
AI 生成代码的验收清单
–
4. 常见任务与提示词示例
–
场景1:信号处理 — FFT频谱分析
–
场景2:Publication级别绘图
–
场景3:自定义模型曲线拟合
–
场景4:批量数据处理
–
场景5:调试报错
–
5. 常见问题与排错
–
AI能帮你快速解决的问题
–
需要人工判断的注意事项
–
常见报错速查
–
6. 进阶资源
–
本仓库示例脚本
–
官方文档
–
推荐学习路径
–
实用技巧
– 科研工作流
–
提示词模板
– 附录
–
课题组信息与本地约定
–
更新日志
目录
–
1. 简介与适用场景
–
什么时候优先用 MATLAB
–
AI 能做 / 不能做
–
最小闭环案例
–
2026 年可关注的变化
–
2. 安装与配置
–
获取方式
–
安装要点
–
推荐的初始配置
–
3. AI辅助使用核心技巧
–
对话式AI(Claude/ChatGPT/DeepSeek)
–
生成代码
–
解读报错
–
优化代码
–
编程辅助AI(Claude Code/Codex/Cursor/Copilot)
–
AI 生成代码的验收清单
–
4. 常见任务与提示词示例
–
场景1:信号处理 — FFT频谱分析
–
场景2:Publication级别绘图
–
场景3:自定义模型曲线拟合
–
场景4:批量数据处理
–
场景5:调试报错
–
5. 常见问题与排错
–
AI能帮你快速解决的问题
–
需要人工判断的注意事项
–
常见报错速查
–
6. 进阶资源
–
本仓库示例脚本
–
官方文档
–
推荐学习路径
–
实用技巧
# MATLAB — AI辅助使用指南
**本章导读** :按「简介与场景 → 安装配置 → AI 辅助技巧 → 示例与排错 → 进阶资源」组织,可按需跳读。
版本与功能时效
本章按 MATLAB/Simulink R2026a 公开资料和常见科研脚本工作流整理。不同学校授权的工具箱差异很大,使用 AI 生成代码前请确认 MATLAB 版本、已安装工具箱和目标运行环境。
## 1. 简介与适用场景
MATLAB 是矩阵实验室(Matrix Laboratory)的缩写,是科研领域最广泛使用的数值计算和编程环境。在课题组中,MATLAB 主要用于:
– **数据处理** :光谱数据、图像数据、信号数据的分析与处理
– **数值计算** :矩阵运算、微分方程求解、最优化
– **信号处理** :FFT、滤波、频谱分析
– **绘图与可视化** :publication 级别的科学绘图
– **仿真** :配合 Simulink 进行系统仿真
– **自动化** :批量处理实验数据、自动化测试流程
### 什么时候优先用 MATLAB
| 场景 | 建议 | 原因 |
—
| 批量处理实验数据和生成论文图 | 推荐 | 脚本可复现,矩阵和绘图能力强 |
| FFT、滤波、拟合、优化、统计 | 推荐 | 工具箱成熟,适合科研计算 |
| 需要和既有 `.m` 代码或 Simulink 项目协作 | 推荐 | 兼容组内历史脚本 |
| 临时整理复杂表格 | 谨慎 | Excel / Python pandas 往往更顺手 |
| 超大数据、深度学习工程化部署 | 谨慎 | Python 生态和服务器环境可能更合适 |
### AI 能做 / 不能做
| AI 适合做 | 必须人工确认 |
—|
| 生成 `.m` 脚本、函数和绘图模板 | 算法选择和统计假设是否正确 |
| 解释报错、向量化代码、补注释 | 输入数据单位、采样率、边界条件 |
| 用 Agent 整理多文件项目 | 拟合结果、置信区间和残差是否合理 |
| 生成最小测试数据和验证脚本 | 工具箱依赖和版本兼容 |
### 最小闭环案例
1. 读取 `docs/assets/test_data/signal_data.csv`。
2. 用 AI 生成 FFT 分析脚本,输出频谱图和峰值频率。
3. 保存 `scripts/fft_analysis.m`、`figures/fft_spectrum.png` 和关键结果表。
4. 检查采样率、窗函数、频率轴和峰值标注是否正确。
### 2026 年可关注的变化
– **R2026a** :MathWorks 已发布 R2026a,包含性能、图形/App 构建和 Simulink 工作流更新。
– **Simulink Copilot** :R2026a 引入面向工程系统开发的生成式 AI 能力;如果课题涉及控制、嵌入式或系统级仿真,可关注学校授权是否包含相关功能。
– **Python 互操作** :MATLAB 与 Python 联合工作越来越常见,适合把仪器数据处理、机器学习或批量文件处理拆到 Python,再用 MATLAB 做既有分析流程。
– **可复现实验记录** :论文脚本建议记录 `version`、工具箱版本、随机种子和输入数据哈希。
## 2. 安装与配置
### 获取方式
大多数高校都有 MATLAB 校园授权(Site License),通过学校网络即可免费使用:
1. 访问
mathworks.com
2. 用学校邮箱注册 MathWorks 账号
3. 在学校网络环境下(或连接校园VPN)激活许可证
4. 下载并安装 MATLAB
### 安装要点
– **选择性安装工具箱** :默认安装所有工具箱会占用大量空间。建议先安装基础包,后续按需添加:
– 信号处理:Signal Processing Toolbox
– 图像处理:Image Processing Toolbox
– 统计分析:Statistics and Machine Learning Toolbox
– 曲线拟合:Curve Fitting Toolbox
– 优化:Optimization Toolbox
– **路径设置** :将常用脚本文件夹添加到 MATLAB 路径:`Set Path → Add with Subfolders`
– **编辑器配置** :开启自动补全、代码折叠、实时编辑器
### 推荐的初始配置
“`
% 在 startup.m 中添加(位于 ~/Documents/MATLAB/startup.m) % 设置默认绘图字体和线宽 set(0, ‘DefaultAxesFontSize’, 12); set(0, ‘DefaultAxesFontName’, ‘Helvetica’); set(0, ‘DefaultLineLineWidth’, 1.5); set(0, ‘DefaultFigureColor’, ‘w’); set(0, ‘DefaultAxesColor’, ‘k’);
“`
## 3. AI辅助使用核心技巧
### 对话式AI(Claude/ChatGPT/DeepSeek)
#### 生成代码
最直接的用法——描述你的需求,让 AI 生成 MATLAB 代码:
– **明确输入输出** :告诉 AI 数据的维度、格式、想要的结果
– **指定工具箱** :如果需要特定工具箱函数,明确说明
– **要求注释** :让 AI 在代码中添加注释,方便理解和修改
#### 解读报错
将 MATLAB 的错误信息完整复制给 AI:
– 包含完整的错误堆栈(stack trace)
– 说明你想要实现什么
– AI 通常能快速定位问题并给出修复方案
#### 优化代码
已有可运行但效率低下的代码,让 AI 帮你优化:
– 向量化替代循环
– 预分配内存
– 使用更高效的内置函数
### 编程辅助AI(Claude Code/Codex/Cursor/Copilot)
– **Claude Code / Codex CLI** :适合维护包含多个 `.m`、测试数据和导出图脚本的项目。让 Agent 改代码前,限定目录并要求运行最小测试。
– **Cursor** :适合在项目内搜索函数依赖、重构批处理脚本、解释较长的 MATLAB 文件。
– **Copilot** :在 VS Code 中编辑 `.m` 文件时可提供补全。
– 注意:多数 AI 工具对 MATLAB 的理解不如 Python 稳定,关键数值结果必须自己验证。
### AI 生成代码的验收清单
1. **先跑小样本** :用 5–10 行数据或已知答案验证输入输出。
2. **检查工具箱依赖** :让 AI 列出用到的工具箱和替代实现。
3. **固定随机性** :涉及拟合、优化、机器学习时设置 `rng(seed)`。
4. **记录环境** :在脚本开头输出 `version`、`ver`、输入文件名和关键参数。
5. **图表可复现** :论文图不要只保存 `.fig`,同时保存生成脚本、原始数据和导出命令。
## 4. 常见任务与提示词示例
### 场景1:信号处理 — FFT频谱分析
**提示词** :
我有一组时域信号数据存储在 CSV 文件中,第一列是时间(秒),第二列是幅值。采样率是 10kHz。请帮我写一个 MATLAB 脚本,完成以下任务: 1. 读取 CSV 数据 2. 去除直流分量 3. 做FFT变换,计算幅度谱 4. 画出频谱图,x轴为频率(Hz),y轴为幅值,只显示0-2000Hz范围 5. 标注峰值频率 要求:使用汉宁窗,输出300dpi的PNG图片
**预期输出** :完整的 .m 脚本,包含数据读取、预处理、FFT、绘图
“`
% FFT频谱分析脚本 data = readmatrix(‘signal_data.csv’); t = data(:, 1); signal = data(:, 2); % 参数 fs = 10000; % 采样率 10kHz N = length(signal); % 去除直流分量 signal = signal – mean(signal); % 汉宁窗 window = hanning(N); signal_windowed = signal .* window; % FFT Y = fft(signal_windowed); P2 = abs(Y / N); % 双边谱 P1 = P2(1:N/2+1); % 单边谱 P1(2:end-1) = 2*P1(2:end-1); f = fs*(0:(N/2))/N; % 绘图 figure(‘Position’, [100 100 800 500]); plot(f, P1, ‘LineWidth’, 1.5); xlim([0 2000]); xlabel(‘Frequency (Hz)’); ylabel(‘Amplitude’); title(‘FFT Spectrum’); % 标注峰值 [~, idx] = max(P1); text(f(idx), P1(idx), sprintf(‘ Peak: %.1f Hz’, f(idx)), … ‘FontSize’, 11, ‘Color’, ‘r’); print(‘fft_spectrum’, ‘-dpng’, ‘-r300’);
“`
### 场景2:Publication级别绘图
**提示词** :
请帮我写一个 MATLAB 绘图脚本,要求符合论文发表标准: – 有3组数据需要画在同一个图中(3条线),数据分别存在 data1.csv, data2.csv, data3.csv – 每个CSV第一列是x(波长nm),第二列是y(透过率%) – 使用不同颜色和线型区分(实线、虚线、点划线) – 图例放在图内右上角 – 字体统一 Helvetica 12pt – 坐标轴加粗,线宽1.5pt – 输出为 EPS 格式,适合 LaTeX 论文使用 – 图片尺寸 8cm x 6cm(双栏论文的半栏宽度)
**预期输出** :完整绘图脚本
“`
% Publication-quality plotting figure(‘Units’, ‘centimeters’, ‘Position’, [2 2 8 6]); % 读取数据 d1 = readmatrix(‘data1.csv’); d2 = readmatrix(‘data2.csv’); d3 = readmatrix(‘data3.csv’); % 绘图 h1 = plot(d1(:,1), d1(:,2), ‘k-‘, ‘LineWidth’, 1.5); hold on; h2 = plot(d2(:,1), d2(:,2), ‘r–‘, ‘LineWidth’, 1.5); h3 = plot(d3(:,1), d3(:,2), ‘b-.’, ‘LineWidth’, 1.5); % 格式设置 set(gca, ‘FontSize’, 12, ‘FontName’, ‘Helvetica’, … ‘LineWidth’, 1.2, ‘Box’, ‘on’); xlabel(‘Wavelength (nm)’); ylabel(‘Transmittance (%)’); % 图例 legend([h1 h2 h3], {‘Sample A’, ‘Sample B’, ‘Sample C’}, … ‘Location’, ‘northeast’, ‘FontSize’, 10); % 输出 print(‘transmittance’, ‘-depsc’, ‘-r300’);
“`
### 场景3:自定义模型曲线拟合
**提示词** :
我需要用 MATLAB 对实验数据进行非线性曲线拟合。我的物理模型是一个洛伦兹峰: y = A \* (gamma/2)^2 / ((x – x0)^2 + (gamma/2)^2) + B 其中 A 是振幅,x0 是中心频率,gamma 是半高全宽(FWHM),B 是基线偏移。
实验数据在 fit_data.csv 中,第一列是 x,第二列是 y。 请帮我: 1. 写拟合代码,用 lsqcurvefit 或 fit 函数 2. 设置合理的初始猜测值(x0大约在1550附近) 3. 画出原始数据和拟合曲线的对比图 4. 输出拟合参数和95%置信区间 5. 计算R-squared
**预期输出** :完整拟合脚本
“`
% Lorentzian curve fitting data = readmatrix(‘fit_data.csv’); xdata = data(:, 1); ydata = data(:, 2); % Lorentzian 模型 lorentz = @(p, x) p(1) * (p(3)/2)^2 ./ ((x – p(2)).^2 + (p(3)/2)^2) + p(4); % 初始猜测 [A, x0, gamma, B] p0 = [1, 1550, 10, 0]; % 拟合 [p_fit, resnorm, residual, exitflag, output, lambda, jacobian] = … lsqcurvefit(lorentz, p0, xdata, ydata); % 置信区间 ci = nlparci(p_fit, residual, jacobian); % R-squared SS_res = sum(residual.^2); SS_tot = sum((ydata – mean(ydata)).^2); R2 = 1 – SS_res / SS_tot; % 输出结果 fprintf(‘A = %.4f [%.4f, %.4f]\n’, p_fit(1), ci(1,1), ci(1,2)); fprintf(‘x0 = %.4f [%.4f, %.4f]\n’, p_fit(2), ci(2,1), ci(2,2)); fprintf(‘gamma = %.4f [%.4f, %.4f]\n’, p_fit(3), ci(3,1), ci(3,2)); fprintf(‘B = %.4f [%.4f, %.4f]\n’, p_fit(4), ci(4,1), ci(4,2)); fprintf(‘R^2 = %.6f\n’, R2); % 绘图 figure; plot(xdata, ydata, ‘ko’, ‘MarkerSize’, 4, ‘MarkerFaceColor’, ‘k’); hold on; xfine = linspace(min(xdata), max(xdata), 500); plot(xfine, lorentz(p_fit, xfine), ‘r-‘, ‘LineWidth’, 1.5); xlabel(‘Frequency (THz)’); ylabel(‘Intensity (a.u.)’); legend(‘Data’, ‘Lorentzian Fit’, ‘Location’, ‘northwest’);
“`
### 场景4:批量数据处理
**提示词** :
我有一个文件夹 data/,里面有100个 CSV 文件,命名格式为 sample_001.csv 到 sample_100.csv。每个文件结构相同:第一列波长(nm),第二列透过率(%)。
请帮我写一个脚本: 1. 自动遍历所有CSV文件 2. 对每个文件计算:中心波长、峰值透过率、半高全宽(FWHM) 3. 将所有结果汇总到一个表格并保存为 results.csv 4. 画出100条曲线的叠加图
**预期输出** :批量处理脚本
“`
% Batch data processing fileList = dir(‘data/sample_*.csv’); nFiles = length(fileList); results = zeros(nFiles, 4); % [filename, center, peak, FWHM] figure; hold on; colors = parula(nFiles); for i = 1:nFiles % 读取数据 data = readmatrix(fullfile(‘data’, fileList(i).name)); wavelength = data(:, 1); transmittance = data(:, 2); % 绘制叠加图 plot(wavelength, transmittance, ‘Color’, colors(i,:)); % 计算指标 [peak_val, peak_idx] = max(transmittance); center_wl = wavelength(peak_idx); % FWHM 计算 half_max = peak_val / 2; above_half = transmittance >= half_max; fwhm = wavelength(find(above_half, 1, ‘last’)) – … wavelength(find(above_half, 1, ‘first’)); results(i, 🙂 = [i, center_wl, peak_val, fwhm]; end xlabel(‘Wavelength (nm)’); ylabel(‘Transmittance (%)’); title(‘All Samples Overlay’); % 保存结果 T = array2table(results, ‘VariableNames’, … {‘SampleID’, ‘CenterWavelength’, ‘PeakTransmittance’, ‘FWHM’}); writetable(T, ‘results.csv’);
“`
### 场景5:调试报错
**提示词** :
我运行以下 MATLAB 代码时报错了,请帮我分析和修复:
“`
A = rand(100, 3); B = rand(50, 3); C = A * B’;
“`
错误信息:
“`
Error using *
Incorrect dimensions for matrix multiplication.
“`
我想计算 A 中每行和 B 中每行的欧氏距离,得到 100×50 的距离矩阵。
**预期输出** :AI 会解释维度不匹配的原因,并给出正确的实现方式
“`
% 方法1:循环(直观但较慢) C = zeros(100, 50); for i = 1:100 for j = 1:50 C(i,j) = norm(A(i,:) – B(j,:)); end end % 方法2:向量化(推荐,更快) C = pdist2(A, B); % 需要 Statistics Toolbox % 方法3:纯向量化(无需工具箱) C = sqrt(sum(A.^2, 2) + sum(B.^2, 2)’ – 2 * A * B’);
“`
## 5. 常见问题与排错
### AI能帮你快速解决的问题
| 问题 | AI协助方式 |
—|
| 函数用法不清楚 | 直接问 AI,比查文档快 |
| 矩阵维度不匹配 | 贴出错误信息和代码,AI 通常秒解 |
| 绘图格式调整 | 描述你想要的效果,AI 生成格式代码 |
| 工具箱函数选择 | 描述任务,AI 推荐最合适的函数 |
| 代码运行太慢 | 贴出代码,AI 帮你向量化优化 |
### 需要人工判断的注意事项
– **数值精度** :AI 生成的算法可能不够数值稳定,需自行验证
– **物理合理性** :拟合结果的物理意义必须人工判断
– **工具箱依赖** :AI 可能使用了你没有安装的工具箱函数,注意检查
– **版本差异** :AI 可能用较新版本的语法,旧版 MATLAB 可能不支持
### 常见报错速查
| 报错 | 常见原因 | 快速修复 |
—
| `Index exceeds matrix dimensions` | 索引越界 | 检查矩阵大小,用 `size()` 确认 |
| `Incorrect dimensions for matrix multiplication` | 维度不匹配 | 检查 `size(A)` 和 `size(B)` |
| `Undefined function or variable` | 变量未定义或函数不存在 | 检查拼写、路径、工具箱 |
| `Not enough input arguments` | 函数调用参数不够 | 查看函数签名 `help funcName` |
## 6. 进阶资源
### 本仓库示例脚本
以下文件位于 `docs/assets/examples/`,构建站点后也可通过站点内链接直接下载;克隆本仓库时路径相同。
–
matlab_publication_plot.m
— publication 级别折线图模板(含尺寸、字体、导出格式)
–
matlab_fft_spectrum.m
— FFT 与频谱分析示例
### 官方文档
– MATLAB 官方文档:
mathworks.com/help/matlab
– MATLAB Academy(免费在线课程):
[mathworks.com/learn/tutorials/m
—
来源:https://2dmaterial-lab.github.io/AIUserManual/03-matlab/