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 |