很多人在学数值分析时都会遇到同一个尴尬教材上的公式能看懂推导过程也跟得上但合上书面对一个实际工程问题却不知道第一行代码该怎么写。这不是数学基础的问题而是数值分析这门课天然缺少了“把连续数学问题变成计算机算法”的衔接环节。MATLAB 之所以长期是数值分析教学和工程应用的主流工具核心原因不是语法优雅而是它把“验证一个算法想法”的成本降到了极低几行代码、一个矩阵运算十分钟内就能看到结果。这种低摩擦试错体验对学习数值分析非常重要。大谦 MATLAB 这套免费数值分析教程的价值就在于把“课本算法”和“可运行程序”之间的断层补了一部分。但看教程和动手写代码始终是两件事。这篇文章不打算复述教程内容而是围绕数值分析最常见的三类问题——线性方程组求解、数据拟合、常微分方程数值解——给出可以直接复制运行的 MATLAB 示例并解释每段代码背后的算法思路和最容易踩的坑。读完这篇文章你能得到三样东西第一弄清楚数值分析到底在解决什么问题为什么工程中离不开它第二照着示例跑通三个典型数值计算场景第三遇到结果不对时知道第一步该查什么、怎么排查。1. 这篇文章真正要解决的问题1.1 数值分析为什么容易卡住先做一个判断数值分析的学习障碍通常不在“算法原理”而在“从公式到代码”的翻译过程。课本上告诉你牛顿迭代法怎么推导、高斯消元法怎么消元但到了 MATLAB 里你会发现你面对的是矩阵怎么构造、索引怎么写、循环边界在哪里、精度不够怎么办。这些细节教材不会讲老师也未必有时间展开。于是很多人的学习路径变成了“看懂理论、背下公式、考试通过”但到做课程设计或处理真实数据时仍然无从下手。这也是为什么“大谦 MATLAB数值分析”这类免费教程能受到关注。它把抽象的算法落到可运行的脚本里让学习者看到的不只是“算法长什么样”还有“算法跑起来是什么效果”。这种可视化反馈是纯理论教材给不了的。1.2 谁适合读这篇文章这篇文章适合三类读者第一类是正在学《数值分析》或《计算方法》课程的学生。你需要的不是再听一遍理论而是能跑通的示例以及示例背后的思路。第二类是做科研或工程项目的开发者。你手里有数据要做拟合、有方程组要解、有微分方程要仿真但不希望从头啃一遍数值分析教材只想快速用 MATLAB 得到可靠结果。第三类是刚接触 MATLAB 的初学者。你想知道数值分析在 MATLAB 里到底怎么落地以及点乘和矩阵乘、符号计算和数值计算这些基础概念为什么关键。如果你属于其中任何一类下面的内容都值得看完。2. 数值分析与 MATLAB 的核心概念2.1 什么是数值分析数值分析简单说就是研究“怎么用计算机求数学问题的近似解”的学科。很多实际问题没有解析解或者解析解存在但计算量太大这时候就需要用数值方法在有限精度下得到足够好的近似结果。比如方程 (x^3 - 2x - 5 0)理论上可以用求根公式但工程中遇到的高次方程、超越方程往往没有简洁的解析解。数值分析要解决的就是这类问题。它关心三件事算法是否收敛、误差有多大、计算代价是否可接受。在 MATLAB 中数值分析相关的功能分散在基础矩阵运算、优化工具箱、符号数学工具箱以及各种求解器中。但真正核心的是你是否理解“离散化、迭代、逼近、误差”这几个思想。理解了这些工具只是表达思想的语法。2.2 MATLAB 在数值分析中的角色MATLAB 的底层是高度优化的矩阵运算库。数值分析里大量算法本质上都可以归结为矩阵运算。你写一行A \ b底层调用的是经过多年优化的线性方程组求解器可能自动选择 LU 分解、Cholesky 分解或其他方法。这不是让你丢掉算法原理。恰恰相反只有理解了高斯消元、选主元、条件数的概念你才知道什么时候A \ b会出问题以及为什么结果可能不可靠。MATLAB 的作用是把你从“每步都手写”的重复劳动中解放出来让你把精力放在算法选择、误差分析和结果验证上。2.3 符号计算与数值计算必须分清初学 MATLAB 的人很容易混淆两个概念符号计算和数值计算。符号计算是把数学表达式当作符号对象处理得到的是公式。比如用syms x定义符号变量后对x^3 - 2*x求导得到的是3*x^2 - 2这个公式而不是某个具体数字。数值计算则相反输入和输出都是具体数值求解过程在有限精度下进行。在数值分析里绝大多数场景是数值计算。你需要的是“给定这些数据点求出拟合参数”“给定初值算出每一步的状态”而不是“推导出一个通项公式”。但符号计算可以用来验证算法的正确性因为你可以先用解析解推导出答案再和数值结果对比。很多教程里把这两者混在一起讲导致初学者误以为diff求出来的导数可以直接用在数值算法里这是后续很多 bug 的来源。下面这张表可以帮你快速区分对比维度符号计算数值计算输入符号变量、表达式具体数值或数组输出解析公式近似数值精度理论精确受限于浮点数典型函数syms, diff, int, solveA\b, polyfit, ode45适用场景公式推导、解析验证工程仿真、数据分析2.4 点乘和矩阵乘最容易翻车的两个符号MATLAB 新手最常见的错误之一就是搞不清*和.*的区别。*是矩阵乘法遵循线性代数中的矩阵相乘规则要求前一个矩阵的列数等于后一个矩阵的行数。.*是逐元素相乘要求两个数组维度相同对应位置相乘得到新数组。数值分析中你经常需要处理“对每个元素做相同运算”的场景。比如有一个向量x想计算y x.^2这是逐元素平方必须用点运算。如果写成x^2MATLAB 会尝试做矩阵乘法要么报维度错误要么得到完全错误的结果。同样/和./的区别也类似。这看起来是小事但实际调试中维度不一致和错误结果大多源于此。建议你从第一天起就形成习惯数组运算需要逐元素操作时明确写出点号。3. MATLAB 环境准备与基本操作3.1 选择版本与获取途径在开始写代码前需要先有一个能运行的 MATLAB 环境。版本选择没有绝对标准以当前官网最新稳定版为准即可。不同大版本的界面略有差异但核心命令和脚本语法基本保持一致。要注意的是部分工具箱需要单独授权比如优化工具箱、符号数学工具箱安装时确认你需要的组件已经勾选。获取方式上常见的有三种学校或单位提供的正版许可、官网试用版、MATLAB Online。MATLAB Online 的好处是不需要本地安装浏览器打开就能用适合快速测试小段代码。如果你暂时没有 MATLAB 许可也可以考虑 GNU Octave 来验证大部分基础脚本但工具箱和个别函数可能存在差异正式项目仍建议以 MATLAB 为准。不建议使用任何非官方渠道的破解或密钥。数值分析本身已经够复杂犯不着再把环境问题变成另一个风险源。3.2 用脚本组织代码初学者最常犯的一个习惯是直接在命令行窗口逐行敲代码。这种方式适合验证一条命令但不适合做数值分析因为你很难复现、修改和检查结果。更推荐的做法是写脚本文件。点击“新建脚本”或直接输入edit myscript.m把代码按逻辑分段写入文件然后点击运行。脚本的优点是所有命令按顺序执行中间变量会保留在工作区方便你查看每一步的结果。如果你的代码会被多个脚本复用比如自定义了一个高斯消元函数建议写成函数文件保存到当前路径或在 MATLAB 路径设置中添加对应文件夹。否则会出现“函数未定义”的错误。3.3 最常用的几个基础操作在进入数值分析示例前先熟悉几个基础操作。下面的代码演示了矩阵创建、矩阵乘法和逐元素乘法的区别% 文件路径basic_ops.m A [1 2; 3 4]; % 2x2 矩阵 b [1; 1]; % 2 行 1 列向量 x A \ b; % 解线性方程组 Ax b disp(解向量 x ); disp(x); % 演示 * 和 .* 的区别 c [1 2 3]; d [2 3 4]; disp(c * d); % 矩阵乘法结果是标量1*2 2*3 3*4 20 disp(c .* d); % 逐元素乘法结果是 [2 6 12]disp用来在命令行显示变量内容。A \ b是 MATLAB 中解线性方程组的核心写法它比直接写inv(A) * b更高效、数值上更稳定这一点后面还会展开。4. 把数学问题拆成 MATLAB 程序的思路4.1 五个典型数值分析问题数值分析的内容很广但工程中经常遇到的可以归纳为五类问题类型数学描述MATLAB 典型函数方程求根求 f(x) 0 的根fzero, roots线性方程组求 Ax bA\b, lu, inv插值与拟合已知散点求近似函数interp1, polyfit, polyval数值积分求定积分近似值integral, trapz常微分方程求 y f(t,y) 的数值解ode45, ode15s理解这五类问题的共同点你会发现它们都在做同一件事把连续问题离散化然后通过有限步计算逼近精确结果。离散化的步长、逼近的阶数、误差的控制就是数值分析要研究的核心问题。4.2 从模型到代码的四步拆解法很多初学者拿到问题后直接开始写代码结果越写越乱。更稳妥的流程是四步走第一步写出数学模型。哪怕是论文里的公式也要先明确哪个是未知量、哪个是已知量、边界条件和初值是什么。第二步选择算法。方程是线性的还是非线性的矩阵是稠密还是稀疏方程是刚性的吗不同问题对应不同算法不能一概而论。第三步离散化设计。把连续区间划分成网格把导数替换成差分把积分替换成求和。这一步决定了你的代码结构和计算量。第四步实现和验证。在 MATLAB 中写出代码后先用一个已知解析解的小例子验证算法再扩展到真实问题。这套流程看起来简单但能避免大量“写了两百行代码才发现思路错了”的无效劳动。后续每一个示例我都会按这个顺序展开。5. 示例一线性方程组的求解与自定义高斯消元5.1 问题描述线性方程组求解是数值分析最基础的问题也是很多算法模块的内部组成部分。工程中常见的需求包括电路网络计算、结构力学分析、数据拟合中的正规方程求解等。这里用一个小型方程组作为示例2x y - z 8 -3x - y 2z -11 -2x y 2z -3这个方程组的解是整数便于我们验证算法正确性。实际工程中矩阵往往很大但可验证的小例子是调试算法的第一步也应该成为你的习惯。5.2 直接用矩阵左除求解MATLAB 中解线性方程组最推荐的方式是A \ b而不是inv(A) * b。这是因为左除运算内部会根据矩阵结构自动选择合适的分解方法并且在数值稳定性上优于显式求逆。来看代码% 文件路径solve_linear_system.m A [2 1 -1; -3 -1 2; -2 1 2]; b [8; -11; -3]; x A \ b; fprintf(x %.4f\n, x(1)); fprintf(y %.4f\n, x(2)); fprintf(z %.4f\n, x(3)); % 验证计算残差 r A * x - b; fprintf(残差范数: %.2e\n, norm(r));代码里的fprintf是格式化输出函数%.4f表示保留四位小数norm(r)计算残差向量的 2-范数。残差越接近 0说明求解结果越准确。对于这个例子残差应该在 (10^{-14}) 量级。5.3 自己写一个高斯消元函数虽然 MATLAB 提供了现成的求解器但学习阶段很有必要自己实现一次高斯消元因为这会让你真正理解选主元、消元、回代三个关键步骤。下面这个函数实现了带部分选主元的高斯消元适用于系数矩阵非奇异的情况% 文件路径myGaussElimination.m function x myGaussElimination(A, b) % 用高斯消元法求解 Ax b % A 必须是方阵且非奇异 n length(b); M [A, b]; % 构造增广矩阵 for k 1:n-1 % 部分主元选择把当前列绝对值最大的行换到上方 [~, idx] max(abs(M(k:n, k))); idx idx k - 1; if idx ~ k M([k, idx], :) M([idx, k], :); end % 消元将第 k 列下方的元素化为 0 for i k1:n factor M(i, k) / M(k, k); M(i, k:n1) M(i, k:n1) - factor * M(k, k:n1); end end % 回代从最后一行开始向上求解 x zeros(n, 1); for i n:-1:1 if i n x(i) (M(i, n1) - sum(M(i, i1:n) .* x(i1:n))) / M(i, i); else x(i) M(i, n1) / M(i, i); end end end有几个细节值得解释。第一部分选主元这一步不是可选项。如果不做选主元当某个主元接近 0 时会出现严重的数值误差甚至直接除零报错。第二消元循环中M(i, k:n1)表示修改整行而不仅仅是后面的列。第三回代时用到了.*逐元素乘法这说明前面的点乘概念在实际代码中马上就会用到。在命令行中调用这个函数A [2 1 -1; -3 -1 2; -2 1 2]; b [8; -11; -3]; x_custom myGaussElimination(A, b); disp(x_custom);5.4 对比结果与讨论对于这个示例两种方式得到的解都应该接近x 2, y 3, z -1。如果自定义函数和 MATLAB 内置结果一致说明你理解了算法核心如果结果偏差较大优先检查选主元逻辑和回代边界。这个示例还引出一个重要概念条件数。如果矩阵的条件数很大矩阵就是病态的微小的输入误差会引起结果的剧烈波动。即便求解算法本身正确结果也可能不可靠。你可以用cond(A)查看矩阵条件数在工程应用中这是一个稳定性的重要指标。6. 示例二数据拟合——别只追求“次数高”6.1 问题背景数据拟合是实验室数据处理中最常见的需求。比如你测了一批实验数据分布于一条近似二次曲线的周围但带有测量噪声。你需要找到一个函数模型使它尽可能逼近这组数据的整体趋势。这里要区分“插值”和“拟合”。插值要求拟合函数必须经过每一个数据点适合数据本身很精确、不允许误差的场景。拟合则允许函数不必经过所有点而是使整体误差最小化适合带噪声的实验数据。数值分析中最常用的是最小二乘拟合。6.2 polyfit 与 polyval 组合MATLAB 中做多项式拟合最直接的方式是polyfit和polyval的组合。polyfit根据数据点拟合多项式系数polyval用多项式系数计算新点的函数值。看下面的完整示例% 文件路径fit_example.m % 生成带噪声的模拟数据真实函数为 0.3*x^2 - 1.2*x 5 x (0:0.5:10); y_true 0.3 * x.^2 - 1.2 * x 5; rng(1); % 固定随机数种子保证结果可复现 y y_true 2 * randn(size(x)); % 添加高斯噪声 % 拟合一次、二次、三次多项式 p1 polyfit(x, y, 1); p2 polyfit(x, y, 2); p3 polyfit(x, y, 3); % 在密集网格上计算拟合值用于画图 xq linspace(0, 10, 200); y1 polyval(p1, xq); y2 polyval(p2, xq); y3 polyval(p3, xq); % 计算二次拟合的残差范数 res2 y - polyval(p2, x); fprintf(二次拟合残差范数: %.4f\n, norm(res2)); % 画图对比 plot(x, y, o, DisplayName, 原始数据); hold on; plot(xq, y1, --, DisplayName, 一次拟合); plot(xq, y2, -, DisplayName, 二次拟合); plot(xq, y3, :, DisplayName, 三次拟合); legend show; grid on; xlabel(x); ylabel(y); title(多项式拟合效果对比);代码中的rng(1)很重要它固定了随机数生成器的种子保证每次运行生成的噪声一致便于复现。randn生成标准正态分布随机数这里乘以 2 表示噪声标准差为 2。6.3 如何判断拟合好坏拟合效果不能只看“次数越高越好”。一次拟合是一条直线无法表达曲线趋势拟合不足二次拟合基本符合真实函数的二次结构效果较好三次拟合比二次多一个参数通常能略微降低残差但多项式的次数越高越容易出现过拟合也就是为了拟合噪声而出现异常波动。从工程角度看判断拟合好坏有三个标准。第一模型是否符合问题的物理背景二次模型本身合理就没必要用高次多项式硬套。第二观察残差是否随机分布如果残差有明显规律说明模型形式选错了。第三用交叉验证或预留测试集评估泛化能力而不只看训练数据上的残差。拟合之后用polyval(p, x_new)可以在新数据点上计算预测值。这是拟合结果真正被使用的地方比如根据已知数据预测未知状态。7. 示例三常微分方程的欧拉法与 ode457.1 问题模型常微分方程数值解是仿真领域的核心内容。物理系统的运动、化学反应的浓度变化、生物种群的数量波动都可以用常微分方程描述。大多数情况下解析解不存在必须借助数值方法。这里用一个有解析解的简单方程来演示(y -2xy)初值 (y(0) 1)。这个方程的解析解是 (y e^{-x^2})所以我们可以精确地验证数值方法的误差。7.2 欧拉法实现欧拉法是最简单的数值方法思想是用差分代替导数给定当前点 ((x_i, y_i))用切线方向前进一步即 (y_{i1} y_i h f(x_i, y_i))。它的优点是代码简单缺点是精度较低。% 文件路径ode_euler.m h 0.05; % 步长 x_span 0:h:2; % 积分区间 [0, 2] n length(x_span); y_euler zeros(n, 1); y_euler(1) 1; % 初值 for i 1:n-1 y_euler(i1) y_euler(i) h * (-2 * x_span(i) * y_euler(i)); end % 解析解 y_exact exp(-x_span.^2); % 输出终点误差 fprintf(欧拉法终点误差: %.2e\n, abs(y_euler(end) - exp(-4))); % 画图对比 plot(x_span, y_exact, k-, LineWidth, 1.5, DisplayName, 解析解); hold on; plot(x_span, y_euler, r--, DisplayName, 欧拉法); legend show; grid on; xlabel(x); ylabel(y); title(欧拉法求解常微分方程);步长h的选择直接影响误差。步长越小误差越小但计算量也越大。对于欧拉法误差通常随步长线性下降所以它属于一阶方法。7.3 ode45 求解器对比MATLAB 的ode45是更高级的求解器基于龙格-库塔法的自适应变步长实现。它会自动调整步长以满足精度要求大多数非刚性问题都可以用它。% 文件路径ode_ode45.m f (x, y) -2 * x * y; % 定义微分方程右端函数 [x_ode, y_ode] ode45(f, [0 2], 1); fprintf(ode45 终点误差: %.2e\n, abs(y_ode(end) - exp(-4))); % 把 ode45 的结果画在同一张图上 figure; plot(x_ode, y_ode, b-, DisplayName, ode45); hold on; xq 0:0.01:2; plot(xq, exp(-xq.^2), k--, DisplayName, 解析解); legend show; grid on; xlabel(x); ylabel(y); title(ode45 求解常微分方程);注意ode45的输入格式第一个参数是函数句柄第二个参数是时间或自变量的区间第三个参数是初值。函数句柄用(x, y)定义匿名函数这在 MATLAB 数值计算中非常常见。对比欧拉法和 ode45 的结果你会发现两点。其一欧拉法在步长 0.05 时已经有可见误差在区间末端误差可能达到 (10^{-2}) 量级。其二ode45 的误差通常可以到 (10^{-6}) 甚至更小而且它不需要你手动选择步长。这说明了算法选择对数值结果质量的巨大影响。8. 运行结果与效果验证8.1 运行方式与预期输出把上述示例保存为.m文件后在命令行直接输入文件名或在编辑器中点击运行按钮即可。预期输出大致如下线性方程组示例x 2.0000 y 3.0000 z -1.0000 残差范数: 1.11e-15数据拟合示例会输出一个残差范数并弹出对比图图中可以看到一次拟合为直线二次拟合贴近真实二次曲线三次拟合与二次拟合差别不大。常微分方程示例会输出两个误差数值并分别弹出两张对比图。ode45 的误差明显小于欧拉法。8.2 数值方法的正确性判断运行结果不等于正确结果。判断数值方法是否正确建议按以下顺序检查第一是否有解析解或已知特解。用简单特解验证代码逻辑比如上面两个例子都用了解析解对比。第二步观察残差或误差量级是否合理。如果残差达到 (10^2)说明代码大概率有 bug如果达到 (10^{-14})说明求解成功。第三改变步长或网格密度看结果是否稳定收敛。如果结果对步长极其敏感说明算法可能不稳定。遇到结果不对时不要急着怀疑 MATLAB先检查输入数据、矩阵维度、用了*还是.*、初值是否设对。绝大多数数值计算错误都出在这些基础环节。9. 常见问题与排查思路下面的表格整理了 MATLAB 数值分析学习中最常遇到的问题。如果你在跑示例时遇到报错可以先对照排查。问题现象可能原因排查方式解决方案矩阵维度不一致用了*代替.*或矩阵构造错误查看报错信息检查两个数组的 size需要逐元素运算时改用.*或./结果是 NaN 或 Inf除零、步长过大、初始值不合理检查分母是否可能为 0打印中间变量加入选主元或调整步长检查初值函数未定义函数文件名与函数名不一致或未添加到路径使用which 函数名查看路径保持文件名和函数名一致添加路径ode45 计算很慢或报错方程可能刚性或右端函数有奇异性查看求解器提示尝试缩小区间尝试 ode15s 等刚性求解器中文注释乱码文件编码问题检查文件保存编码建议统一使用 UTF-8或改用英文注释结果和理论差很多算法选择错误或数据噪声太大对比解析解检查残差分布换更高阶方法检查模型是否合理plot画不出图没有加hold on导致后画的图覆盖前一个检查绘图代码顺序多个图形叠加时使用hold on在工程实践中还有一个容易忽略的问题不要覆盖 MATLAB 内置函数名。比如把自定义函数命名成mean.m或sum.m会导致内置函数被你的文件遮蔽项目越大越难排查。10. 最佳实践与工程建议10.1 从“能跑”到“可维护”数值分析脚本很容易写成“一次性代码”跑完就丢。但如果这个算法要在项目里长期使用建议尽早建立几个习惯。变量命名要清晰。A、b、x这类数学符号在算法实现中没问题但对工程调用者不友好。在函数入口处写明每个参数的含义和维度出口处说明返回值。用注释解释算法关键步骤尤其是选主元、终止条件、步长选择这些容易引发 bug 的地方。把算法封装成函数而不是把所有逻辑堆在脚本里。函数的好处是可以单独测试独立验证也便于在不同脚本中复用。上面写的高斯消元函数就是一个例子封装后你可以对任意合适规模的矩阵调用它。10.2 向量化优先避免无脑循环MATLAB 的循环效率低于向量化运算。在数据量不大时差异不明显但一旦矩阵规模到几千乘几千循环和向量化的性能差距会非常明显。向量化不是不去想算法而是用矩阵语言重新表达算法。比如对数组每个元素求平方写成x.^2而不是写 for 循环。数值分析中的很多算法天然可以用矩阵运算表达这本身就是 MATLAB 的优势。当然“向量化优先”不等于“所有循环都是错的”。一些迭代算法比如牛顿法、时间步进本质上是串行的必须用循环。推荐的做法是先写清楚算法逻辑再识别哪些步骤可以合并成矩阵运算最后用tic/toc验证性能瓶颈。10.3 每次都做残差和误差检查不少初学者跑出数值结果后直接写进报告这是很危险的习惯。数值方法计算的是近似解近似解是否可靠必须验证。这里的验证手段包括用解析解特例测试、计算残差范数、查看条件数、对不同网格尺寸做收敛性分析、对随机噪声做多次重复实验。尤其是拟合和微分方程求解建议把“残差图”作为标准输出的一部分。残差有规律地变化说明模型选择有问题残差随机散布在 0 附近说明拟合合理。10.4 学习路径建议如果你正在跟随大谦 MATLAB 这类免费数值分析教程学习我建议把学习路径设计成“三遍式”。第一遍跟着教程把基本概念过一遍了解数值方法在解决什么问题用教程中的代码在 MATLAB 里跑通。第二遍不参考教程独立复现每个算法并故意改动参数观察误差和稳定性的变化。第三遍把学到的算法迁移到自己的项目中比如课程设计、科研数据处理或控制仿真。动手过程中可以尝试一些综合性问题。比如用随机游走模型模拟醉汉行走轨迹计算每一步的位移统计用fft分析一段信号用trapz或integral计算不规则积分用fzero求解非线性方程。这些练习能帮你把零散知识点串起来。10.5 明确工具箱边界MATLAB 的功能靠工具箱扩展但很多基础数值分析功能不需要额外工具箱。矩阵左除、polyfit、fzero、ode45都是基础模块的一部分多数许可证默认包含。如果涉及偏微分方程、优化、符号推导可能需要对应工具箱。在项目开始前先确认你的许可中包含哪些工具箱避免写了一半发现函数调不到。另外部分函数在不同版本中行为有细微差异遇到结果不一致时查阅当前版本的官方文档比依赖记忆更可靠。11. 总结与后续学习方向这篇文章围绕“数值分析到底在解决什么问题”展开借助 MATLAB 把三类最核心的数值问题做了完整的落地演示。线性方程组求解展示了矩阵左除和自定义高斯消元的区别数据拟合展示了多项式拟合的模型选择逻辑常微分方程展示了欧拉法和 ode45 的精度差异。比记住这三个示例更重要的是你带走的方法论遇到数值问题时先建立数学模型再选择算法再做离散化设计最后用已知特解验证。这套流程比任何具体函数都值得保存。如果你正在看大谦 MATLAB 的免费教程建议把它当成“地图”而不是“终点”。看一节就在 MATLAB 里动手改一节改出 bug 再查资料解决这个过程中建立的代码直觉比反复看视频更有效。下一步你可以往偏微分方程数值解、数值优化、信号处理、Simulink 仿真等方向深入。这些领域都以本文提到的基础算法为底座方程离散化、矩阵运算、误差分析和收敛性判断。把地基打牢再往上走会顺畅很多。现在最值得做的就是打开 MATLAB把上面三个示例亲手跑一遍。