Некоторые решатели, такие как fsolve
и lsqcurvefit
, имеют целевые функции, которые являются векторами или матрицами. Основное различие в использовании этих типов целевых функций и скалярных целевых функций заключается в том, как вы записываете их производные. Частные производные векторной или матричной функции первого порядка называются якобианскими; частные производные скалярной функции первого порядка называются градиентом.
Для получения информации о комплексных целевых функциях смотрите Комплексные числа в Решателях Optimization Toolbox.
Если x является вектором независимых переменных, а F (x) является векторной функцией, якобиан J (x) является
Если F есть m компоненты, и x имеет k компоненты, J m 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 матрицей.