Matlab中fminunc函数的意义以及options函数的初级用法。

本文问题出自Stanford大学 Andrew Ng老师的机器学习week 3  Logistic Regression Model  中出现如下高级函数:

该过程涉及matlab两个函数 fminunc 和options。


1、自定义函数

以图上的自定义函数function [jVal,gradient] = costFunction(theta) 为例。该自定义函数传入一个theta参数,并计算代价值(jVal) 和每次迭代的梯度值(gradient)。


2、fminun函数


形式:[x,fval,exitflag]  = fminunc(fun,x0,options)


该方法需要定义3个输入参数fun,x0和options。

第一个输入参数 fun 定义为 @costFunction。该“@”符号涉及句柄知识,

第二个输入参数 x0 定义为 initialTheta ,该参数为一个 2x1矩阵(2个元素的列向量)。该列向量为用户自定义梯度下降法的输出参数,使用前要预先初始化。

第三个输入参数为 options。该参数的的作用包括是否使用用户自定义的梯度下降公式(GradObj)以及迭代次数(MaxIter)。如上例中,options = optimset('GradObj','on','MaxIter','100'),表示使用了自定义的梯度下降公式并且把迭代次数设为迭代100次。 


该方法的3个输出参数x,fval和exitflag。

第一个输出参数x为上面function [jVal,gradient] = costFunction(theta)中的第二个返回值graient

第二个输出参数fval为costFunction函数的第一个返回值jVal 

第三个输出exitflag返回值为0或1,表示在theta点定义的Jval函数是否收敛

例子中使用了自定义的梯度下降公式(costFunction中的gradient返回值),并且把迭代次数设为迭代100次。 


  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Matlab的fminunc函数是一个用于最小化非线性多元函数的优化器,可以通过以下方式调用: ``` [x,fval,exitflag,output] = fminunc(fun,x0,options) ``` 其,`fun` 是需要最小化的函数句柄或内联函数,`x0` 是初始点,`options` 是包含选项参数的结构体。函数 `fun` 必须返回一个标量函数值和梯度向量,用于计算 Hessian 矩阵的信息可选。 在调用 `fminunc` 函数时,可以通过 `options` 参数来控制优化器的行为,例如最大迭代次数、容差、输出详细程度等。输出参数 `x` 是最小值的位置,`fval` 是最小值,`exitflag` 是指示优化器退出状态的标志,`output` 包含有关优化器执行的详细信息。 例如,以下代码演示了如何使用 `fminunc` 函数找到 Rosenbrock 函数的最小值: ``` % 定义 Rosenbrock 函数 fun = @(x) 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2; % 定义初始点 x0 = [-1.2,1]; % 定义选项参数 options = optimoptions(@fminunc,'Display','iter','Algorithm','quasi-newton'); % 调用 fminunc 函数 [x,fval,exitflag,output] = fminunc(fun,x0,options); ``` 在这个例子,我们使用 `optimoptions` 函数来设置输出详细程度为迭代过程,优化算法为拟牛顿法(quasi-newton)。在 `fminunc` 函数完成后,将返回最小值的位置 `x`,最小值 `fval`,退出状态标志 `exitflag` 和详细信息 `output`。 ### 回答2: fminunc函数Matlab用于最小化非线性多元函数的优化函数。它采用信赖区域算法或拟牛顿算法来最小化函数,并使用梯度和Hessian矩阵来估计搜索方向和步长。 使用fminunc函数需要指定要最小化的目标函数,并提供一个初始点以启动优化过程。除此之外,用户还需提供一些其他选项,如最大迭代次数、容许误差等。这些选项会影响算法的收敛速度和精度。 下面是fminunc函数的基本用法: [x,fval,exitflag,output] = fminunc(fun,x0,options) 其,fun表示要最小化的目标函数,x0表示初始点,options是一些选项参数,包括最大迭代次数、容许误差、算法类型等。返回结果包括最优解x、最小值fval、退出标志exitflag和输出信息output。 fminunc函数还可以接受额外的约束条件,如等式约束和不等式约束。用户可以使用Matlab的fmincon函数来求解带有约束条件的优化问题。 在使用fminunc函数时,需要注意一些事项。首先,目标函数必须是非线性的多元函数,如果是线性函数,可以使用Matlab的线性规划函数来求解。其次,算法的收敛速度和精度受到选项参数的影响,用户需要根据实际问题,选择合适的选项参数来优化算法的性能。最后,由于优化过程基于搜索算法,所以如果初始点不好或搜索范围太小,可能会导致无法找到全局最小值。因此,如果发现找到的最小值很接近边界值或输入的初始点,就需要尝试改变初始点或扩大搜索范围。 总之,fminunc函数Matlab用于优化非线性多元函数的强大工具,可以帮助用户快速求解各种优化问题。但是,用户需要了解算法的原理和注意事项,才能正确使用此函数,并取得满意的优化结果。 ### 回答3: MATLAB是一种流行的科学计算软件,它提供了很多常用的优化函数,如fminunc函数。fminunc函数用于求解无约束优化问题。在本篇文章,我们将探讨fminunc函数用法。 首先,让我们看一下fminunc函数的语法。fminunc函数的语法如下: [x,fval,exitflag,output] = fminunc(fun,x0,options) 其,fun是目标函数句柄,x0是初始点,options是选项结构。 接下来,让我们分别解释这些参数。 1. 目标函数句柄 在使用fminunc函数时,需要定义一个目标函数。这个目标函数应该返回一个值,表示在给定输入参数下的函数值。目标函数句柄是一个指向目标函数的指针,可以使用@符号来创建。例如: fun = @(x) x(1)^2 + x(2)^2; 上述代码定义了一个目标函数,它计算x1和x2的平方和。请注意,目标函数必须接受一个输入向量作为参数。 2. 初始点 fminunc函数需要一个初始点作为优化的起点。初始点可以是一个向量,也可以是一个标量。例如: x0 = [1;2]; 上面的代码定义了一个二维向量作为初始点。 3. 选项结构 在使用fminunc函数时,可以通过选项结构来设置各种选项。选项结构是一个MATLAB结构体,包含各种名值对。以下是一些常用的选项: - 'Display':控制输出级别。 - 'TolFun':指定函数值收敛的容差。 - 'MaxIter':指定最大迭代次数。 - 'GradObj':指定是否提供梯度函数。 以下是一个选项结构的例子: options = optimoptions('fminunc','Display','iter','TolFun',1e-6,'MaxIter',1000); 4. 返回值 fminunc函数返回优化结果的向量x、函数值fval、退出标志exitflag和输出结构output。 退出标志表示fminunc函数的退出情况。它的值可以是以下之一: - 1:函数达到小规模优化条件。 - 2:函数达到最大迭代次数。 - 3:函数不满足可行性条件。 - 4:函数值不再减小。 - 0:函数断。 输出结构包含有关优化的各种信息,例如迭代次数、函数值、梯度值等。 最后,让我们看一下使用fminunc函数的几个例子。 例1. 最小化目标函数x^2 + y^2,初始点为x0=[1;2]。 >> fun = @(x) x(1)^2 + x(2)^2; >> x0 = [1;2]; >> [x,fval,exitflag,output] = fminunc(fun,x0) x = 1.0e-07 * -0.7577 -1.5152 fval = 1.1497e-14 exitflag = 1 output = struct with fields: firstorderopt: 2.8263e-11 iterations: 11 funcCount: 48 algorithm: 'quasi-newton' stepsize: 1.0000 message: 'Optimization terminated: first-order optimality is less than options.TolFun and maximum iterations have been exceeded.' 例2. 最小化目标函数x*sin(x),初始点为x0=1,禁用梯度函数。 >> fun = @(x) x*sin(x); >> x0 = 1; >> options = optimoptions('fminunc','GradObj','off'); >> [x,fval,exitflag,output] = fminunc(fun,x0,options) x = 4.7300 fval = -7.0686e-01 exitflag = 1 output = struct with fields: funcCount: 22 stepsize: 5.6678e-09 algorithm: 'quasi-newton' firstorderopt: 9.3149e-09 message: 'Optimization terminated: first-order optimality is less than options.TolFun.' 从上面的例子可以看出,fminunc函数可以很方便地优化目标函数,而且可以灵活地设置各种选项,以适应不同的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值