В примере Нелинейные уравнения с Аналитическим якобианом функциональный bananaobj
оценивает F
и вычисляет якобиевский J
. Что, если код, чтобы вычислить якобиан не доступен? По умолчанию, если вы не указываете, что якобиан может быть вычислен в целевой функции (путем установки опции SpecifyObjectiveGradient
в options
к true
), fsolve
, lsqnonlin
, и lsqcurvefit
вместо этого использует конечное дифференцирование, чтобы аппроксимировать якобиан. Это - якобиевская опция по умолчанию. Можно выбрать конечное дифференцирование установкой SpecifyObjectiveGradient
к false
с помощью optimoptions
.
Этот пример использует bananaobj
от примера Нелинейные уравнения с Аналитическим якобианом как целевая функция, но устанавливает SpecifyObjectiveGradient
на false
так, чтобы fsolve
аппроксимировал якобиан и проигнорировал второй bananaobj
вывод.
n = 64; x0(1:n,1) = -1.9; x0(2:2:n,1) = 2; options = optimoptions(@fsolve,'Display','iter','SpecifyObjectiveGradient',false); [x,F,exitflag,output,JAC] = fsolve(@bananaobj,x0,options);
Пример производит следующий вывод:
Norm of First-order Trust-region Iteration Func-count f(x) step optimality radius 0 65 8563.84 615 1 1 130 3093.71 1 329 1 2 195 225.104 2.5 34.8 2.5 3 260 212.48 6.25 34.1 6.25 4 261 212.48 6.25 34.1 6.25 5 326 102.771 1.5625 6.39 1.56 6 327 102.771 3.90625 6.39 3.91 7 392 87.7443 0.976562 2.19 0.977 8 457 74.1426 2.44141 6.27 2.44 9 458 74.1426 2.44141 6.27 2.44 10 523 52.497 0.610352 1.52 0.61 11 588 41.3297 1.52588 4.63 1.53 12 653 34.5115 1.52588 6.97 1.53 13 718 16.9716 1.52588 4.69 1.53 14 783 8.16797 1.52588 3.77 1.53 15 848 3.55178 1.52588 3.56 1.53 16 913 1.38476 1.52588 3.31 1.53 17 978 0.219553 1.16206 1.66 1.53 18 1043 0 0.0468565 0 1.53 Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
Версия конечной разности этого примера требует, чтобы то же количество итераций сходилось как аналитическая якобиевская версия в предыдущем примере. Обычно имеет место, что обе версии сходятся приблизительно на том же уровне с точки зрения итераций. Однако версия конечной разности требует многих дополнительных функциональных оценок. Стоимость этих дополнительных оценок может или не может быть значительной, в зависимости от конкретной проблемы.