求解具有不等式约束的方程
fsolve 求解非线性方程组。但是,它不允许您包含任何约束,甚至是边界约束。那么,如何求解带约束的非线性方程组?
满足您的约束的解不一定存在。事实上,此问题可能没有任何解,哪怕是不满足约束的解。然而,有一些方法可以帮助您搜索满足约束的解。
为了说明这些方法,假设要设法求解以下方程
F1(x)=(x1+1)(10-x1)1+x221+x22+x2F2(x)=(x2+2)(20-x2)1+x121+x12+x1,
其中 x 的分量必须为非负值。这些方程有四个解:
x=(-1,-2)x=(10,-2)x=(-1,20)x=(10,20).
只有一个解满足约束,即 x=(10,20)。
位于此示例末尾的 fbnd 辅助函数会以数值方式计算 F(x)。
使用不同起点
一般情况下,包含 N 个变量、N 个方程的方程组有孤立的解,这意味着每个解都没有同为解的邻点。因此,搜索满足某些约束的解的一种方法是生成多个初始点 x0,然后从每个 x0 开始运行 fsolve。
对于此示例,要寻找 的解,请取 10 个随机点,这些点呈正态分布,均值为 0,标准差为 100。
rng default % For reproducibility
N = 10; % Try 10 random start points
pts = 100*randn(N,2); % Initial points are rows in pts
soln