news 2026/8/27 10:20:32

MATLAB fmincon函数实战:从建模到求解约束优化问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MATLAB fmincon函数实战:从建模到求解约束优化问题

1. 项目概述:当优化问题遇上现实约束

在工程、金融和科研领域,我们常常会遇到这样的问题:如何在一堆限制条件下,找到一个方案,让某个目标达到最好?比如,设计一个零件,在材料强度、重量和成本的约束下,追求性能最优;或者配置一个投资组合,在风险上限和资金总量的约束下,追求收益最大。这类问题在数学上被称为约束优化问题。对于习惯使用MATLAB进行数值计算和建模的朋友来说,fmincon函数就是解决这类问题的“瑞士军刀”。

我最初接触fmincon时,也经历过一段“懵懂”时期。看着官方文档里一大堆输入参数——A,b,Aeq,beq,lb,ub,nonlcon——感觉头都大了。更别提还有内点法、序列二次规划法这些听起来就很高深的算法选项。但经过多个实际项目的锤炼,我发现只要理清思路,fmincon用起来其实非常顺手且强大。它不仅能处理简单的边界约束,还能搞定复杂的线性与非线性等式、不等式约束,是连接理论优化模型和实际工程应用的桥梁。

本文将从一个MATLAB使用者的实战角度,深入剖析fmincon函数。我不会仅仅罗列语法,而是结合具体案例,带你理解每个参数背后的含义,拆解算法选择的逻辑,并分享我在调试和求解过程中积累的一手经验与常见“坑点”。无论你是正在处理课程大作业的学生,还是需要优化产品设计参数的工程师,这篇文章都将帮助你从“会用”进阶到“精通”,真正掌握在约束条件下寻找多元函数最值的能力。

2. 核心思路:理解约束优化与fmincon的定位

在深入代码之前,我们必须从概念上理解fmincon要解决的核心问题。这有助于我们在后面正确设置参数。

2.1 约束优化问题的标准形式

fmincon求解的问题具有如下标准形式:

minimize f(x) subject to: A*x ≤ b Aeq*x = beq c(x) ≤ 0 ceq(x) = 0 lb ≤ x ≤ ub

其中:

  • x是我们的决策变量向量。
  • f(x)是我们要最小化的目标函数(如果是最大化问题,通常转化为-f(x)的最小化)。
  • A*x ≤ bAeq*x = beq线性约束。这是最直观的约束,例如资源总量限制、平衡方程等。
  • c(x) ≤ 0ceq(x) = 0非线性约束。这是更一般、也更复杂的约束,例如几何关系、动力学方程、非线性性能指标等。
  • lb ≤ x ≤ ub变量的上下界(边界约束)。这是最简单也最常用的约束,比如物理尺寸必须为正数,浓度必须在0到1之间。

fmincon的强大之处在于,它能将以上所有类型的约束统一在一个框架内处理。我们的任务,就是根据实际问题,正确地构造出对应的A,b,Aeq,beq,lb,ub矩阵/向量,以及编写出计算c(x)ceq(x)的函数。

2.2 fmincon在MATLAB优化工具箱中的角色

MATLAB优化工具箱提供了多种优化器。fmincon是其中用于光滑非线性规划(NLP)的核心求解器。所谓“光滑”,通常指目标函数和约束函数连续且可微(至少一阶)。虽然它也能处理一些非光滑问题,但性能可能下降。

与无约束优化函数fminuncfminsearch相比,fmincon的核心挑战在于如何高效地处理约束。算法需要在探索最优解的同时,始终让解保持在“可行域”(即满足所有约束的区域)内,或者在违反约束时施加“惩罚”。这导致了其内部算法的复杂性,也意味着我们需要为其提供更多信息(如梯度)来加速收敛。

注意fmincon默认寻找局部最小值,而非全局最小值。优化问题的“地形”可能非常复杂,存在多个低谷(局部最优解)。fmincon的求解结果严重依赖于你提供的初始猜测值x0。这是实践中最重要的一个经验点:多尝试几个不同的初始点,是避免陷入糟糕局部解的最简单有效的方法。

3. fmincon函数详解:参数、语法与算法选择

现在,我们来拆解fmincon的函数调用。其最完整的语法形式如下:

[x, fval, exitflag, output, lambda, grad, hessian] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options)

输出参数很多,但最常用的是前四个:最优解x、最优处的函数值fval、退出标志exitflag和包含迭代信息的结构体output。输入参数是我们要重点配置的。

3.1 核心输入参数拆解

  1. fun:目标函数句柄这是一个函数句柄,例如@myObjective。函数myObjective应接受一个向量x作为输入,返回一个标量值。这是优化的核心。

    function f = myObjective(x) f = x(1)^2 + 2*x(2)^2 - 2*x(1)*x(2) - 4*x(1); % 示例目标函数 end
  2. x0:初始猜测点这是优化的起点。如前所述,x0的选择至关重要。一个好的x0应该尽可能靠近你猜测的最优解,并且必须是一个可行点(即满足所有约束)。如果x0不可行,某些算法(如interior-point)可能无法启动。在实践中,我通常会根据物理意义或经验给出一个粗略的x0,或者从一个满足简单约束(如边界)的随机点开始。

  3. A,b:线性不等式约束它们表示A*x ≤ b。例如,约束x1 + 2*x2 ≤ 103*x1 - x2 ≤ 5,则应构造:

    A = [1, 2; 3, -1]; b = [10; 5];
  4. Aeq,beq:线性等式约束它们表示Aeq*x = beq。例如,约束x1 + x2 = 1,则:

    Aeq = [1, 1]; beq = 1;
  5. lb,ub:变量下界和上界它们是向量,分别指定每个变量的下限和上限。例如,x1 ≥ 0,x2无上界,则:

    lb = [0; -inf]; ub = [inf; inf]; % 对于无上界的变量,用 inf 表示
  6. nonlcon:非线性约束函数句柄这是处理复杂约束的关键。该函数接受x,返回两个向量:非线性不等式约束c(x) ≤ 0和等式约束ceq(x) = 0即使只有一种约束,也必须同时返回两个输出

    function [c, ceq] = myNonlcon(x) % 非线性不等式约束:x1^2 + x2^2 ≤ 1 c = x(1)^2 + x(2)^2 - 1; % 非线性等式约束:x1*x2 = 0.5 ceq = x(1)*x(2) - 0.5; end

    重要心得:在编写nonlcon时,务必确保当约束被满足时,返回值c ≤ 0ceq = 0。一个常见的错误是符号弄反。

3.2 算法选择:四种内建算法解析

fmincon提供了四种主要算法,通过options结构体中的Algorithm选项指定。选择哪种算法,取决于问题的特性和你的需求。

  1. interior-point(内点法,默认算法)

    • 原理:通过在可行域内部构造一条路径逼近边界上的最优解。它通过障碍函数将约束问题转化为一系列无约束问题来求解。
    • 适用场景:大规模问题(变量多)、同时包含线性和非线性约束的问题。它是目前最通用、最稳健的默认选择。
    • 优点:处理不等式约束能力强,对初始点是否严格可行相对宽容。
    • 缺点:对于某些具有大量等式约束的问题,可能不如其他算法高效。
  2. sqp(序列二次规划法)

    • 原理:在每一步迭代中,构造一个二次规划(QP)子问题来近似原问题,通过求解子问题来更新当前点。
    • 适用场景:中小规模问题,特别是目标函数或约束函数评估代价高昂时。因为它通常需要更少的函数调用次数。
    • 优点:在解附近具有超线性收敛速度,效率高。
    • 缺点:对初始点要求较高,需要更靠近最优解才能表现良好。
  3. active-set(有效集法)

    • 原理:猜测哪些约束在最优解处是“激活”的(即等式成立),然后主要在这些约束构成的子空间内进行搜索。
    • 适用场景:问题规模不大,且可以较好地预估哪些约束会是激活状态(例如来自物理直觉)。
    • 优点:能精确满足约束,迭代路径清晰。
    • 缺点:不适合大规模问题,因为有效集的变化可能带来计算开销。
  4. trust-region-reflective(信赖域反射法)

    • 原理:基于信赖域方法,并要求目标函数至少能计算梯度。
    • 适用场景仅具有边界约束和线性等式约束的问题。这是它的主要限制,不能处理非线性约束或线性不等式约束。
    • 优点:对于它适用的问题类型,通常非常高效和稳定。
    • 缺点:适用范围窄。

选择策略:对于新手和大多数问题,直接使用默认的interior-point算法即可。如果你的问题只有边界和线性等式约束,且需要高性能,可以尝试trust-region-reflective。如果函数计算非常耗时,且问题规模不大,可以试试sqp

3.3 优化选项配置

通过optimoptions创建options结构体,可以精细控制求解过程。

options = optimoptions('fmincon', ... 'Display', 'iter', ... % 显示每次迭代信息 'Algorithm', 'interior-point', ... % 选择算法 'MaxFunctionEvaluations', 3000, ... % 最大函数评价次数 'MaxIterations', 1000, ... % 最大迭代次数 'OptimalityTolerance', 1e-6, ... % 一阶最优性容差 'StepTolerance', 1e-10, ... % 步长容差 'ConstraintTolerance', 1e-6); % 约束违反容差
  • Display: 设置为iter可以在命令行窗口看到详细的迭代过程,对于调试非常有用。最终发布代码时可设为off
  • MaxIterationsMaxFunctionEvaluations: 如果优化中途停止,可能是达到了这些限制,可以适当调大。
  • OptimalityTolerance,StepTolerance,ConstraintTolerance: 这些是收敛判据。通常1e-6是一个比较严格且通用的设置。如果问题条件数很大(病态),可能需要放宽容差。

4. 实战案例:从简单到复杂的建模与求解

理论说再多,不如动手做一遍。我们通过三个由浅入深的案例,来完整走一遍使用fmincon的流程。

4.1 案例一:带边界和线性约束的二次规划

问题:最小化目标函数f(x) = x1^2 + x2^2 + x3^2,满足约束:

  1. x1 + 2*x2 - x3 ≥ 4
  2. x1 - x2 + x3 = 2
  3. 0 ≤ x1 ≤ 10,x2 ≥ 0,x3 ≥ 0

建模与求解: 首先,将不等式约束转换为形式:-x1 - 2*x2 + x3 ≤ -4

% 1. 定义目标函数 fun = @(x) x(1)^2 + x(2)^2 + x(3)^2; % 2. 定义初始点 (一个可行的猜测) x0 = [1; 1; 2]; % 可以验证满足约束 % 3. 定义线性不等式约束 A*x <= b A = [-1, -2, 1]; % 对应 -x1 -2*x2 + x3 b = -4; % 4. 定义线性等式约束 Aeq*x = beq Aeq = [1, -1, 1]; beq = 2; % 5. 定义边界 lb <= x <= ub lb = [0; 0; 0]; ub = [10; inf; inf]; % inf 表示无上界 % 6. 调用 fmincon options = optimoptions('fmincon', 'Display', 'final'); [x_opt, fval_opt] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, [], options); disp('最优解:'); disp(x_opt); disp('最优函数值:'); disp(fval_opt);

运行后,你会得到最优解和最优值。这个例子涵盖了边界、线性等式和不等式,是fmincon最典型的应用场景之一。

4.2 案例二:包含非线性约束的几何优化

问题:设计一个圆柱形储罐,在容积固定为V=10 m³的条件下,使其表面积S最小,以节省材料。设底面半径为r,高为h。同时,由于工艺限制,高径比h/(2r)必须在区间[0.8, 1.5]内。

建模

  • 决策变量:x = [r; h]
  • 目标函数(表面积):S(r,h) = 2*pi*r^2 + 2*pi*r*h(最小化)
  • 等式约束(容积):pi*r^2*h = V = 10
  • 不等式约束(高径比):0.8 ≤ h/(2r) ≤ 1.5,即0.8 - h/(2r) ≤ 0h/(2r) - 1.5 ≤ 0
  • 边界约束:r > 0,h > 0

求解: 这里容积约束是非线性等式,高径比约束是非线性不等式。

% 1. 定义目标函数 V = 10; fun = @(x) 2*pi*x(1)^2 + 2*pi*x(1)*x(2); % x(1)=r, x(2)=h % 2. 初始猜测 (根据V=10,假设r=1, 则h=10/pi≈3.18,高径比≈1.59,接近上限) x0 = [1.0; 3.0]; % 3. 边界 lb = [1e-3; 1e-3]; % 接近0的正数,避免除零或对数错误 ub = [inf; inf]; % 4. 非线性约束函数 nonlcon = @tankConstraint; function [c, ceq] = tankConstraint(x) V = 10; % 非线性不等式约束:高径比限制 aspect_ratio = x(2) / (2*x(1)); c = [0.8 - aspect_ratio; % c1 <= 0 即 aspect_ratio >= 0.8 aspect_ratio - 1.5]; % c2 <= 0 即 aspect_ratio <= 1.5 % 非线性等式约束:容积固定 ceq = pi * x(1)^2 * x(2) - V; % ceq = 0 end % 5. 调用 fmincon options = optimoptions('fmincon', 'Display', 'iter', 'Algorithm', 'interior-point'); [x_opt, fval_opt] = fmincon(fun, x0, [], [], [], [], lb, ub, nonlcon, options); fprintf('最优半径 r = %.4f m\n', x_opt(1)); fprintf('最优高度 h = %.4f m\n', x_opt(2)); fprintf('最优表面积 S = %.4f m²\n', fval_opt); fprintf('实际高径比 h/(2r) = %.4f\n', x_opt(2)/(2*x_opt(1))); fprintf('实际容积 pi*r^2*h = %.4f m³\n', pi*x_opt(1)^2*x_opt(2));

运行求解后,你会发现最优解恰好满足容积等式约束,并且高径比约束中的一个被“激活”了(达到边界)。这符合直觉:在固定容积下,使表面积最小的圆柱形状是存在的(理论上是直径等于高度),但工艺约束(高径比范围)改变了这个最优解。

4.3 案例三:参数拟合与逆问题求解

约束优化也常用于参数拟合。假设我们有一个非线性模型y_model = a * exp(-b*x) * sin(c*x + d),我们有一组观测数据(x_data, y_data),需要找到参数[a, b, c, d]使得模型预测与观测数据的误差平方和最小。同时,根据物理意义,我们已知参数b(衰减系数)必须为正,c(频率)必须在某个范围内。

问题:最小化误差sum((y_model - y_data).^2),约束为b > 00.5 ≤ c ≤ 5

求解

% 1. 生成模拟数据(真实参数:a=2, b=0.5, c=2, d=0.1) x_data = linspace(0, 5, 50)'; true_params = [2, 0.5, 2, 0.1]; y_data = true_params(1) * exp(-true_params(2)*x_data) .* sin(true_params(3)*x_data + true_params(4)); y_data = y_data + 0.1*randn(size(y_data)); % 加入一些噪声 % 2. 定义目标函数(误差平方和) fun = @(p) sum( ( p(1)*exp(-p(2)*x_data) .* sin(p(3)*x_data + p(4)) - y_data ).^2 ); % 3. 初始猜测 (可以偏离真实值) x0 = [1.5, 1, 3, 0]; % 4. 设置边界约束 (对应 lb <= x <= ub) % p = [a, b, c, d] lb = [-inf, 0, 0.5, -inf]; % b>=0, c>=0.5 ub = [inf, inf, 5, inf]; % c<=5 % 5. 求解 options = optimoptions('fmincon', 'Display', 'final', 'OptimalityTolerance', 1e-8); [p_opt, sse_opt] = fmincon(fun, x0, [], [], [], [], lb, ub, [], options); % 6. 显示结果 fprintf('真实参数: a=%.2f, b=%.2f, c=%.2f, d=%.2f\n', true_params); fprintf('拟合参数: a=%.4f, b=%.4f, c=%.4f, d=%.4f\n', p_opt); fprintf('误差平方和: %.6f\n', sse_opt); % 7. 绘图对比 y_fit = p_opt(1)*exp(-p_opt(2)*x_data) .* sin(p_opt(3)*x_data + p_opt(4)); figure; plot(x_data, y_data, 'ko', 'MarkerFaceColor', 'k', 'DisplayName', '观测数据'); hold on; plot(x_data, y_fit, 'r-', 'LineWidth', 2, 'DisplayName', '拟合曲线'); xlabel('x'); ylabel('y'); legend; grid on; title('带约束的参数拟合结果');

这个案例展示了如何将实际问题转化为fmincon的求解格式。边界约束lbub在这里起到了关键作用,将参数限制在物理合理的范围内,防止拟合出无意义的解(如负的衰减系数)。

5. 调试技巧、常见问题与性能优化

即使正确设置了问题,求解过程也可能不顺利。以下是我在实践中总结的排查清单和优化建议。

5.1 问题排查清单

fmincon运行出错或结果不理想时,请按以下顺序检查:

问题现象可能原因检查与解决步骤
退出标志exitflag≤ 0未收敛或失败。1. 查看output.message获取详细信息。
2. 最常见:迭代次数或函数评价次数不足。增大options.MaxIterationsoptions.MaxFunctionEvaluations
3. 初始点x0不可行(尤其对某些算法)。检查x0是否满足所有约束,或换用interior-point算法。
4. 目标函数或约束函数在某个点返回了NaNInf。添加断点或try-catch检查函数输出。
结果对初始点x0敏感问题存在多个局部最优解。1. 从多个不同的初始点(特别是可行域内分散的点)运行优化,比较结果。
2. 考虑使用全局优化方法(如GlobalSearchMultiStart)包装fmincon,但这会显著增加计算量。
收敛速度慢问题条件数大(病态),或缩放不当。1.缩放变量:确保所有决策变量的数量级大致相同(如都在0~10或-1~1之间)。fmincon对变量缩放很敏感。例如,如果x1约1e6,x2约1e-3,应进行缩放。
2.缩放目标函数:如果fval非常大或非常小,尝试乘以一个缩放因子,使其数量级在1附近。
3. 提供解析梯度(见5.2节)。
约束违反求解器返回的解略微违反了约束。1. 这是数值计算的常态。检查违反程度是否在options.ConstraintTolerance(默认1e-6)之内。如果是,可以接受。
2. 如果违反严重,可能是收敛容差设置太松,或者问题本身不可行(约束互相矛盾)。检查约束条件。
“解”明显不合理模型或约束定义有误。1.双重检查约束的符号。确保A*x ≤ bc(x) ≤ 0的定义是正确的。这是最高频的错误。
2. 在初始点x0处手动计算目标函数和所有约束函数的值,验证函数编写是否正确。
3. 绘制目标函数和约束的示意图(对于2维问题),直观感受可行域和最优解的可能位置。

5.2 性能优化:提供梯度信息

默认情况下,fmincon使用有限差分法来数值估算目标函数和约束的梯度(导数)。这个过程需要多次调用函数,计算成本高且可能不精确。提供解析梯度是加速收敛、提高精度最有效的手段。

为目标函数提供梯度: 修改目标函数,使其返回两个输出:函数值和梯度向量。

function [f, gradf] = myObjectiveWithGradient(x) f = x(1)^2 + 2*x(2)^2 - 2*x(1)*x(2) - 4*x(1); % 计算梯度 [df/dx1, df/dx2] gradf = [2*x(1) - 2*x(2) - 4; 4*x(2) - 2*x(1)]; end

然后在options中指定:

options = optimoptions('fmincon', 'SpecifyObjectiveGradient', true);

为非线性约束提供梯度(更复杂但收益巨大): 需要计算约束的雅可比矩阵。对于约束[c, ceq],雅可比矩阵是它们的梯度(转置)的集合。

function [c, ceq, gradc, gradceq] = myNonlconWithGradient(x) % 约束值 c = x(1)^2 + x(2)^2 - 1; ceq = x(1)*x(2) - 0.5; % 约束梯度 (雅可比矩阵的转置) if nargout > 2 gradc = [2*x(1); 2*x(2)]; % dc/dx 的转置,是2x1向量 gradceq = [x(2); x(1)]; % dceq/dx 的转置 end end

options中指定:

options = optimoptions('fmincon', 'SpecifyConstraintGradient', true);

提供梯度后,求解器的迭代次数和函数调用次数通常会大幅下降,尤其对于中大型问题。

5.3 处理非光滑问题与整数变量

fmincon本质上是为光滑问题设计的。如果你的目标函数或约束包含abs(),min(),max()if-else分支导致不可导,可能会遇到困难。

  • 近似处理:用光滑函数近似非光滑部分。例如,用sqrt(x^2 + epsilon)近似abs(x),其中epsilon是一个很小的正数(如1e-6)。
  • 重构问题:有时可以通过引入辅助变量将问题转化为光滑问题。例如,最小化abs(f(x))可以转化为最小化t,并添加约束-t ≤ f(x) ≤ t
  • 使用专用求解器:对于包含整数或离散变量的问题(混合整数非线性规划,MINLP),fmincon无法直接求解。需要借助ga(遗传算法)或第三方工具箱如OPTIToolbox,或者使用intlinprog(针对线性问题)结合外部循环。

6. 高级应用:与Simulink结合及大规模问题部署

对于更复杂的工程系统,优化模型可能不是一个显式的数学函数,而是一个仿真模型(如 Simulink)。fmincon同样可以处理这类问题。

6.1 与Simulink模型集成

思路是将 Simulink 仿真封装成一个 MATLAB 函数,该函数接受设计变量x作为输入,运行仿真,并返回一个标量目标值(如性能指标)和约束违反量。

function [f, c, ceq] = simObjectiveAndConstraint(x) % x 是设计参数,例如控制器增益、几何尺寸等 % 1. 将 x 赋值给 Simulink 模型的工作空间变量或模块参数 assignin('base', 'Kp', x(1)); assignin('base', 'Ki', x(2)); % 或者使用 set_param % set_param('myModel/Gain', 'Gain', num2str(x(1))); % 2. 运行仿真 simOut = sim('mySimulinkModel', 'StopTime', '10'); % 3. 从仿真输出中提取数据 yout = simOut.logsout.get('y').Values.Data; t = simOut.tout; % 4. 计算目标函数,例如积分误差 f = trapz(t, yout.^2); % 假设最小化误差平方的积分 % 5. 计算约束,例如超调量小于5% overshoot = (max(yout) - yout(end)) / yout(end); c = overshoot - 0.05; % c <= 0 即 overshoot <= 5% ceq = []; % 没有非线性等式约束 end

然后,将这个函数句柄@simObjectiveAndConstraint传递给fmincon。需要注意的是,每次优化迭代都会运行一次仿真,计算成本可能很高。务必设置合理的MaxIterationsMaxFunctionEvaluations,并考虑使用并行计算(UseParallel选项)来同时评估多个点。

6.2 处理大规模稀疏问题

当你的优化问题有成千上万个变量,但约束矩阵A,Aeq中大部分元素为零(稀疏)时,直接使用稠密矩阵会浪费大量内存和计算时间。

关键技巧:使用 MATLAB 的稀疏矩阵格式来创建AAeq

% 假设有1000个变量,只有第1和第500个变量之间存在一个等式约束:x1 = x500 n = 1000; Aeq = sparse(1, n); % 创建一个1行n列的稀疏矩阵 Aeq(1, 1) = 1; Aeq(1, 500) = -1; beq = 0;

对于interior-point算法,求解器会自动检测稀疏性并采用稀疏线性代数求解,能极大提升大规模问题的求解效率。在定义目标函数和约束函数的梯度时,也应考虑返回稀疏梯度向量。

最后,我想分享一个最深刻的体会:使用fmincon成功的关键,三分在算法,七分在建模。花时间清晰地定义你的变量、目标函数和约束,仔细检查它们的数学和物理意义,往往比盲目调整算法参数更有效。当求解器报错或给出奇怪结果时,首先回归到你的问题定义本身,用手算或简单脚本验证几个关键点。把fmincon看作一个强大的执行者,而你的核心价值,在于为它提供一个正确且表述清晰的“任务书”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 10:19:45

从Token到Next Token:一文读懂大语言模型生成原理

这篇并不是又一个“用框架搭 AI 应用”的教程&#xff0c;而是回到一个最简单的起点&#xff1a;LLM 到底是怎么工作的&#xff1f;如果之前被各种概念绕晕过&#xff0c;那么这篇文章直接帮你把“Token”和“Next Token Prediction”这两个词吃透。项目标题“The Next Token –…

作者头像 李华
网站建设 2026/8/27 10:18:40

Muon优化器与Mamba:状态空间模型的谱优化实战

状态空间模型&#xff08;SSM&#xff09;在长序列建模上提供了一条不同于 Transformer 的技术路线。Mamba 通过选择性扫描机制让模型能够根据输入决定“记住什么、忘掉什么”&#xff0c;并在推理阶段保持线性复杂度&#xff0c;这是它被广泛讨论的核心原因。真正把 Mamba 从论…

作者头像 李华
网站建设 2026/8/27 10:18:01

Matlab/Simulink 二维查表导入Excel表格数据的方法总结

首先新建一个二维查表 新建数据字典 选择新建数据字典新建变量编辑变量的值直接将表格数据粘贴进去即可新建三个变量如下双击打开二维查表&#xff0c;配置和结果如下原表格内容如下

作者头像 李华
网站建设 2026/8/27 10:14:32

智能体测开Day59

demo03采购管理采购单号 全局唯一采购日期商品名称商品数量采购总金额状态&#xff1a;待审核、已下单、已入库、已取消增 post json格式的参数 /purchase_add删 post json格式的参数 /purchase_delete改 post json格式的参数 /purchase_modify全量查 …

作者头像 李华
网站建设 2026/8/27 10:10:53

用AssetStudio快速解包Unity资源

用AssetStudio快速解包Unity资源 【免费下载链接】AssetStudio AssetStudio is a tool for exploring, extracting and exporting assets and assetbundles. 项目地址: https://gitcode.com/gh_mirrors/as/AssetStudio 打开游戏里抠出来的 .asset 或 AssetBundle 文件&a…

作者头像 李华
网站建设 2026/8/27 10:02:23

基于MATLAB的储药柜多目标优化设计:数学建模与遗传算法实践

1. 项目概述&#xff1a;当数学建模遇上实体设计 最近在整理一些过往的项目资料&#xff0c;翻到了一个挺有意思的课题——储药柜的设计。这听起来像是个工业设计或者机械工程的活儿&#xff0c;对吧&#xff1f;但当时我们接到的需求&#xff0c;核心是要用数学建模的方法&…

作者头像 李华