主要内容

方程问题

非线性方程组

描述

用最优化变量指定方程组,用最优化变量求解方程组解决

提示

有关完整的工作流,请参见求解方程的基于问题的工作流

创建

创建一个方程问题对象的eqnproblem作用通过创建OptimizationEquality对象并将其设置为方程的属性方程问题对象

概率= eqnproblem;x = optimvar (“x”); 方程n=x^5-x^4+3*x==1/2;prob.eqn=eqn;

警告

基于问题的方法不支持目标函数、非线性等式或非线性不等式中的复值。万博1manbetx如果函数计算具有复值,即使是中间值,最终结果也可能是不正确的。

属性

全部展开

问题方程,指定为OptimizationEquality数组或结构OptimizationEquality数组作为字段。

例子:总和(x ^ 2, 2) = = 4

问题标签,指定为字符串或字符向量。该软件不使用描述为计算。描述是一个可用于任何原因的任意标签。例如,您可以共享、归档或呈现一个模型或问题,并存储关于模型或问题的描述性信息描述

例子:“旅行推销员问题的迭代方法”

数据类型:字符|字符串

此属性是只读的。

优化对象中的变量,指定为结构的OptimizationVariable对象。

数据类型:结构体

对象的功能

optimoptions 创建优化选项
问题2结构 将优化问题或方程问题转换为解算器形式
显示 显示优化对象信息
解决 求解最优化问题或方程问题
varindex 将问题变量映射到基于解算器的变量索引
保存优化对象描述

例子

全部折叠

求解非线性方程组

经验值 - 经验值 - x 1 + x 2 x 2 1 + x 1 2 x 1 因为 x 2 + x 2 x 1 1 2

使用基于问题的方法,首先定义x作为一个二元优化变量。

x = optimvar (“x”2);

创建第一个方程作为一个优化等式表达式。

eq1 = exp (exp (- x (x (1) + (2)))) = = x (2) * (1 + x (1) ^ 2);

类似地,创建第二个等式作为优化等式表达式。

方程2 = x(1)*cos(x(2)) + x(2)*sin(x(1)) = 1/2;

创建一个方程问题,并将方程放置在问题中。

概率= eqnproblem;prob.Equations。eq1 = eq1;prob.Equations。eq2 = eq2;

检查问题。

显示(概率)
方程问题:求解:x eq1:exp(-exp(-(x(1)+x(2)))==(x(2)。*(1+x(1)。^2))eq2:((x(1)。*cos(x(2))+(x(2)。*sin(x(1))==0.5

从要点出发解决问题(0,0). 对于基于问题的方法,将初始点指定为结构,变量名作为结构的字段。对于这个问题,只有一个变量,x

x0。x=[0 0]; [sol,fval,exitflag] = solve(prob,x0)
用fsolve解决问题。方程解决。Fsolve完成了,因为函数值的向量接近零(通过函数容差值测量),并且问题出现了规则(通过梯度测量)。
索尔=结构体字段:x (2 x1双):
fval =结构体字段:e1: -2.4070e-07 e2: -3.8255e-08
exitflag = EquationSolved

查看解决方案点。

disp (sol.x)
0.3532 0.6061

不支万博1manbetx持的功能要求fcn2optimexpr

如果你的方程函数不是由初等函数组成的,你必须使用fcn2optimexpr.对于现在的例子:

ls1=fcn2optimexpr(@(x)exp(-exp(-(x(1)+x(2))),x;eq1=ls1==x(2)*(1+x(1)^2;ls2=fcn2optimexpr(@(x)x(1)*cos(x(2))+x(2)*sin x(1)),x;eq2=ls2==1/2;

看到万博1manbetx支持优化变量和表达式的操作将非线性函数转换为优化表达式

介绍了R2019b