数学建模强化宝典(4)fminunc

一、介绍

  fminunc 是 MATLAB 中用于求解无约束多变量非线性优化问题的函数。它尝试找到给定函数的最小值点,不需要用户提供函数的导数信息(尽管如果提供了导数信息,算法通常会更快更准确地收敛)。fminunc 使用的是拟牛顿法(Quasi-Newton methods),特别是 BFGS 算法,这是处理无约束优化问题的一种有效方法。

二、函数语法

fminunc 的基本语法如下:

x = fminunc(fun,x0)  
x = fminunc(fun,x0,options)  
[x,fval] = fminunc(...)  
[x,fval,exitflag,output] = fminunc(...)  
[x,fval,exitflag,output,grad,hessian] = fminunc(...)

  • fun 是待优化的函数,它接受一个向量 x 作为输入,并返回一个标量,即函数在 x 处的值。如果提供了梯度(导数),fun 也可以返回两个输出:函数值和梯度向量。
  • x0 是搜索的起始点,一个n维向量。
  • options 是用于控制优化过程的选项结构体(可选)。
  • x 是找到的最小值点。
  • fval 是在 x 处的函数值。
  • exitflag 描述了算法退出的条件。
  • output 提供了优化过程的详细信息。
  • grad 在函数 fun 返回梯度时可用,是在 x 处的梯度值(可选输出)。
  • hessian 是 x 处的 Hessian 矩阵的近似值(如果算法计算了 Hessian,并且 options.Hessian 设置为 'on',则为可选输出)。

三、示例

       假设我们想要找到函数 f(x,y)=x^2+y^2 的最小值点,这个函数有一个全局最小值在 (0,0)。我们可以定义这个函数并使用 fminunc 来找到它的最小值点:

function f = myfun(x)  
    f = x(1)^2 + x(2)^2;  
end  
  
% 初始猜测  
x0 = [1, 1];  
  
% 执行fminunc  
[x_min, fval] = fminunc(@myfun, x0);  
  
% 显示结果  
disp(['最小值点: ', num2str(x_min)]);  
disp(['最小值: ', num2str(fval)]);

       在这个例子中,@myfun 是一个指向我们定义的 myfun 函数的句柄,x0 是我们选择的初始点。fminunc 会从 x0 开始搜索,并返回它找到的最小值点 x_min 和该点处的函数值 fval

四、注意

       请注意,虽然 fminunc 不要求提供梯度信息,但如果你知道函数的梯度,并且能够以有效的方式计算它,那么将梯度信息提供给 fminunc 可以显著提高算法的性能。这可以通过在 fun 函数中返回函数值和梯度向量来实现,或者通过设置 options 结构体中的相应字段来指定梯度函数。

 结语 

山高自有客行路

水深自有渡船人

!!!

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT 青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值