主要内容

带约束的非线性方程组,基于问题

这个例子展示了如何尝试通过使用基于问题的方法来求解带有约束的非线性方程组。

绑定约束

当你的问题只有约束条件时,解决问题的过程是简单的。例如,求方程组的正分量解

x 1 + 1 10 - x 1 1 + x 2 2 1 + x 2 2 + x 2 0 x 2 + 2 20. - x 2 1 + x 1 2 1 + x 1 2 + x 1 0

只需创建下界为0的优化变量。(这些方程有四个解金宝搏官方网站 x 1 - 1 x 1 1 0 ,以及在哪里 x 2 - 2 x 2 2 0 )。

X = optimvar(“x”2,“下界”, 0);expr1 = (x (1) + 1) * (10 - x (1)) * ((1 + x (2) ^ 2)) / (1 + x (2) ^ 2 + (2));expr2 = (x (2) + 2) * (20 - x (2)) * ((1 + x (1) ^ 2)) / (1 + x (1) ^ 2 + x (1));Eqn1 = expr1 == 0;Eqn2 = expr2 == 0;Prob = eqnproblem;prob.Equations。Eqn1 = Eqn1;prob.Equations。Eqn2 = Eqn2;x0。x= [15,15]; [sol,fval,exitflag] = solve(prob,x0)
方程问题具有约束条件。重新定义为最小二乘问题。使用lsqnonlin解决问题。方程解决。Lsqnonlin完成,因为函数值的向量通过函数公差的值测量接近于零,并且通过梯度测量问题显得有规律。
索尔=带字段的结构:X: [2x1 double]
fval =带字段的结构:Eqn1: 0 eqn2: 0
exitflag =方程式解决

查看解决方案。

sol.x
ans =2×110个20

一般的约束

当你的问题有一般的约束条件时,将问题表述为优化问题,而不是方程问题。将方程设为等式约束。例如,在非线性不等式约束下求解上述方程 x 2 1 0 ,去掉上的边界x并将问题表述为一个没有目标函数的优化问题。

x.LowerBound = [];圆= x(1)^2 + x(2)^2 <= 10;Prob2 =优化问题;prob2.Constraints。圆圈=圆圈;prob2.Constraints。Eqn1 = Eqn1;prob2.Constraints。Eqn2 = Eqn2;[sol2,fval2,exitflag2] = solve(prob2,x0)
使用fmincon解决问题。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
sol2 =带字段的结构:X: [2x1 double]
Fval2 = 0
exitflag2 = OptimalSolution

查看解决方案。

sol2.x
ans =2×1-1.0000 - -2.0000

使用最小二乘目标的一般约束

你也可以通过将目标函数设置为平方和,将一般约束设置为约束来表述这个问题。这个替代公式给出了一个数学上等价的问题,但可能导致不同的解决方案,因为公式的变化导致求解器进行不同的迭代。

Prob3 =优化问题;prob3。目标= expr1^2 + expr2^2;prob3.Constraints。圆圈=圆圈;[sol3,fval3,exitflag3] = solve(prob3,x0)
使用fmincon解决问题。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
sol3 =带字段的结构:X: [2x1 double]
Fval3 = 8.0569e-16
exitflag3 = OptimalSolution

查看解决方案。

sol3.x
ans =2×1-1.0000 - -2.0000

在这种情况下,最小二乘目标得到的解与前面的公式相同,后者只使用约束条件。

更多关于解约束方程

一般来说,解决试图通过最小化方程分量的平方和来求解非线性方程组。也就是说,如果lh(我)方程左边的表达式是,RHS(我)右边的表达式是吗解决试图最小化总和(韩- - - - - -RHS) ^ 2)。

相反,当试图满足非线性约束表达式时,解决通常使用fmincon,并尝试使用不同的策略来满足约束条件。

在这两种情况下,解算器都可能解不出方程。有关可用于在求解器失败时尝试找到解决方案的策略,请参见fsolve解不出方程

另请参阅

相关的话题