FSOLVE.
解决非线性方程系统。但是,它不允许您包括任何约束,甚至限制约束。那么在有限制时,如何解决非线性方程式的系统?
满足您约束的解决方案不保证存在。事实上,问题可能没有任何解决方案,甚至一个不满足您的约束的解决方案。但是,存在技术,以帮助您搜索满足您的约束的解决方案。万博 尤文图斯
为了说明技术,考虑如何解决方程
其中组件的 必须是非负面的。方程有四种解决方案:万博 尤文图斯
只有一个解决方案满足约束,即 。
这FBND.
辅助功能在此示例的结尾计算
数值。
一般来说,一个系统
方程式
变量具有孤立的解决方案,这意味着每个解决方案都万博 尤文图斯没有附近的邻居也是解决方案。因此,搜索满足某些约束的解决方案的一种方法是生成多个初始点X0.
,然后运行FSOLVE.
从各自开始X0.
。
对于此示例,要查找对等式系统的解决方案 ,采取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.
尝试最小化矢量函数中组件的平方和
。因此,它试图解决方程
。还,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非线性平等约束结尾