主要内容

具有约束的非线性系统

解决不等式约束的方程

FSOLVE.解决非线性方程系统。但是,它不允许您包括任何约束,甚至限制约束。那么在有限制时,如何解决非线性方程式的系统?

满足您约束的解决方案不保证存在。事实上,问题可能没有任何解决方案,甚至一个不满足您的约束的解决方案。但是,存在技术,以帮助您搜索满足您的约束的解决方案。万博 尤文图斯

为了说明技术,考虑如何解决方程

F 1 X = X 1 + 1 1 0. - X 1 1 + X 2 2 1 + X 2 2 + X 2 F 2 X = X 2 + 2 2 0. - X 2 1 + X 1 2 1 + X 1 2 + X 1

其中组件的 X 必须是非负面的。方程有四种解决方案:万博 尤文图斯

X = - 1 - 2 X = 1 0. - 2 X = - 1 2 0. X = 1 0. 2 0.

只有一个解决方案满足约束,即 X = 1 0. 2 0.

FBND.辅助功能在此示例的结尾计算 F X 数值。

使用不同的起点

一般来说,一个系统 N 方程式 N 变量具有孤立的解决方案,这意味着每个解决方案都万博 尤文图斯没有附近的邻居也是解决方案。因此,搜索满足某些约束的解决方案的一种方法是生成多个初始点X0.,然后运行FSOLVE.从各自开始X0.

对于此示例,要查找对等式系统的解决方案 F X = 0. ,采取10个随机点,该点通常分布为平均0和标准偏差100。

RNG.默认重复性的%n = 10;%尝试10个随机起点pts = 100 * randn(n,2);%初始点是PTS中的行soln = zeros(n,2);%分配解决方案opts = Optimoptions('fsolve''展示''离开');为了k = 1:n soln(k,:) = fsolve(@ fbnd,pts(k,:),选择);%找到解决方案万博 尤文图斯结尾

列出满足约万博 尤文图斯束的解决方案。

IDX = soln(:,1)> = 0&soln(:,2)> = 0;disp(soln(idx,:))
10.0000 20.0000 10:0000 20.0000 10:0000 20.0000 10:0000 20.0000 10:0000 20.0000

使用不同的算法

FSOLVE.有三种算法。每个都可以导致不同的解决方案。万博 尤文图斯

对于这个例子,请采取x0 = [1,9]并检查每个算法返回的解决方案。

x0 = [1,9];opts = Optimoptions(@fsolve,'展示''离开'......'算法''信任区 - 嘟冰');X1 = FSOLVE(@ FBND,X0,OPTS)
x1 =1×2-1.0000 -2.0000
opts.algorithm =“信任区域”;X2 = FSOLVE(@ FBND,X0,OPTS)
x2 =1×2-1.0000 20.0000
opts.algorithm ='levenberg-marquardt';X3 = FSOLVE(@ FBND,X0,OPTS)
x3 =1×20.9523 8.9941

在这里,所有三种算法对于相同的初始点找到不同的解决方案。万博 尤文图斯无满足约束。报告的“解决方案”X3甚至不是解决方案,而是只是一个局部静止点。

lsqnonlin.有界限

lsqnonlin.尝试最小化矢量函数中组件的平方和 F X 。因此,它试图解决方程 F X = 0. 。还,lsqnonlin.接受束缚约束。

制定示例问题lsqnonlin.并解决它。

lb = [0,0];RNG.默认x0 = 100 * randn(2,1);[x,res] = lsqnonlin(@ fbnd,x0,lb)
发现本地最低限度。优化完成,因为梯度的大小小于最优耐受性的值。
X =2×110.0000 20.0000
RES = 2.4783E-25

在这种情况下,lsqnonlin.收敛于满足约束的解决方案。您可以使用lsqnonlin.使用全局优化工具箱多层的求解器自动搜索许多初始点。看MultiStart使用LSQCurvefit或LSQNONLIN(全局优化工具箱)

设置方程和不平等粉刺约束

您可以重新格式化问题并使用粉刺如下:

  • 给出恒定的目标函数,如@(x)0,每次评估为0X

  • 设定FSOLVE.目标函数作为非线性平等约束粉刺

  • 在通常的情况下给任何其他限制粉刺句法。

Fminconstr.辅助功能在此示例的结尾实现非线性约束。解决受约束的问题。

lb = [0,0];%下限约束RNG.默认%可重复的初始点x0 = 100 * randn(2,1);选择= Optimoptions(@Fmincon,'算法''内点''展示''离开');x = fmincon(@(x)0,x0,[],[],[],[],LB,[],@ Fminconstr,Opts)
X =2×110.0000 20.0000

在这种情况下,粉刺解决了从起点的问题。

辅助功能

此代码创建FBND.帮手功能。

功能f = fbnd(x)f(1)=(x(1)+1)*(10-x(1))*(1 + x(2)^ 2)/(1 + x(2)^ 2 +x(2));F(2)=(x(2)+2)*(20-x(2))*(1 + x(1)^ 2)/(1 + x(1)^ 2 + x(1));结尾

此代码创建Fminconstr.帮手功能。

功能[c,ceq] = fminconstr(x)c = [];%没有非线性不平等CEQ = FBND(x);%FSOLVE目标是Fmincon非线性平等约束结尾

也可以看看

||

相关话题