Некоторые решатели, такой как fsolve
и lsqcurvefit
, имейте целевые функции, которые являются векторами или матрицами. Основное различие в использовании между этими типами целевых функций и скалярных целевых функций - то, как вы пишете их производные. Частные производные первого порядка функции с матричным знаком или с векторным знаком называются якобианом; частные производные первого порядка скалярной функции называются градиентом.
Для получения информации о целевых функциях с комплексным знаком смотрите Комплексные числа в Решателях Optimization Toolbox.
Если x является вектором из независимых переменных, и F (x) является вектор-функцией, якобиевский J (x)
Если F имеет компоненты m, и x имеет компоненты k, J является m-by-k матрица.
Например, если
затем J (x)
Файл функции, сопоставленный с этим примером:
function [F jacF] = vectorObjective(x) F = [x(1)^2 + x(2)*x(3); sin(x(1) + 2*x(2) - 3*x(3))]; if nargout > 1 % need Jacobian jacF = [2*x(1),x(3),x(2); cos(x(1)+2*x(2)-3*x(3)),2*cos(x(1)+2*x(2)-3*x(3)), ... -3*cos(x(1)+2*x(2)-3*x(3))]; end
Чтобы указать к решателю, что ваша целевая функция включает якобиан, устанавливает SpecifyObjectiveGradient
опция к true
. Например:
options = optimoptions('lsqnonlin','SpecifyObjectiveGradient',true);
Чтобы задать якобиан матричного F (x), измените матрицу в вектор, столбец столбцом. Например, перепишите матрицу
как векторный f
Якобиан F задан в терминах якобиана f,
Если F является m-by-n матрица, и x является k - вектор, якобианом является mn-by-k матрица.
Например, если
затем якобиан F
Если x является матрицей, задайте якобиан F (x) путем изменения матричного x в вектор, столбец столбцом. Например, если
затем градиент задан в терминах вектора
С
и f, имеющий векторную форму F, якобиан F (X), задан как якобиан f (x):
Так, например,
Если F является m-by-n матрица, и x является j-by-k матрица, то якобианом является mn-by-jk матрица.