主要内容

求解不含和含雅可比矩阵的非线性系统

这个例子显示了当你为一个非线性方程组提供导数时,函数值的减少。在解释写向量和矩阵目标函数,雅可比矩阵 J x 一个方程组 F x J j x F x x j .将这个导数作为目标函数的第二个输出。

例如,multirosenbrock函数是一个 n -罗森布罗克函数的维泛化(见基于问题的约束非线性问题的求解的任何正的、偶数的值 n

F 1 1 - x 1 F 2 1 0 x 2 - x 1 2 F 3. 1 - x 3. F 4 1 0 x 4 - x 3. 2 F n - 1 1 - x n - 1 F n 1 0 x n - x n - 1 2

方程组的解 F x 0 是点 x 1 1 ... n

对于这个目标函数,所有的雅可比矩阵项 J j x 除了在哪里的项,其他都是零吗 j 最多相差一个。对于奇值 < n ,非零项是

J x - 1 J + 1 - 2 0 x J + 1 + 1 1 0

multirosenbrock的辅助函数这个例子到此结束创建目标函数 F x 及其雅可比矩阵 J x

从点开始解方程组 x - 1 9 对于奇值 < n , x 2 对于偶数 .指定 n 6 4

n = 64;x0 (1: n, 1) = -1.9;x0 (2:2: n, 1) = 2;F (x), exitflag、输出江淮]= fsolve (x0 @multirosenbrock);
方程解决。Fsolve完成了,因为函数值的向量接近零(通过函数容差值测量),并且问题出现了规则(通过梯度测量)。

检查计算解的距离x从真解,和函数求值的次数fsolve需要计算解。

disp(规范(x-ones(大小(x))))
0
disp (output.funcCount)
1043

fsolve找到解决方案,并进行超过1000次的函数计算。

再解一次方程组,这次用雅可比矩阵。为此,设置“SpecifyObjectiveGradient”选项真正的

选择= optimoptions (“fsolve”“SpecifyObjectiveGradient”,真正的);(x2, F2, exitflag2 output2, JAC2] = fsolve (x0, @multirosenbrock选择);
方程解决。Fsolve完成了,因为函数值的向量接近零(通过函数容差值测量),并且问题出现了规则(通过梯度测量)。

再次检查计算解的距离x2从真解,和函数求值的次数fsolve需要计算解。

disp(规范(x2-ones(大小(x2))))
0
disp (output2.funcCount)
21

fsolve返回与前一个解决方案相同的解决方案,但需要大约20次函数求值,而不是超过1000次。一般来说,使用雅可比矩阵可以减少函数求值的次数,增强鲁棒性,尽管本示例没有显示出改进的鲁棒性。

Helper函数

此代码创建multirosenbrockhelper函数。

函数F [J] = multirosenbrock (x)获取问题大小n =长度(x);如果N == 0,错误('输入向量x为空');结束如果Mod (n,2) ~= 0 error(输入向量x必须有偶数个分量);结束%求向量函数值优势= 1:2:n;均等的= 2:2:n;F = 0 (n, 1);F(几率,1)= 1 - x(优势);F(均等的,1)= 10。* (x(均等的)- x(几率)。^ 2);计算雅可比矩阵如果nargout > 1如果Nargout > 1 c = - 1 (n/2,1); / /C =稀疏(概率,概率,C, n, n);d = 10 *的(n / 2,1);D =稀疏(均等的、均等的D n, n);e = -20。* x(优势);E =稀疏(均等的机会,E, n, n);J = c + d + e;结束结束

另请参阅

相关的话题