主要内容

非线性系统与约束

解决方程与不等式约束

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点开始分= 100 * randn (N, 2);%初始点行分溶液= 0 (N, 2);%分配解决方案选择= optimoptions (“fsolve”,“显示”,“关闭”);k = 1: N溶液(k,:) = fsolve (@fbnd, pts (k,:),选择);%找到解决方案金宝搏官方网站结束

列出解决方金宝搏官方网站案,满足约束。

idx =溶液(:1)> = 0 &溶液(:,2)> = 0;disp(溶液(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];选择= optimoptions (@fsolve,“显示”,“关闭”,“算法”,“trust-region-dogleg”);x1 = fsolve (x0, @fbnd选择)
x1 =1×2-1.0000 - -2.0000
选择。算法=“信赖域”;x2 = fsolve (x0, @fbnd选择)
x2 =1×2-1.0000 - 20.0000
选择。算法=“levenberg-marquardt”;x3 = fsolve (x0, @fbnd选择)
x3 =1×20.9523 - 8.9941

这里,所有三个算法寻找不同的解决方案相同的初始点。金宝搏官方网站没有一个满足约束。报告的“解决方案”x3甚至不是一个解决方案,但只是一个局部平稳点。

使用lsqnonlin与范围

lsqnonlin试图减少组件的平方和向量函数 F ( x ) 。因此,它试图解决方程 F ( x ) = 0 。同时,lsqnonlin接受绑定约束。

制定问题的例子lsqnonlin并解决它。

磅= (0,0);rng默认的x0 = 100 * randn (2, 1);[x, res] = lsqnonlin (x0, @fbnd磅)
局部最小值。优化完成因为梯度的大小小于最优值的宽容。
x =2×110.0000 - 20.0000
res = 2.4783 e-25

在这种情况下,lsqnonlin收敛于解满足约束。您可以使用lsqnonlin随着全球优化工具箱MultiStart解算器自动搜索多个初始点。看到MultiStart使用lsqcurvefit或lsqnonlin(全局优化工具箱)

集方程和不等式fmincon约束

你可以用这个问题和使用fmincon如下:

  • 给一个恒定的目标函数,如@ (x) 0,其计算结果为0x

  • 设置fsolve目标函数的非线性等式约束fmincon

  • 给任何其他限制fmincon语法。

fminconstr辅助函数在这个例子实现了非线性约束。解决约束问题。

磅= (0,0);%下界约束rng默认的%的初始点x0 = 100 * randn (2, 1);选择= optimoptions (@fmincon,“算法”,“内点”,“显示”,“关闭”);x = fmincon (@ (x) 0 x0[],[],[],[],磅,[],@fminconstr,选择)
x =2×110.0000 - 20.0000

在这种情况下,fmincon从一开始就解决问题点。

辅助函数

这段代码创建了fbndhelper函数。

函数F = fbnd F (x) (1) = (x (1) + 1) * (10 x (1)) * (1 + x (2) ^ 2) / (1 + x (2) ^ 2 + (2));F (2) = (x (2) + 2) * (20 x (2)) * (1 + x (1) ^ 2) / (1 + x (1) ^ 2 + x (1));结束

这段代码创建了fminconstrhelper函数。

函数测查[c] = fminconstr c (x) = [];%没有非线性不等式测查= fbnd (x);% fsolve目标是fmincon非线性等式约束结束

另请参阅

||

相关的话题