主要内容

有约束的非线性系统

求解不等式约束方程

数值解解一个非线性方程组。但是,它不允许包含任何约束,即使是已绑定的约束。那么当有约束条件时如何解非线性方程组呢?

满足约束的解决方案不一定存在。事实上,这个问题可能没有任何解决方案,即使它不满足您的约束条件。但是,有一些技术可以帮助您搜索满足约束的解决方案。金宝搏官方网站

为了说明这些技术,考虑如何求解方程组。

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,然后跑数值解从每个x0.

对于本例,要寻找方程组的解 F ( x ) = 0 ,取10个正态分布的随机点,平均值为0,标准偏差为100。

rng违约%的再现性N=10;%尝试10个随机起点pts=100*randn(N,2);%起始点是在pts中的行溶液= 0 (N, 2);%分配解决方案opts=options(“fsolve”,“显示”,“关”);对于k=1:N soln(k,:)=fsolve(@fbnd,pts(k,:),opts);%找到解决办法金宝搏官方网站终止

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

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

使用不同的算法

数值解有三种算法。每种方法都可能导致不同的解决方案。金宝搏官方网站

对于本例,请使用x0 = [1, 9]并检查每个算法返回的解。

x0=[1,9];opts=options(@fsolve,“显示”,“关”,...“算法”,“信赖域狗腿”); x1=fsolve(@fbnd,x0,opts)
x1=1×2-1.0000 -2.0000
选择算法=“信任区”; x2=f解(@fbnd,x0,opts)
x2=1×2-1.0000 20.0000
选择算法=“levenberg marquardt”; x3=f解(@fbnd,x0,opts)
x3=1×20.9523 8.9941

在这里,三种算法对相同的初始点都找到了不同的解。金宝搏官方网站没有满足约束条件。报告的“解决方案”x3甚至不是一个解,只是一个局部的驻点。

使用解非线性最小二乘问题与范围

解非线性最小二乘问题试图最小化向量函数中各分量的平方和 F ( x ) . 因此,它试图解决这个方程 F ( x ) = 0 . 而且解非线性最小二乘问题接受绑定约束。

用公式写出例题解非线性最小二乘问题并解决它。

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

在这种情况下,,解非线性最小二乘问题收敛到满足约束的解。你可以用解非线性最小二乘问题使用全局优化工具箱多部分用于自动搜索多个初始点的解算器。看见使用lsqcurvefit或lsqnonlin的多端口(全局优化工具箱).

将方程和不等式设置为铁铬镍铁合金约束

您可以重新制定问题并使用铁铬镍铁合金如下:

  • 给出一个恒定的目标函数,例如@(x) 0,对于每个x.

  • 设定数值解目标函数作为非线性等式约束铁铬镍铁合金.

  • 以通常的方式给出任何其他约束条件铁铬镍铁合金语法。

这个FMTR辅助函数在这个例子到此结束实现非线性约束。求解约束问题。

磅= (0,0);%下限约束rng违约可重复初始点x0 = 100 * randn (2, 1);选择= optimoptions (@fmincon,“算法”,“内点”,“显示”,“关”); x=fmincon(@(x)0,x0,[],[],[],[],[],[]磅,[],@fmincontr,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));终止

此代码创建FMTR辅助函数。

函数[c,ceq]=fmincontr(x)c=[];%无非线性不等式ceq=fbnd(x);%F解的目标是非线性等式约束终止

另见

||

相关的话题