Wolfram Mathematica中對矩陣求導?


Mathematica 本身是不區分行向量和列向量的, 數學上來說都是一階張量, 數據結構上都是線性表, 那為什麼會出現分子布局和分母布局呢?

因為...這是矩陣求導啊, 裡面的向量其實是特殊的矩陣, 於是會有 1×n 和 n×1 的區別

最終的結果本來也應該是個高階張量, 但是被壓成了矩陣...這有點像克羅內克積, 非要把張量寫成矩陣...

一切從矩陣出發, 回歸矩陣, 所以才叫矩陣求導, 不然幹嘛不直接推廣到張量求導...

所以矩陣求導說白了就是把非矩陣擴充成矩陣, 然後用微分運算元求個外積, 最後壓回矩陣就行了!


舉個例子

  • 標量對矩陣

那就把標量看成 1×1 矩陣然後求外積就行.

Ys = y;
Xm = {{x11, x12, x13}, {x21, x22, x23}, {x31, x32, x33}};

ArrayFlatten[Outer[Dt, {{Ys}}, Xm], 2] // TraditionalForm

  • 向量對向量

那就分別看成 n×1 和 1×m 然後求外積就行

Yv = {y1, y2, y3}
Xv = {x1, x2, x3}

ArrayFlatten[Outer[Dt, List /@ Yv, List@Xv], 2] // TraditionalForm

你也可以用別人造的輪子...

TD是我寫的包里的函數, 你也可以用xTensor里的VarD, 不過那個是張量求導, 你得自己壓...


這個硬要搞成矩陣會帶來很大的問題, 矩陣對矩陣還處於爭議狀態

本來是個(m,n)對偶的4階張量, 你硬要壓會導致鏈式法則衝突, 那就不能叫求導運算元了...

你要是個多重線性運算元那就不能壓

反正...就是為了計算方便唄, 對計算機來說, 壓成線性表也無所謂的...

因為要書寫美觀才搞出這麼多事來...


Hessian Matrix? (http://reference.wolfram.com/language/tutorial/Differentiation.html)

D[x^2 + y^2, {{x, y}, 2}]



用maple

如果是矩陣對矩陣(也包括標量函數對矩陣),可以用微分形式工具


推薦閱讀:

mathematica軟體是如何盈利的?
Mathematica 有什麼奇技淫巧?
Mathematica的每一個筆記本是一個獨立進程嗎?
Mathematica中如何對矩陣內元素並行計算?
Mathematica定義分段函數後,代入表參數,無法計算結果?

TAG:WolframMathematica |