5 votos

¿Cómo hacer la siguiente diferenciación de la matriz?

Si $\mathbf{A}$ es simétrica, mi función $f:\mathbb{R}^{d}\mapsto \mathbb{R}^{d}$ se define como $$ f(\mathbf{x}) = \mathbf{Ax}(\mathbf{x}^{T}\mathbf{Ax}). $$ ¿Cuál es la diferenciación de $f$ con respecto al $\mathbf{x}$, es decir, $\nabla_{\mathbf{x}}f(\mathbf{x})$?


Esta no es una tarea problema, sino algo relacionado con mi investigación y me he convertido las notaciones para que sea más legible. La función de $f$ sí ya es un gradiente de algunos vectores de la función que se asigna a un escalar y he asumido inicialmente la Hessiana de la función original sería positiva definida, pero mi código mantiene el disparo de errores en mí. Sin una educación adecuada en la matriz de cálculo, la respuesta que se me ocurrió es $$ \nabla_{\mathbf{x}}f(\mathbf{x}) = \mathbf{A}(\mathbf{x}^{T}\mathbf{Ax}) + 2\mathbf{Axx}^{T}\mathbf{A} $$ Es esto correcto?

4voto

nicomezi Puntos 321

Usted es correcto. Si no está seguro acerca de su resultado, este es el método general.

Informática $f(\mathbf{x}+\mathbf{h})-f(\mathbf{x})$ conduce de hecho a:

$$f(\mathbf{x}+\mathbf{h})-f(\mathbf{x})=\mathbf{x}^TA\mathbf{x}A\mathbf{h}+2A\mathbf{x}\mathbf{x}^TA\mathbf{h}+\underset{=o(|h|)}{\underbrace{A\mathbf{x}\mathbf{h}^TA\mathbf{h}+2A\mathbf{h}\mathbf{x}^TA\mathbf{h}+A\mathbf{h}\mathbf{h}^TA\mathbf{h}}}.$$

Solo amplié $f(\mathbf{x}+\mathbf{h})$ utilizando la linealidad de las operaciones y utilisar el hecho de que $\mathbf{x}^TA\mathbf{h}=\mathbf{h}^TA\mathbf{x}$ $A$ es simétrica.

Por lo tanto, $\nabla_{\mathbf{x}}f(\mathbf{x})=\mathbf{x}^TA\mathbf{x}A+2A\mathbf{x}\mathbf{x}^TA$.

3voto

G. Sassatelli Puntos 3789

En el lápiz-y-papel sentido, su matriz Jacobiana es correcta. Supongo que el código da errores debido al hecho de que el interpreta las flechas $*$ en $$A\stackrel\downarrow*(x^t*A*x)$$ as a product of matrices, rather than as the multiplication matrix-by-scalar. Thus it checks the dimensions, it sees that you are trying to multiply a $(d\veces d)$ vector by a $(1\times 1)$ vector, and it concludes that you are making a syntax error. We humans implicitly assume $$A(x^tAx)=A\cdot (x^t*A*x)$$

Donde $*$ es el mapa que hace que el producto de una $(n\times k)$ $(k\times m)$ matriz de obtener un $(n\times m)$ matriz, y $\cdot$ es el mapa que se asigna a un $(n\times m)$ matriz y un escalar (número de id est, $(1\times1)$ de la matriz) el apropiado cosa. Sin embargo, como justificados y útil como es, sigue siendo un uso incoherente (en realidad, la falta de uso) de la notación.

La máquina no puede hacer tal cosa.

Para verlo más claramente, observe lo que ocurre con el cálculo de la \begin{align}f(x+h)-f(x)&=A(x+h)((x+h)^tA(x+h))-Ax(x^tAx)=\\&=Ax(h^tAx)+Ax(x^tAh)+Ah(x^tAx)+o(\lvert h\rvert)=\\&= 2Axx^tAh+Ah(x^tAx)+o(\lvert h\rvert)\end{align}

Observe que no hay ningún problema en escribir $A*x*\alpha$, debido a que $A:(d\times d)$, $x:(d\times 1)$ y $\alpha:(1\times1)$.

El cálculo anterior muestra que el diferencial de $D_xf$ es en realidad el mapa de $D_xf(h)= 2Axx^tAh+Ah(x^tAx)$. Podría escribir como que si su propósito es el de evaluar.

Sin embargo, si usted desea una matriz de $\nabla_xf$ tal que $\nabla_xfh=D_xf(h)$, se puede obtener con la identidad de $h*\alpha=(\alpha\cdot I)*h$ donde $I$ $d\times d$ matriz identidad, de modo que $$\nabla_xf=2*A*x*x^t*A+A*((x^t*A*x)\cdot I)$$ Cómo se producen los escalares múltiples de la matriz de identidad podría depender del lenguaje de programación, pero no debe haber varias opciones, una vez que sabemos que el problema está ahí.

Otro camino podría ser escrito $((x^t*A*x)*A)$, debido a que algunos lenguajes de programación tienen sólo el escalar por la matriz producto de la sobrecarga en el símbolo $*$, en lugar de la matriz por escalar producto.

2voto

Vim Puntos 3652

Otro método es utilizando la regla de la cadena. En primer lugar, recordar que existe $Q\in M_d(\Bbb R)$ tal que $A=Q^TQ$ (por ejemplo, Cholesky). Ahora deje $z:=Qx$ y $$f(x)=Q^TQxx^TQ^TQX=Q^Tzz^Tz=:g(z)$ $ % que $$D_xf(x)=D_zg(z)D_xQx$$ donde $$D_zg(z)=Q^TD_z zz^Tz=Q^T((z^Tz)I+2zz^T)$ $ finalmente $ de $$D_xf(x)=Q^T((z^Tz)I+2zz^T)Q=(z^Tz)Q^TQ+Q^Tzz^TQ$ enchufar $z=Qx,A=Q^TQ$: $$D_xf(x)=(x^TAx)A+2Axx^TA$ $

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X