解决非线性系统不包括雅可比矩阵
这个例子显示了减少函数评估当你为一个非线性方程组提供衍生品。在解释写作目标函数向量和矩阵,雅可比矩阵 一个方程组 是 。提供此目标函数的导数作为第二个输出。
例如,multirosenbrock
函数是一个
维泛化。海涅的函数(见解决约束的非线性问题,具体问题具体分析)对于任何积极的,甚至的价值
:
系统方程的解决方案 是点 , 。
对于这个目标函数,所有的雅可比矩阵的条件 是0除外条款在哪里 和 最多相差1。奇怪的价值观的 ,非零项
的multirosenbrock
辅助函数在这个例子创建目标函数
及其雅可比矩阵
。
解方程组的开始点 奇怪的价值观的 , 即使是值的 。指定 。
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函数
这段代码创建了multirosenbrock
helper函数。
函数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;结束结束