咨询公司网站设计,企业培训公司有哪些,济宁网站建设制作设计,wordpress功能小工具1.设置优化选项 可以使用由 optimset 函数创建的 options 结构体来指定优化参数。然后#xff0c;可以将 options 作为输入传递给优化函数#xff0c;例如#xff0c;通过使用以下语法调用 fminbnd x fminbnd(fun,x1,x2,options) 或使用以下语法调用 fminsearch x f…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 i1 ) 的范数。如果求解器尝试小于 TolX 的步长则终止迭代。求解器通常将 TolX 用作相对边界表示在达到 |(x i – x i1 )| TolX *(1 |x i |) 或类似的相对测度时终止迭代。 • TolFun 是步长中目标函数值变化的下边界。如果 |f(x i ) – f(x i1 )| TolFun则终止迭代。求解器通常将 TolFun 用作相对边界表示在达到 |f(x i ) – f(x i1 )| 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)^22*x(2)^2x(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)^22*x(2)^2x(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)*sr/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