MATLAB 中的 fminsearch

2025 年 7 月 25 日 | 阅读 6 分钟

引言

在数值计算和优化的领域,MATLAB 提供了各种强大的工具来解决复杂的数学和工程问题。其中一个重要的工具就是 fminsearch,它是一个用于最小化多个变量的标量函数(通常称为单变量函数)的函数。fminsearch 基于 Nelder-Mead 单纯形法开发,尤其适用于优化那些没有解析形式、具有噪声特性或表现出不连续性的函数。值得注意的是,当函数的梯度信息不可用或难以获取时,它是一个受欢迎的选择。

语法

fminsearch 的基本语法如下:

其中,`fun` 表示需要最小化的目标函数,`x0` 表示最小值的初始猜测值。此外,可选的 `options` 参数允许自定义,提供了一种指定各种参数(如显示选项、终止容差、最大迭代次数等)的机制。

  • 执行后,该函数将返回最小值 `x` 和该最小值处的相应函数值。此外,`exit flag` 输出信号指示算法终止的原因,而 `output` 结构体提供了关于优化过程的宝贵信息。

使用 fminsearch

在使用 fminsearch 时,主要步骤是定义需要最小化的目标函数。该函数必须接受一个向量输入并返回一个标量输出。在 MATLAB 中,可以通过匿名函数方便地在线定义目标函数,从而简化代码结构。

例如,考虑以下示例:

输出

fminsearch in MATLAB

需要注意的是,初始猜测值的选择对算法的收敛行为有显著影响。如果目标函数有多个局部最小值,算法可能会收敛到局部最小值而不是全局最小值。因此,研究人员和从业者必须谨慎,并了解特定优化问题的性质。

Nelder-Mead 单纯形算法

在底层,fminsearch 利用 Nelder-Mead 单纯形法,这是一种启发式优化技术,适用于梯度信息不可访问或不可靠的问题。这种直接搜索方法旨在迭代地更新单纯形(一个由 n+1 个顶点组成的几何图形,位于 n 维空间中),目标是每一步都减小目标函数的值。

该算法包含几个关键步骤:

初始化:在参数空间中开始一个初始单纯形,通常围绕用户提供的初始猜测值构建。

反射:通过超出质心(排除最差点)来计算反射点。

扩展:如果反射点比当前最佳点产生更好的结果,则考虑在该方向上进一步扩展单纯形。

收缩:如果反射点不是最佳的,但仍然比第二差的点好,则进行收缩以探索反射点和质心之间的区域。

缩减:如果以上所有步骤都失败,则执行缩减以将单纯形向最佳点收缩。

通过迭代地应用这些步骤,算法试图在指定的容差内或在一定迭代次数后近似目标函数的最小值。

fminsearch 使用的 Nelder-Mead 单纯形方法是一种直接搜索技术,无需函数梯度。因此,它可以用于优化复杂函数,而无需导数数据。为了最小化目标函数,算法首先构建一个单纯形,这是三角形的多维推广。然后,它会迭代地重塑和变换单纯形。

函数

在这种情况下,`options` 是一个可选参数,允许您更改优化过程;`fun` 是表示目标函数的函数句柄;`x0` 是优化过程的起点或第一个估计值。

目标函数

函数应能够接受向量输入 `x`,并返回表示目标函数在该特定点的值的标量值。为了使优化过程成功,函数必须被精确定义。

自定义和选项

fminsearch 提供了各种选项,可以根据特定需求微调优化过程。用户可以控制迭代信息的显示,设置终止标准,调整步长等。理解和利用这些选项可以显著影响收敛速度和结果的准确性。

一些可用的关键选项包括:

显示选项:调整迭代信息的显示级别,允许用户密切监控优化过程。

容差:设置终止容差,以定义最小值可接受的精度级别。

最大迭代次数:指定算法收敛所需的允许最大迭代次数。

步长:调整单纯形更新中使用的步长,以控制探索和利用的平衡。

通过明智地设置这些选项,用户可以调整算法的行为,以实现计算效率和准确性之间的所需平衡。

最佳实践和注意事项

要有效地利用 fminsearch,至关重要的是要考虑几个最佳实践和影响优化过程的因素:

初始猜测:选择合适的初始猜测对于确保收敛到全局最小值至关重要。尝试不同的初始猜测可以提供对目标函数行为的宝贵见解。

目标函数特性:理解目标函数的特性,例如存在多个局部最小值或噪声行为,对于成功优化至关重要。

容差和迭代次数:仔细设置终止容差和最大迭代次数,允许用户在计算资源和所需的精度之间取得平衡。

显示信息:通过调整显示选项监控优化过程,有助于诊断潜在问题和理解算法的行为。

全局优化:对于具有多个局部最小值的复杂问题,请考虑使用全局优化方法,例如遗传算法或模拟退火,以确保收敛到全局最小值。

通过遵循这些最佳实践和考虑因素,用户可以利用 fminsearch 的全部潜力,并高效有效地解决各种优化挑战。

  • 当梯度信息不易获得时,fminsearch 是 MATLAB 中解决优化问题的基本工具。
  • 它利用强大的 Nelder-Mead 单纯形方法,能够最小化单变量函数,使其在工程、数学和科学的各种应用中特别有用。
  • 通过理解其语法、工作原理、自定义选项和最佳实践,用户可以有效地运用 fminsearch 并获得复杂优化问题的最优解。

高级用法

对于更复杂的优化问题或特定情况,您可以探索 MATLAB 提供的其他优化技术,例如用于约束优化的 fmincon 或其他基于导数的优化算法。

当目标函数必须在满足一组等式或不等式约束的情况下进行优化时,fmincon 函数专门用于解决约束优化问题。

  • fmincon 利用序列二次规划或内点技术有效地遍历优化地形,确保解满足给定的约束。
  • 这一功能在许多实际应用中非常有用,例如运筹学、工程设计和金融领域,其中优化问题通常涉及必须满足的复杂约束以及优化目标。

此外,MATLAB 还提供了多种基于导数的优化算法,对于需要使用梯度信息的任务,它们在收敛时间和效率方面比 fminsearch 表现更好。诸如序列二次规划(SQP)方法、内点法和信赖域反射算法(TRR)等算法利用梯度信息来更有效地导航优化地形。这通常可以带来更快的收敛和更精确的结果,尤其是在高维和复杂的优化问题中。

  • 利用优化工具箱和强大的 MATLAB 编程语言,MATLAB 用户除了内置优化函数外,还可以创建自己的自定义优化算法。

通过结合先进的数值优化技术和 MATLAB 编程环境的灵活性,用户可以为特定的问题领域定制优化算法,调整它们以适应特定的约束、独特的问题结构或性能需求。

跨学科:从工程到科学及其他领域,优化都依赖于此。fminsearch 是 MATLAB 计算工具箱中最有用的函数之一,它提供了一种强大的方法来最小化函数,而无需依赖其梯度。fminsearch 因其高效的 Nelder-Mead 单纯形技术实现,已成为解决不可微、有噪声或不连续函数优化问题的首选工具。