You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB fminsearch求最小值报错及两种方法差异咨询

问题1:第一种方法的错误原因

你在第一种方法里踩了fminsearch的核心规则坑——fminsearch要求目标函数必须返回一个标量值,但你的inner_fun返回的是一个4×1的向量:

myFun = (vector - b_mat*x).^2;

这里vector - b_mat*x是4个元素的残差向量,逐元素平方后还是4个元素的向量。fminsearch无法对向量进行最小化计算,因为它不知道要以哪个维度为优化目标,这就是报错的直接原因。

修正方法很简单,把向量的平方和求和,转换成标量的残差平方和即可:

myFun = sum((vector - b_mat*x).^2);

这样inner_fun就返回一个标量,完全符合fminsearch的输入要求。


问题2:两种实现方法的核心差异

这两种方法本质上都是求解非线性最小二乘问题(最小化残差向量的平方和),但在工具选择、实现逻辑和适用场景上有显著区别:

1. 求解器定位不同

  • 第一种方法用的fminsearch是通用无约束局部优化器,基于Nelder-Mead单纯形算法,不需要目标函数的梯度信息,适合处理非光滑、无法求导的标量目标函数。但它不是为最小二乘问题专门设计的,对于这类问题的效率和精度都不如专用工具。
  • 第二种方法用的lsqnonlin是专门的非线性最小二乘求解器,针对“最小化残差向量平方和”这类问题做了深度优化。你指定的levenberg-marquardt算法尤其适合中小规模的非线性最小二乘问题,收敛速度更快,结果更稳定。

2. 目标函数定义逻辑不同

  • 用fminsearch时,你需要手动把残差向量转换成标量的平方和(也就是我们刚才修正的点),因为它只能处理标量目标。
  • 用lsqnonlin时,你只需要返回残差向量本身,求解器会自动帮你计算平方和并完成优化,不需要手动求和,这是它的设计优势。

3. 优化控制能力不同

  • fminsearch的可调参数较少,主要是迭代次数、容差这类基础设置,适合快速简单的优化场景。
  • lsqnonlin提供了丰富的优化选项(比如你设置的Algorithm和Display),还支持约束条件(虽然你这里没用到),能更精细地控制优化过程,适合复杂的最小二乘问题。

内容的提问来源于stack exchange,提问作者Kyv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:26:23