Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

5 votos

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

Si A es simétrica, mi función f:RdRd se define como f(x)=Ax(xTAx). ¿Cuál es la diferenciación de f con respecto al x, es decir, xf(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 xf(x)=A(xTAx)+2AxxTA 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(x+h)f(x) conduce de hecho a:

f(x+h)f(x)=xTAxAh+2AxxTAh+AxhTAh+2AhxTAh+AhhTAh=o(|h|).

Solo amplié f(x+h) utilizando la linealidad de las operaciones y utilisar el hecho de que xTAh=hTAx A es simétrica.

Por lo tanto, xf(x)=xTAxA+2AxxTA.

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(xtAx) 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\vecesd) vector by a (1×1) vector, and it concludes that you are making a syntax error. We humans implicitly assume A(xtAx)=A(xtAx)

Donde es el mapa que hace que el producto de una (n×k) (k×m) matriz de obtener un (n×m) matriz, y es el mapa que se asigna a un (n×m) matriz y un escalar (número de id est, (1×1) 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 f(x+h)f(x)=A(x+h)((x+h)tA(x+h))Ax(xtAx)==Ax(htAx)+Ax(xtAh)+Ah(xtAx)+o(|h|)==2AxxtAh+Ah(xtAx)+o(|h|)

Observe que no hay ningún problema en escribir Axα, debido a que A:(d×d), x:(d×1) y α:(1×1).

El cálculo anterior muestra que el diferencial de Dxf es en realidad el mapa de Dxf(h)=2AxxtAh+Ah(xtAx). Podría escribir como que si su propósito es el de evaluar.

Sin embargo, si usted desea una matriz de xf tal que xfh=Dxf(h), se puede obtener con la identidad de hα=(αI)h donde I d×d matriz identidad, de modo que xf=2AxxtA+A((xtAx)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 ((xtAx)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 QMd(R) tal que A=QTQ (por ejemplo, Cholesky). Ahora deje z:=Qx y f(x)=QTQxxTQTQX=QTzzTz=:g(z)$$D_xf(x)=D_zg(z)D_xQxdondeD_zg(z)=Q^TD_z zz^Tz=Q^T((z^Tz)I+2zz^T) finalmente deDxf(x)=QT((zTz)I+2zzT)Q=(zTz)QTQ+QTzzTQ enchufar z=Qx,A=QTQ: $$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