matlab使用教程(22)—非线性优化函数的设置

news2024/12/29 19:44:20

1.设置优化选项

        可以使用由 optimset 函数创建的 options 结构体来指定优化参数。然后,可以将 options 作为输入传递给优化函数,例如,通过使用以下语法调用 fminbnd
x = fminbnd(fun,x1,x2,options)
        或使用以下语法调用 fminsearch
x = fminsearch(fun,x0,options)
        例如,要显示算法在每次迭代中的输出,请将 Display 选项设置为 'iter'
options = optimset( 'Display' , 'iter' );

1.1 容差和终止条件

        优化中的迭代次数取决于求解器的终止条件。这些条件包括几个可以设置的容差。一般来说,容差是一个阈值,超过阈值时将终止求解器的迭代。
        提示: 一般情况下,将 TolFun TolX 容差设置为远高于 eps 并通常高于 1e-14。设置小容差并不能保证得到精确的结果。相反,求解器在收敛时无法识别,并可能继续进行无用的迭代。容差值小于 eps 实际上是禁用了这种终止条件。此技巧不适用于 fzero ,它为 TolX 使用默认值 eps
        • TolX 是步长的下界,表示 (x i – x i+1 ) 的范数。如果求解器尝试小于 TolX 的步长,则终止迭代。求解器通常将 TolX 用作相对边界,表示在达到 |(x i – x i+1 )| < TolX *(1 + |x i |) 或类似的相对测度时终止迭代。
        • TolFun 是步长中目标函数值变化的下边界。如果 |f(x i ) – f(x i+1 )| < TolFun,则终止迭代。求解器通常将 TolFun 用作相对边界,表示在达到 |f(x i ) – f(x i+1 )| < TolFun (1 + |f(x i )|) 或类似的相对测度时终止迭代。
        • MaxIter 是求解器迭代数量的边界。 MaxFunEvals 是函数求值数量的边界。
        注意:与其他求解器不同, fminsearch 在同时满足 TolFun TolX 时停止运行。

1.2 输出结构体

        output 结构体包括函数计算次数、迭代次数和算法。当为 fminbnd fminsearch fzero 提供第四个输出参数时,将显示此结构体,如下所示
[x,fval,exitflag,output] = fminbnd(@humps,0.3,1);
        函数参考页面上提供了每个求解器的 output 结构体的详细信息。
        output 结构体选项不能选择用于 optimset 。它是 fminbnd fminsearch fzero 的可选输出。

2.优化求解器迭代输出

        通过使用 optimset Display 选项设置为 'iter',可以获取求解器采取的步骤的详细信息。显示的输出包含以下列表中的标题和项。

3. 优化求解器输出函数

        输出函数是优化函数在算法的每次迭代过程中调用的函数。通常,使用输出函数生成图输出,记录算法生成的数据的历史信息,或者根据当前迭代的数据暂停算法。可以按函数文件、局部函数或嵌套函数的形式创建输出函数。
        OutputFcn 选项可以与下列 MATLAB 优化函数配合使用:
        • fminbnd
        • fminsearch
        • fzero

3.1 创建和使用输出函数

        下面给出了输出函数的一个简单示例,该输出函数绘制优化函数生成的点。
function stop = outfun(x, optimValues, state)
stop = false;
hold on;
plot(x(1),x(2),'.');
drawnow
        在解算以下优化问题时,可以使用此输出函数绘制 fminsearch 生成的点
        为此,
        1 创建一个包含前述代码的文件,并将其作为 outfun.m 保存在 MATLAB 路径的文件夹中。
        2 options 结构体的 Outputfcn 字段的值设置为 outfun 的函数句柄。
options = optimset( 'OutputFcn' , @outfun);
        3 输入以下命令:
hold on
objfun=@(x) exp(x(1))*(4*x(1)^2+2*x(2)^2+x(1)*x(2)+2*x(2));
[x fval] = fminsearch(objfun, [-1 1], options)
hold off
        这些命令返回解
x =
0.1290 -0.5323
fval =
-0.5689
        并显示以下关于 fminsearch 生成的点的绘图:

3.2 输出函数的结构体

        输出函数的函数定义行采用以下格式:
stop = outfun(x, optimValues, state)
        其中
        • stop 是一个标志,根据优化例程是停止还是继续,该标志为 true false。。
        • x 是算法在当前迭代中计算的点。
        • optimValues 是包含当前迭代中的数据的结构体。
        • state 是算法的当前状态。。
        优化函数在每次迭代中将输入参数的值传递给 outfun

3.3 嵌套输出函数的示例

        示例不需要输出函数在每次迭代后保留数据。如果不需要保存各次迭代之间的数据,可以将输出函数编写为函数文件,并从命令行直接调用优化函数。但是,要使输出函数在每次迭代后记录数据,请编写一个用于实现以下目的的文件:
        • 以嵌套函数的形式包括输出函数 - 有关详细信息,请参阅 MATLAB 编程基础中的“嵌套函数”。
        • 调用优化函数。
        在以下示例中,函数文件还包含目标函数作为局部函数。您也可以将目标函数编写为单独的文件或匿名函数。
        嵌套函数可以访问其所在的文件中的变量。因此,此方法使输出函数能够在每次迭代后保留变量。
        以下示例使用输出函数记录以下求解中的 fminsearch 迭代:

        输出函数以矩阵(称为 history)的形式返回点序列。要运行此示例,请执行下列步骤:
        1使用 MATLAB 编辑器打开一个新文件。
        2 将以下代码复制并粘贴到此文件。
function [x fval history] = myproblem(x0)
history = [];
options = optimset( 'OutputFcn' , @myoutput);
[x fval] = fminsearch(@objfun, x0,options);
function stop = myoutput(x,optimvalues,state);
stop = false;
if isequal(state, 'iter' )
history = [history; x];
end
end
function z = objfun(x)
z = exp(x(1))*(4*x(1)^2+2*x(2)^2+x(1)*x(2)+2*x(2));
end
end
        3 将文件作为 myproblem.m 保存到 MATLAB 路径上的某个文件夹中。
        4 在 MATLAB 提示符下,输入
        [x fval history] = myproblem([-1 1]);
        函数 fminsearch 返回最佳点 x 及 x 处的目标函数值 fval
x,fval
x =
0.1290 -0.5323
fval =
-0.5689
        此外,输出函数 myoutput 向 MATLAB 工作区返回矩阵 history,该矩阵包含算法在每次迭代中生成的点。 history 的前四行为
history(1:4,:)
ans =
-1.0000 1.0000
-1.0000 1.0000
-1.0750 0.9000
-1.0125 0.8500
        history 最后一行的点与最佳点 x 相同。
history(end,:)
ans =
0.1290 -0.5323
objfun(history(end,:))
ans =
-0.5689

3.4 optimValues 中的字段

        下表列出了由优化函数 fminbnd fminsearch fzero 提供的 optimValues 结构体的字段。表的“命令行显示标题”列中列出了将 options Display 参数设置为 'iter' 时显示的标题。

3.5 算法的状态

        下表列出了 state 的可能值:

 

        下面的代码演示输出函数如何使用 state 的值来确定要在当前迭代中执行的任务。
switch state
case 'init'
% Setup for plots or dialog boxes
case 'iter'
% Make updates to plots or dialog boxes as needed
case 'interrupt'
% Check conditions to see whether optimization
% should quit
case 'done'
% Cleanup of plots, dialog boxes, or final plot
end

3.6 Stop 标签

        输出参数 stop true false 的标签。此标志通知优化函数优化是停止 ( true ) 还是继续 ( false)。下面的示例演示了使用 stop 标签的典型方法。
        1)根据 optimValues 中的数据停止优化
        输出函数可以根据 optimValues 中的当前数据在任何迭代中停止优化。例如,下面的代码在目标函数值小于 5 时将 stop 设置为 true
function stop = myoutput(x, optimValues, state)
stop = false;
% Check if objective function is less than 5.
if optimValues.fval < 5
stop = true;
end
        2)基于对话框输入停止优化
        在设计 UI 来执行优化时,可以采用控件(例如停止按钮)使输出函数停止优化。以下代码显示如何执行此回调。代码假定 停止 按钮回调将值 true 存储在名为 hObject handles 结构体的 optimstop 字段中,而该结构体又存储在 appdata 中。
function stop = myoutput(x, optimValues, state)
stop = false;
% Check if user has requested to stop the optimization.
stop = getappdata(hObject, 'optimstop' );

4.优化求解器绘制函数

        options 结构体的 PlotFcns 字段指定优化函数在每次迭代时调用的一个或多个函数,用于绘制各种进度测度。传递函数句柄或函数句柄的元胞数组。绘图函数的结构体与输出函数的结构体相同。
        PlotFcns 选项可以与下列 MATLAB 优化函数配合使用:
        • fminbnd
        • fminsearch
        • fzero
        这些优化函数的预定义绘图函数包括:
        • @optimplotx 绘制当前点
        • @optimplotfval 绘制函数值
        • @optimplotfunccount 绘制函数计数(不适用于 fzero
        要查看或修改预定义的绘图函数,请使用 MATLAB 编辑器打开函数文件。例如,要查看函数文件以便绘制当前点,请输入:
edit optimplotx.m
        例如,想要查看使用 fminsearch 与绘图函数 @optimplotfval 求最小值的进度:
        1 为目标函数编写一个文件。在本示例中,使用:
function f = onehump(x)
r = x(1)^2 + x(2)^2;
s = exp(-r);
f = x(1)*s+r/20;
        2 设置 options 以便使用绘图函数:
options = optimset( 'PlotFcns' ,@optimplotfval);
        3 从 [2,1] 起调用 fminsearch
[x ffinal] = fminsearch(@onehump,[2,1],options)
        4 MATLAB 返回以下内容:
x =
-0.6691 0.0000
ffinal =
-0.4052

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/920094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用antd mobile的PickerView二次封装成业务所需选择器

这里写目录标题 前言组件选择器视图选择器组件使用示例 注意事项扩展 前言 基于 Vant的checkbox配合popup和input定制选择器 实现一个React的版本 组件库&#xff1a;antd mobile 适用&#xff1a;移动端 UI如下&#xff1a; 功能点&#xff1a; 选择器在弹出层内&#xff0…

四、pikachu之文件包含

文章目录 1、文件包含漏洞概述1.1 文件包含漏洞1.2 相关函数1.3 文件包含漏洞分类 2、File Inclusion(local)3、File Inclusion(remote) 1、文件包含漏洞概述 1.1 文件包含漏洞 文件包含漏洞&#xff1a;在web后台开发中&#xff0c;程序员往往为了提高效率以及让代码看起来更…

AutoSAR 简介

文章目录 什么是 AutoSAR分类AutoSAR 的作用AutoSAR 架构术语介绍工具链介绍参考 随着汽车行业的发展和对汽车电子软件需求的增加&#xff0c;AutoSAR 将会变得越来越重要&#xff0c;但 AutoSAR 入门门槛高、工具链价格昂贵&#xff0c;动辄几百上千万的软件使用授权费对 OEM、…

三种主要的云交付服务和安全模型

对于许多企业来说&#xff0c;当今的数字化转型之旅包括一个关键决策&#xff1a;采用符合其需求的云交付服务。 云计算已成为现代 IT 基础设施的主要组成部分&#xff0c;具有从可扩展性到成本效率等诸多优势。然而&#xff0c;与所有技术一样&#xff0c;云也有其自身的网络…

Linux 定时任务 crontab 用法学习整理

一、linux版本 lsb_release -a 二、crontab 用法学习 2.1&#xff0c;crontab 简介 linux中crontab命令用于设置周期性被执行的指令&#xff0c;该命令从标准输入设备读取指令&#xff0c;并将其存放于“crontab”文件中&#xff0c;以供之后读取和执行。cron 系统调度进程。…

Nets3e v1.1.4(攻击者在受害者主机上偷拍并弹出受害者个人照片)

Github>https://github.com/MartinxMax/Nets3e/tree/Nets3e_V1.1.4 首页 历史更新: Nets3e v1.1.4 新增echo参数,-g -echo,生成payload后,受害者泄露的个人照片将会在受害者的主机上弹出展示 Nets3e v1.1.3 修复受害者无法获取公网IP,新增钉钉实时监控推送 Nets3e v1.1…

73 # 发布自己的 http-server 到 npm

1、添加 .npmignore 文件&#xff0c;忽略不需要的文件 public2、去官网https://www.npmjs.com/检查自己的包名是否被占用 3、切换到官方源&#xff0c;然后检查确认 nrm use npm nrm ls4、登录 npm 账号 npm login5、发布 npm publish6、查看发布情况&#xff0c;发布成功…

虚拟机中Ubuntu 16.04 设置网络

1、打开虚拟机的“编辑”选项&#xff0c;选择“虚拟网络编辑器”&#xff0c;修改网络配置 2、同时打开 Windows下面的命令行&#xff0c;输入ipconfig&#xff0c;看到虚拟网络适配器的地址 1-虚拟机-设置-网络适配器 2-编辑-虚拟网络编辑器-VMnet0 3-编辑-虚拟网络编辑…

Web安全测试(二):HTTP状态码、响应和url详解

一、前言 结合内部资料&#xff0c;与安全渗透部门同事合力整理的安全测试相关资料教程&#xff0c;全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试&#xff0c;覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬&#xff01; 全部…

重新认识Android中的线程

线程的几种创建方式 new Thread&#xff1a;可复写Thread#run方法。也可以传递Runnable对象&#xff0c;更加灵活。缺点&#xff1a;缺乏统一管理&#xff0c;可能无限制新建线程&#xff0c;相互之间竞争&#xff0c;及可能占用过多系统的资源导致死机或oom。 new Thread(new…

【网络安全知识】Windows系统安全加固安全加固分析、概念及账户管理和认证权限

Windows系统安全加固分析 最小化方式安装 为了提高系统的安全性&#xff0c;采用最小化方式安装是最可靠的&#xff0c;只安装网络 服务所必需的组件。如果以后有新的服务需求&#xff0c;再安装相应的服务组件 &#xff0c;并及时进行安全设置。 系统加固工作 对Windows系统安…

GCC编译器优化等级的选择

GCC编译器通常提供多个优化级别供选择&#xff0c;每个级别对代码进行不同程度的优化。以下是GCC编译器常见的优化级别&#xff1a; 无优化&#xff08;-O0&#xff09;&#xff1a;这是默认的优化级别&#xff0c;编译器不执行任何优化。适用于调试目的或要求最小编译时间的情…

windows系统下安装Nodejs并安装vue-cli

windows下安装nodejs 下载安装淘宝镜像加速器(cnpm)安装vue-cli初始化一个vue-cli程序 下载 Node.js下载地址 根据自己的电脑选择下载 下载完成后点击下载好的文件 一路next 安装地址可以根据自己的喜好修改 按住win r 输入cmd&#xff0c;按回车&#xff0c;打开命令窗口…

有关Arm CE支持的sha1 sha224 sha256 sha384 sha512指令

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈再某一款SOC(cortex-A53)上进行数字摘要计算的时候, 发现sha1 sha224 sha256的性能很高,sha384 sha512的性能…

win10如何配置jdk环境变量

1.首先要打开系统环境变量配置的页面。具体操作是&#xff1a;打开开始菜单&#xff0c;找到“此电脑”&#xff0c;然后右键“更多”→“属性”。 2.在弹出的页面&#xff0c;选择“高级系统设置” 3.在弹出的页面&#xff0c;选择“环境变量&#xff08;N&#xff09;…”。 …

【C++练习】普通方法+利用this 设置一个矩形类(Rectangle), 包含私有成员长(length)、 宽(width), 定义一下成员函数

题目 设置一个矩形类(Rectangle), 包含私有成员长(length)、 宽(width), 定义成员函数: void set_ len(int l); //设置长度 设置宽度void set_ wid(int w); 获取长度: int get len(); 获取宽度: int get _wid); 显示周长和面积: v…

【洛谷】P1102 A-B 数对

原题链接&#xff1a;https://www.luogu.com.cn/problem/P1102 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 将A-BC转化成ABC&#xff0c;然后遍历数组&#xff0c;让数组的每个元素加C&#xff0c;再查找原数组中是否存在对应数组元素C之后的值。…

RISCV 6 RISC-V加载存储指令

RISCV 6 RISC-V加载存储指令 1 RV32I Load and Store Instructions1.1 LOAD instructions1.1.1 加载指令的指令格式1.1.2 加载指令在使用时需要注意的点 1.2 STORE instructions1.2.1 存储指令的指令格式1.2.2 存储指令在使用时需要注意的点 2 RV64 Load and Store Instruction…

BES SDK平台编译原理与编译方法

+他V hezkz17进数字音频系统研究开发交流答疑群(课题组) 2300YP 输入 编译命令 make T=best2300p_ep_anc DEBUG=1 清除 make T=best2300p_ep_anc allclean 2700 编译命令:make T=best1603_ibrt -j 清除命令 : make T=best1603_ibrt clean -j: 这也是一个参数,用于指…

THINKPHP 微联云投票系统源码独立版 + 支持刷礼物

THINKPHP 微联云投票系统源码独立版 支持刷礼物 nginxphp7.2以上 mysql5.6以上 简单测试后台基本没什么问题&#xff0c;暂时发现H5前端有bug,自行修复。