主要内容

解决非线性系统不包括雅可比矩阵

这个例子显示了减少函数评估当你为一个非线性方程组提供衍生品。在解释写作目标函数向量和矩阵,雅可比矩阵 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 ) 是0除外条款在哪里 j 最多相差1。奇怪的价值观的 < 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,错误(“输入向量,是空的。”);结束如果国防部(n, 2) ~ = 0错误(的输入向量,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;结束结束

另请参阅

相关的话题