主要内容

在参数变化时遵循方程解

这个例子展示了如何在参数变化时通过从前一个解点开始进行后续解来反复求解一个方程。金宝搏官方网站通常,这个过程会带来有效的解决方案。金宝搏官方网站然而,解决方案有时会消失,需要从一个或多个新的点开始。

参数化的标量方程

要解的参数化方程为

sinh x - 3. x 一个

在哪里 一个 是一个从0到5的数值参数。在 一个 0 ,这个方程的一个解是 x 0 .当 一个 绝对值不是很大,方程有三个解。金宝搏官方网站要将方程可视化,请将方程的左侧创建为匿名函数。绘制函数。

@(x)sinh(x) - 3*x;t = linspace (-3.5, 3.5);情节(t (t), t, 0(大小(t)),“k -”)包含(“x”) ylabel (“乐趣”(x)

图中包含一个坐标轴。轴线包含2个线型对象。

一个 是太大还是太小,只有一个解决办法。

具体问题具体分析设置

为基于问题的方法创建一个目标函数,创建一个优化表达式expr在优化变量中x

x = optimvar (“x”);Expr = sinh(x) - 3*x;

创建和绘制解决方案金宝搏官方网站

从最初的解决方案开始 x 0 一个 0 ,求100个值金宝搏官方网站的解 一个 从0到5。因为有趣的为标量非线性函数,解决调用fzero解算器。

设置用于保存解决方案统计信息的问题对象、选项和数据结构。

概率= eqnproblem;选择= optimset (“显示”“关闭”);溶胶= 0 (100 1);函数宏指令=溶胶;= linspace (0 5);

从第一个解开始,循环求解方程溶胶(1)= 0

I = 2:length(as) x0。x =溶胶(张);从以前的解决方案开始概率。公式= expr == as(i);[溶胶,~,~,输出]=解决(x0,概率“选项”、选择);溶胶(i) = sol.x;函数宏指令(i) = output.funcCount;结束

将解作为参数的函数绘制出来一个以及为得到解所进行的函数评估的次数。

次要情节(2,1,1)情节(溶胶,“柯”)包含“一个”ylabel (“解决方案(x)”次要情节(2,1,2)情节(函数宏指令,“k *’)包含(的迭代次数) ylabel (函数宏指令的

图中包含2个轴。Axes 1包含一个类型为line的对象。Axes 2包含一个类型为line的对象。

溶液中出现跳跃 一个 2 5 .在同一点上,达到一个解决方案的函数评估的数量从近15个增加到近40个。要理解原因,请查看函数的更详细的图。画出函数和每七个解点。

图t = linspace(-3.5,3.5);有趣的情节(t (t));持有情节([-3.5,最小(溶胶)],[2.5,2.5],“k——”)传说(“有趣”“最大的一个”“位置”“北”“自动更新”“关闭”plot(sols(A0),as(A0),“罗”如果国防部(a0, 2) = = 1的文本(溶胶(a0) + 0.15 (a0) + 0.15, num2str (a0/7))其他的Text (sols(a0) - 0.3,as(a0) + 0.05,num2str(a0/7))结束结束情节(t, 0(大小(t)),“k -”)举行

图中包含一个坐标轴。轴包含31个类型为line, text的对象。这些对象代表乐趣。

作为 一个 增加时,首先解决方案向左移动。金宝搏官方网站然而,当 一个 大于2.5时,就不再有接近先前解决方案的解决方案了。fzero需要额外的函数求值来搜索一个解,并在附近找到一个解x = 3.之后,解的值向右缓慢移动为 一个 进一步增加。对于每个后续的解决方案,求解器只需要大约10次函数计算。

选择不同的解算器

fsolve求解器可以比fzero.然而,fsolve会陷入局部极小值,无法解出方程。

设置用于保存解决方案统计信息的问题对象、选项和数据结构。

probfsolve = eqnproblem;溶胶= 0 (100 1);函数宏指令=溶胶;infeas =溶胶;asfsolve = linspace (0 5);

从第一个解开始,循环求解方程溶胶(1)= 0

I = 2:length(as) x0。x =溶胶(张);从以前的解决方案开始probfsolve。公式= expr == asfsolve(i);(溶胶、fval ~、输出)=解决(probfsolve x0,“选项”选项,“规划求解”“fsolve”);溶胶(i) = sol.x;函数宏指令(i) = output.funcCount;infeas (i) = fval;结束

将解作为参数的函数绘制出来一个以及为得到解所进行的函数评估的次数。

次要情节(2,1,1)情节(asfsolve溶胶,“柯”asfsolve infeas,的r -)包含“一个”传奇(“解决方案”“错误的解决方案”“位置”“最佳”次要情节(2,1,2)情节(函数宏指令,“k *’)包含(的迭代次数) ylabel (函数宏指令的

图中包含2个轴。axis 1包含2个类型为line的对象。这些对象表示解,解的误差。Axes 2包含一个类型为line的对象。

fsolve是不是比fzero,每次迭代大约需要7或8次功能评估。同样,当求解器在前一个值附近没有找到解时,求解器需要更多的函数求值来搜索解。这一次,搜索失败了。随后的迭代在大多数情况下需要很少的函数评估,但却无法找到解决方案。的错误的解决方案绘图显示函数值 f u n x - 一个

为了克服局部最小值不是解的问题,从不同的起点重新搜索fsolve返回一个负退出标志。设置用于保存解决方案统计信息的问题对象、选项和数据结构。

rng默认的%的再现性溶胶= 0 (100 1);函数宏指令=溶胶;asfsolve = linspace (0 5);

从第一个解开始,循环求解方程溶胶(1)= 0

I = 2:length(as) x0。x =溶胶(张);从以前的解决方案开始probfsolve。公式= expr == asfsolve(i);[溶胶,~,exitflag、输出]=解决(probfsolve x0,“选项”选项,“规划求解”“fsolve”);exitflag < = 0如果fsolve没有找到解决方案x0。x=5*randn;从新的起点再试一次fevals(i) = fevals(i) + output.funcCount;[溶胶,~,exitflag、输出]=解决(probfsolve x0,“选项”选项,“规划求解”“fsolve”);结束溶胶(i) = sol.x;fevals(i) = fevals(i) + output.funcCount;结束

将解作为参数的函数绘制出来一个以及为得到解所进行的函数评估的次数。

次要情节(2,1,1)情节(asfsolve溶胶,“柯”)包含“一个”ylabel (“解决方案(x)”次要情节(2,1,2)情节(函数宏指令,“k *’)包含(的迭代次数) ylabel (函数宏指令的

图中包含2个轴。Axes 1包含一个类型为line的对象。Axes 2包含一个类型为line的对象。

这一次,fsolve从较差的起点附近恢复 一个 2 5 得到了一个类似于fzero.每次迭代的函数计算次数通常是8次,在解决方案跳转时增加到大约30次。

使用以下方法转换目标函数fcn2optimexpr

对于某些目标函数或软件版本,必须通过使用将非线性函数转换为优化表达式fcn2optimexpr.看到金宝app支持优化变量和表达式的操作将非线性函数转换为优化表达式.对于本例,转换原始函数有趣的用于绘制优化表达式expr:

expr = fcn2optimexpr(有趣,x);

在更改了定义之后,示例的其余部分完全相同expr

另请参阅

||

相关的话题