Escribir funciones objetivo de vector y de matriz
¿Qué son las funciones objetivo de vector y de matriz?
Algunos solvers, como fsolve
y lsqcurvefit
, tienen funciones objetivo que son vectores o matrices. La principal diferencia en el uso de estos tipos de funciones objetivo y las funciones objetivo de escalar es la forma en la que se escriben sus derivadas. Las derivadas parciales de primer orden de una función de valor vectorial o valor de matriz se llaman matrices jacobianas; las derivadas parciales de primer orden de una función escalar se llaman gradientes.
Para obtener más información sobre funciones objetivo de valores complejos, consulte Números complejos en solvers de Optimization Toolbox.
Matrices jacobianas de funciones vectoriales
Si x es un vector de variables independientes y F(x) es una función vectorial, la matriz jacobiana J(x) es
Si F tiene m componentes y x tiene k componentes, J es una matriz de m por k.
Por ejemplo, si
, entonces J(x) es
El archivo de función asociado a este ejemplo es:
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
Para indicar al solver que la función objetivo incluye una matriz jacobiana, establezca la opción SpecifyObjectiveGradient
en true
. Por ejemplo:
options = optimoptions('lsqnonlin','SpecifyObjectiveGradient',true);
Matrices jacobianas de funciones de matriz
Para definir la matriz jacobiana de una matriz F(x), cambie la matriz por un vector, columna a columna. Por ejemplo, reescriba la matriz
como un vector f
La matriz jacobiana de F se define en términos de la matriz jacobiana de f,
Si F es una matriz de m por n y x es un vector k, la matriz jacobiana es una matriz de mn por k.
Por ejemplo, si
, entonces la matriz jacobiana de F es
Matrices jacobianas con variables independientes con valor de matriz
Si x es una matriz, defina la matriz jacobiana de F(x) cambiando la matriz x por un vector, columna a columna. Por ejemplo, si
, entonces el gradiente se define en términos del vector
Si
y f tienen el formato de vector de F, la matriz jacobiana de F(X) se define como la matriz jacobiana de f(x):
De este modo, por ejemplo,
Si F es una matriz de m por n y x es una matriz de j por k, entonces la matriz jacobiana es una matriz de mn por jk.