{ "metadata": { "language_info": { "name": "python", "version": "3.8.10", "mimetype": "text/x-python", "codemirror_mode": { "name": "ipython", "version": 3 }, "pygments_lexer": "ipython3", "nbconvert_exporter": "python", "file_extension": ".py" }, "orig_nbformat": 4, "kernelspec": { "name": "python3", "display_name": "Python 3.8.10 64-bit ('penter': conda)" }, "interpreter": { "hash": "66a9b9246fc3be4ca617a120a8795ea86c1f91adc8c4462264e6f2ff62103632" } }, "nbformat": 4, "nbformat_minor": 2, "cells": [ { "cell_type": "code", "execution_count": 1, "source": [ "%matplotlib inline\r\n", "# 如果对带有一个变量或是未赋值语句的cell执行操作,Jupyter将会自动打印该变量而无需一个输出语句。\r\n", "from IPython.core.interactiveshell import InteractiveShell\r\n", "InteractiveShell.ast_node_interactivity = \"all\" #默认为'last'\r\n", "# display(Math(latex_s))和display(Latex(latex_s))输出的是latex类型, \r\n", "# display(Markdown(latex_s))输出的是markdown\r\n", "# 推荐markdown和Latex;而Math只支持纯latex\r\n", "from IPython.display import display, Latex, Math, Markdown\r\n", "import numpy as np\r\n", "import matplotlib.pyplot as plt\r\n", "from matplotlib.patches import Polygon\r\n", "from matplotlib.collections import PatchCollection\r\n", "import seaborn as sns\r\n", "plt.rcParams['text.usetex'] = True\r\n", "plt.rcParams['text.latex.preamble'] = r'\\usepackage{amsmath} \\usepackage{amsfonts}'\r\n", "# plt.rcParams.update({\r\n", "# #'font.size': 8,\r\n", "# #'text.usetex': True,\r\n", "# 'text.latex.preamble': [r'\\usepackage{amsmath}', #for \\text command\r\n", "# r'\\usepackage{amsfonts}', # \\mathbb is provided by the LaTeX package amsfonts\r\n", "# ]\r\n", "# })\r\n", "# 参数'text.latex.preamble' or 'pgf.preamble'(这两个不是同一个参数) 以前是用数组,现在用字符串\r\n", "# 罗马体 operatorname -> mbox or mathrm\r\n", "\r\n", "# https://matplotlib.org/stable/tutorials/text/mathtext.html\r\n", "\r\n", "# matplotlib.rcParams['text.latex.unicode'] = True\r\n", "# matplotlib.rcParams['text.latex.preamble'] = [\r\n", "# '\\\\usepackage{CJK}',\r\n", "# r'\\AtBeginDocument{\\begin{CJK}{UTF8}{gbsn}}',\r\n", "# r'\\AtEndDocument{\\end{CJK}}',\r\n", "# ]\r\n", "\r\n", "# Matplotlib中文显示和Latex\r\n", "#import matplotlib.font_manager as mf # 导入字体管理器\r\n", "#my_font= mf.FontProperties(fname='C://Windows//Fonts/simsun.ttc') # 加载字体" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": 2, "source": [ "\r\n", "\r\n", "def show_latex(eqn:int, latex_s:str , validated:bool):\r\n", " fig, ax = plt.subplots(figsize=(20, 0.7))\r\n", " #latex_s = r\"$\\alpha _ { 1 } ^ { r } \\gamma _ { 1 } + \\dots + \\alpha _ { N } ^ { r } \\gamma _ { N } = 0 \\quad ( r = 1 , . . . , R ) ,$\"\r\n", " plt.text(0.01, 0.5, \"({})\".format(eqn), ha='left', va='center', fontsize=20)\r\n", " #水平和垂直方向居中对齐\r\n", " plt.text(0.5, 0.5, latex_s, ha='center', va='center', fontsize=20)\r\n", " if validated:\r\n", " plt.text(0.97, 0.5, r\"ok\", ha='right', va='center', fontsize=20, color = \"g\")\r\n", " else:\r\n", " plt.text(0.97, 0.5, r\"error\", ha='right', va='center', fontsize=20, color = \"r\")\r\n", " # 隐藏框线\r\n", " ax.spines['top'].set_visible(False)\r\n", " ax.spines['right'].set_visible(False)\r\n", " ax.spines['bottom'].set_visible(False)\r\n", " ax.spines['left'].set_visible(False)\r\n", " # 隐藏坐标轴的刻度信息\r\n", " plt.xticks([])\r\n", " plt.yticks([])\r\n", "\r\n", "def is_numpy(value):\r\n", " return hasattr(value, 'dtype')\r\n", "\r\n", "def validate(left, right, eqn, latex_s = None): \r\n", " # np.allclose(1, 1) 判断两个向量是否相近https://numpy.org/doc/stable/reference/generated/numpy.allclose.html#numpy.allclose \r\n", " validated = np.allclose(left, right) # (left == right).all()\r\n", " #print(\"{} \\n \".format((left == right)))\r\n", " #print(\"方程({})的结果: {}\".format(eqn, validated))\r\n", " if not validated:\r\n", " print(\"({}) {} = {}\".format(eqn, left, right))\r\n", " if latex_s:\r\n", " display(Markdown(latex_s)) \r\n", " show_latex(eqn, latex_s, validated)\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "markdown", "source": [ "# The Matrix Cookbook\r\n", "[原文](https://www.math.uwaterloo.ca/~hwolkowi/matrixcookbook.pdf)\r\n", "## 符号和命名\r\n", "$\\mathbf{A}\\rightarrow\\;$ Matrix\r\n", "\r\n", "$\\mathbf{A}_{ij}\\rightarrow\\;$ Matrix indexed for some purpose\r\n", "\r\n", "$\\mathbf{A}_{i}\\rightarrow\\;$ Matrix indexed for some purpose\r\n", "\r\n", "$\\mathbf{A}^{ij}\\rightarrow\\;$ Matrix indexed for some purpose\r\n", "\r\n", "$\\mathbf{A}^{n}\\rightarrow\\;$ Matrix indexed for some purpose or the the $n^{th}$ power of a square matrix\r\n", "\r\n", "$\\mathbf{A}^{-1}\\rightarrow\\;$ The inverse matrix of matrix $\\mathbf{A}$\r\n", "\r\n", "$\\mathbf{A}^{\\dagger}\\rightarrow\\;$ The pseudo inverse matrix of the matrix $\\mathbf{A}$\r\n", "\r\n", "$\\mathbf{A}^{1/2}\\rightarrow\\;$ The square root of a matrix (if unique), not elementwise\r\n", "\r\n", "$(\\mathbf{A})_{i,j}\\rightarrow\\;$ The $(i,j)^{th}$ entry of the matrix $\\mathbf{A}$\r\n", "\r\n", "$\\mathbf{A}_{i,j}\\rightarrow\\;$ The $(i,j)^{th}$ entry of the matrix $\\mathbf{A}$\r\n", "\r\n", "$[\\mathbf{A}]_{i,j}\\rightarrow\\;$ The $ij$-suubmatrix, i.e. $\\mathbf{A}$ with $i^{th}$ row and $j^{th}$ column deleted\r\n", "\r\n", "$\\vec{a}\\rightarrow\\;$ Vector (column-vector)\r\n", "\r\n", "$\\vec{a}_{i}\\rightarrow\\;$ Vector indexed for some purpose\r\n", "\r\n", "$\\alpha_{i}\\rightarrow\\;$ The $i^{th}$ element of vector $\\vec{a}$\r\n", "\r\n", "$\\alpha\\rightarrow\\;$ Scalar\r\n", "\r\n", "---\r\n", "\r\n", "$\\Re z\\rightarrow\\;$ Real part of a scalar\r\n", "\r\n", "$\\Re \\mathbf{z}\\rightarrow\\;$ Real part of a vectorS\r\n", "\r\n", "$\\Re \\mathbf{Z}\\rightarrow\\;$ Real part of a matrix\r\n", "\r\n", "$\\Im z\\rightarrow\\;$ Imaginary part of a scalar\r\n", "\r\n", "$\\Im \\mathbf{z}\\rightarrow\\;$ Imaginary part of a vectorS\r\n", "\r\n", "$\\Im \\mathbf{Z}\\rightarrow\\;$ Imaginary part of a matrix\r\n", "\r\n", "---\r\n", "\r\n", "$det(\\mathbf{A})\\rightarrow\\;$ Determinant of $\\mathbf{A}$\r\n", "\r\n", "$Tr(\\mathbf{A})\\rightarrow\\;$ Trace of the matrix $\\mathbf{A}$\r\n", "\r\n", "$diag(\\mathbf{A})\\rightarrow\\;$ Diagonal matrix of the matrix $\\mathbf{A}$, i.e. $(diag(\\mathbf{A}))_{ij} = \\delta_{ij}\\mathbf{A}_{ij}$\r\n", "\r\n", "$eig(\\mathbf{A})\\rightarrow\\;$ Eigenvalues of the matrix $\\mathbf{A}$\r\n", "\r\n", "$vec(\\mathbf{A})\\rightarrow\\;$ The vector-version of the matrix $\\mathbf{A}$\r\n", "\r\n", "$sup\\rightarrow\\;$ Supremum of a set\r\n", "\r\n", "$\\Vert\\mathbf{A}\\Vert\\rightarrow\\;$ Matrix norm (subscript if any denotes what norm)\r\n", "\r\n", "$\\mathbf{A}^{T}\\rightarrow\\;$ Transposed matrix\r\n", "\r\n", "$\\mathbf{A}^{-T}\\rightarrow\\;$ The inverse of the transposed and vice versa, $\\mathbf{A}^{-T} = (\\mathbf{A}^{-1})^{T} = (\\mathbf{A}^{T})^{-1}$\r\n", "\r\n", "$\\mathbf{A}^{\\star}\\rightarrow\\;$ Complex conjugated matrix\r\n", "\r\n", "$\\mathbf{A}^{H}\\rightarrow\\;$ Transposed and complex conjugated matrix (Hermitian)\r\n", "\r\n", "---\r\n", "\r\n", "$\\mathbf{A}\\circ\\mathbf{B}$ Hadamard (elementwise) product\r\n", "\r\n", "$\\mathbf{A}\\otimes\\mathbf{B}$ Kronecker product\r\n", "\r\n", "---\r\n", "\r\n", "$\\mathbf{0}\\rightarrow\\;$ The null matrix. Zero in all entries.\r\n", "\r\n", "$\\mathbf{I}\\rightarrow\\;$ The idnentity matrix\r\n", "\r\n", "$\\mathbf{J}^{ij}\\rightarrow\\;$ The single entry matrix, 1 at (i,j) and zero elsewhere\r\n", "\r\n", "$\\mathbf{\\Sigma}\\rightarrow\\;$ A posisitive definite matrix\r\n", "\r\n", "$\\mathbf{\\Lambda}\\rightarrow\\;$ A diagonal matrix" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## 1 Basics\r\n", "$$\\begin{align} (\\mathbf{A}\\mathbf{B})^{-1} &= \\mathbf{B}^{-1}\\mathbf{A}^{-1} \\\\ (\\mathbf{ABC\\ldots})^{-1} &= \\ldots\\mathbf{C}^{-1}\\mathbf{B}^{-1}\\mathbf{A}^{-1} \\\\ (\\mathbf{A}^{T})^{-1} &= (\\mathbf{A}^{-1})^{T} \\\\ (\\mathbf{A} + \\mathbf{B})^{T} &= \\mathbf{A}^{T} + \\mathbf{B}^{T} \\\\ (\\mathbf{AB})^{T} &= \\mathbf{B}^{T}\\mathbf{A}^{T} \\\\ (\\mathbf{ABC\\ldots})^{T} &= \\ldots\\mathbf{C}^{T}\\mathbf{B}^{T}\\mathbf{A}^{T} \\\\ (\\mathbf{A}^{H})^{-1} &= (\\mathbf{A}^{-1})^{H} \\\\ (\\mathbf{A} + \\mathbf{B})^{H} &= \\mathbf{B}^{H} + \\mathbf{A}^{H} \\\\ (\\mathbf{AB})^{H} &= \\mathbf{B}^{H}\\mathbf{A}^{H} \\\\ (\\mathbf{ABC\\ldots})^{H} &= \\ldots\\mathbf{C}^{H}\\mathbf{B}^{H}\\mathbf{A}^{H} \\\\ \\end{align}$$" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### 1 Basics Proofs\r\n", "- equation (1)):$(\\mathbf{A}\\mathbf{B})^{-1} = \\mathbf{B}^{-1}\\mathbf{A}^{-1}$\r\n", "Multiply both side with $AB \\Rightarrow (\\mathbf{A}\\mathbf{B})^{-1}\\mathbf{AB} = \\mathbf{B}^{-1}\\mathbf{A}^{-1}\\mathbf{AB}$\r\n", "Now, $LHS = (\\mathbf{A}\\mathbf{B})^{-1}\\mathbf{AB}=\\mathbf{I} \\text{ and } RHS = \\mathbf{B}^{-1}\\mathbf{A}^{-1}\\mathbf{AB}=\\mathbf{B}^{-1}\\mathbf{I}\\mathbf{B} =\\mathbf{I} = LHS$\r\n", "\r\n", "---\r\n", "\r\n", "- equation (2):$(\\mathbf{ABC\\ldots})^{-1} = \\ldots\\mathbf{C}^{-1}\\mathbf{B}^{-1}\\mathbf{A}^{-1}$\r\n", "This is generalized case of equation (1) and can be proved similarly.\r\n", "> generalized 广义\r\n", "\r\n", "---\r\n", "\r\n", "- equation (3):$(\\mathbf{A}^{T})^{-1} = (\\mathbf{A}^{-1})^{T}$\r\n", "$$\\begin{aligned} RHS &= (\\mathbf{A}^{-1})^{T} \\\\&= (\\mathbf{A}^{-1})^{T}\\mathbf{A}^T(\\mathbf{A}^T)^{-1} \\quad \\because \\mathbf{A}^T(\\mathbf{A}^T)^{-1}=\\mathbf{I} \\\\&=(\\mathbf{AA^{-1}})^T(\\mathbf{A^T})^{-1} \\quad \\because \\mathbf{B^T}\\mathbf{A^T}=(\\mathbf{AB})^T \\quad \\text{See proof of equation (5) for this} \\\\&=\\mathbf{I^T(A^T)^{-1}}\\\\&=\\mathbf{(A^T)^{-1}}\\\\&=LHS\\end{aligned}$$\r\n", "\r\n", "---\r\n", "\r\n", "- equation (4):$(\\mathbf{A} + \\mathbf{B})^{T} = \\mathbf{A}^{T} + \\mathbf{B}^{T}$\r\n", "The $(i,j)^{th}$ element of $(\\mathbf A^T+\\mathbf B^T)$ is the sum of $(i,j)^{th}$ elements of $\\mathbf A^T$ and $\\mathbf B^T$, which are $(j,i)^{th}$ element of $\\mathbf A$ and $\\mathbf B$, respectively. Thus the $(i,j)^{th}$ element of $\\mathbf A^T+\\mathbf B^T$ is the $(j,i)^{th}$ element of the sum of $\\mathbf A$ and $\\mathbf B$, which is equal to the $(i,j)^{th}$ element of the transpose $(\\mathbf {A+B})^T$.\r\n", "\r\n", "---\r\n", "\r\n", "- equation (5):$(\\mathbf{AB})^{T} = \\mathbf{B}^{T}\\mathbf{A}^{T}$\r\n", "$$(ab)^T_{ki} = (ab)_{ik} = \\sum_{j=1}^na_{ij}b_{jk}$$\r\n", "$$(a^Tb^T)_{ki} = \\sum_{j=1}^nb^T_{kj}a^T_{ji} = \\sum_{j=1}^nb_{jk}a_{ij} =\\sum_{j=1}^na_{ij}b_{jk} = (ab)^T_{ki}$$\r\n", "\r\n", "---\r\n", "\r\n", "- equation (6):$(\\mathbf{ABC\\ldots})^{T} = \\ldots\\mathbf{C}^{T}\\mathbf{B}^{T}\\mathbf{A}^{T}$\r\n", "This is generalized form of above equation (5). To extend it to more than two matrices, use induction:\r\n", "Suppose that for some $n$, we have\r\n", "$$\\begin{aligned}\\mathbf{(A_1A_2\\cdots A_n)^T} = \\mathbf{A^T_n \\cdots A^T_2A^T_1} \\tag{proof 1-6-1}\\end{aligned}$$\r\n", "Note that we have already derived (5) for $n=2$.\r\n", "Then, using the two matrix result and (proof 1-6-1), we have\r\n", "$$\\begin{aligned}\\mathbf{(A_1A_2\\cdots A_nA_{n+1})^T} &= \\mathbf{((A_1A_2\\cdots A_n)A_{n+1})^T}\\\\&=\\mathbf{A_{n+1}^T(A_1A_2\\cdots A_n)^T}\\\\&=\\mathbf{A_{n+1}^TA_{n}^T\\cdots A_{2}^TA_{1}^T}\\end{aligned}$$\r\n", "\r\n", "---\r\n", "\r\n", "- equation (7):$(\\mathbf{A}^{H})^{-1} = (\\mathbf{A}^{-1})^{H}$\r\n", "$$\\begin{aligned}RHS &= \\mathbf{(A^{-1})^H} \\\\&= \\mathbf{(A^{-1})^H A^H (A^H)^{-1}} \\\\&= \\mathbf{(AA^{-1})^H (A^T)^{-1}} \\quad \\because \\mathbf{B^H A^H = (AB)^H} \\text{ See proof of equation (9) fro this} \\\\&= \\mathbf{I^H (A^H)^{-1}} \\\\&= \\mathbf{(A^H)^{-1}} \\\\&= LHS\\end{aligned}$$\r\n", "---\r\n", "\r\n", "- equation (8):$(\\mathbf{A} + \\mathbf{B})^{H} = \\mathbf{B}^{H} + \\mathbf{A}^{H}$\r\n", "\r\n", "---\r\n", "\r\n", "- equation (9):$(\\mathbf{AB})^{H} = \\mathbf{B}^{H}\\mathbf{A}^{H}$\r\n", "\r\n", "---\r\n", "\r\n", "- equation (10):$(\\mathbf{ABC\\ldots})^{H} = \\ldots\\mathbf{C}^{H}\\mathbf{B}^{H}\\mathbf{A}^{H}$\r\n" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "> Left Hand Side (LHS) 左手边;Right Hand Side (RHS) 右手边" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### 1 Basics Validate" ], "metadata": {} }, { "cell_type": "code", "execution_count": 3, "source": [ "# lets play with the above equations and equatities to see for ouselves\r\n", "# caution the above probably work only for square matrices\r\n", "width = 3\r\n", "height = 3\r\n", "A = np.random.random([width, height])\r\n", "B = np.random.random([width, height])\r\n", "C = np.random.random([width, height])\r\n", "\r\n", "I = np.eye(width)\r\n", "\r\n", "\r\n", "A2 = np.random.random([2, 2])\r\n", "B2 = np.random.random([2, 2])\r\n", "C2 = np.random.random([2, 2])\r\n", "I2 = np.eye(2)\r\n", "\r\n", "A4 = np.random.random([4, 4])\r\n", "B4 = np.random.random([4, 4])\r\n", "C4 = np.random.random([4, 4])\r\n", "I4 = np.eye(4)\r\n", "\r\n", "a = np.random.random([width, 1])\r\n", "\r\n", "u = np.random.random([width, 1])\r\n", "v = np.random.random([width, 1])\r\n" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": 4, "source": [ "\r\n", "# equation 1:\r\n", "lft_hand = np.linalg.inv(A.dot(B))\r\n", "rgt_hand = np.dot(np.linalg.inv(B), np.linalg.inv(A))\r\n", "validate(lft_hand, rgt_hand, 1, r\"$(\\mathbf{A}\\mathbf{B})^{-1} = \\mathbf{B}^{-1}\\mathbf{A}^{-1}$\")\r\n", "\r\n", "# equation 2:\r\n", "lft_hand = np.linalg.inv(A.dot(B).dot(C))\r\n", "rgt_hand = np.dot(np.linalg.inv(C), np.linalg.inv(B)).dot(np.linalg.inv(A))\r\n", "validate(lft_hand, rgt_hand, 2, r\"$(\\mathbf{ABC\\ldots})^{-1} = \\ldots\\mathbf{C}^{-1}\\mathbf{B}^{-1}\\mathbf{A}^{-1}$\")\r\n", "\r\n", "# equation 3:\r\n", "lft_hand = np.linalg.inv(A.T)\r\n", "rgt_hand = np.transpose(np.linalg.inv(A))\r\n", "validate(lft_hand, rgt_hand, 3, r\"$(\\mathbf{A}^{T})^{-1} = (\\mathbf{A}^{-1})^{T}$\")\r\n", "\r\n", "# equation 4:\r\n", "lft_hand = (A+B).T\r\n", "rgt_hand = A.T+B.T\r\n", "validate(lft_hand, rgt_hand, 4, r\"$(\\mathbf{A} + \\mathbf{B})^{T} = \\mathbf{A}^{T} + \\mathbf{B}^{T}$\")\r\n", "\r\n", "# equation 5:\r\n", "lft_hand = A.dot(B).T\r\n", "rgt_hand = B.T.dot(A.T)\r\n", "validate(lft_hand, rgt_hand, 5, r\"$(\\mathbf{AB})^{T} = \\mathbf{B}^{T}\\mathbf{A}^{T}$\")\r\n", "\r\n", "# equation 7:\r\n", "lft_hand = np.linalg.inv(np.conjugate(A))\r\n", "rgt_hand = np.conjugate(np.linalg.inv(A))\r\n", "validate(lft_hand, rgt_hand, 7, r\"$(\\mathbf{A}^{H})^{-1} = (\\mathbf{A}^{-1})^{H}$\")\r\n", "\r\n", "# equation 8:\r\n", "lft_hand = np.conjugate(A+B)\r\n", "rgt_hand = np.conjugate(A) + np.conjugate(B)\r\n", "validate(lft_hand, rgt_hand, 8, r\"$(\\mathbf{A} + \\mathbf{B})^{H} = \\mathbf{B}^{H} + \\mathbf{A}^{H}$\")\r\n", "\r\n", "# equation 9:\r\n", "lft_hand = np.conjugate(A*B)\r\n", "rgt_hand = np.conjugate(B)*np.conjugate(A)\r\n", "validate(lft_hand, rgt_hand, 9, r\"$(\\mathbf{A \\star B})^{H} = \\mathbf{B}^{H} \\star \\mathbf{A}^{H} $\")" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$(\\mathbf{A}\\mathbf{B})^{-1} = \\mathbf{B}^{-1}\\mathbf{A}^{-1}$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$(\\mathbf{ABC\\ldots})^{-1} = \\ldots\\mathbf{C}^{-1}\\mathbf{B}^{-1}\\mathbf{A}^{-1}$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$(\\mathbf{A}^{T})^{-1} = (\\mathbf{A}^{-1})^{T}$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$(\\mathbf{A} + \\mathbf{B})^{T} = \\mathbf{A}^{T} + \\mathbf{B}^{T}$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$(\\mathbf{AB})^{T} = \\mathbf{B}^{T}\\mathbf{A}^{T}$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$(\\mathbf{A}^{H})^{-1} = (\\mathbf{A}^{-1})^{H}$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$(\\mathbf{A} + \\mathbf{B})^{H} = \\mathbf{B}^{H} + \\mathbf{A}^{H}$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$(\\mathbf{A \\star B})^{H} = \\mathbf{B}^{H} \\star \\mathbf{A}^{H} $" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:36.457721\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:39.153559\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:39.669559\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:39.698559\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:39.727559\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:39.758559\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:39.788560\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:39.820559\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### 1.1 Trace\r\n", "$$\\begin{align} Tr(\\mathbf{A}) &= \\sum_{i} \\mathbf{A}_{ii} \\\\ Tr(\\mathbf{A}) &= \\sum_{i}\\lambda_{i}, \\;\\;\\lambda_{i} = eig(\\mathbf{A}) \\\\ Tr(\\mathbf{A}) &= Tr(\\mathbf{A}^{T}) \\\\ Tr(\\mathbf{AB}) &= Tr(\\mathbf{BA}) \\\\ Tr(\\mathbf{A}+\\mathbf{B}) &= Tr(\\mathbf{A}) + Tr(\\mathbf{B}) \\\\ Tr(\\mathbf{ABC}) &= Tr(\\mathbf{BCA}) = Tr(\\mathbf{CAB}) \\\\ \\vec{a}^{T}\\vec{a} &= Tr(\\vec{a}\\vec{a}^{T}) \\end{align}$$" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "#### 1.1 Trace Proofs\r\n", "\r\n", "- equation (11):$Tr(\\mathbf{A}) = \\sum_{i} \\mathbf{A}_{ii}$\r\n", "By definition of trace of the matrix, which is the sum of elements on the main diagonal of $\\mathbf{A}$.\r\n", "\r\n", "---\r\n", "\r\n", "- equation (12):$Tr(\\mathbf{A}) = \\sum_{i}\\lambda_{i}, \\;\\;\\lambda_{i} = eig(\\mathbf{A})$\r\n", "By definition, the characteristic polynomial of an $n \\times n$ matrix $\\mathbf{A}$ is given by\r\n", "$$p(t) = \\operatorname{det}(\\mathbf{A-tI}) = (-1)^n \\Big( t^n - (\\operatorname{tr}\\mathbf A)t^{n-1} + \\cdots + (-1)^n \\operatorname{det}\\mathbf{A} \\Big)$$\r\n", "On the other hand, $p(t)=(−1)^n(t−\\lambda_1)\\cdots(t−\\lambda_n)$, where the $\\lambda_j$ are the eigenvalues of $\\mathbf A$. So, comparing coefficients, we have $\\operatorname{tr}\\mathbf A=\\lambda_1+\\cdots+\\lambda_n$.\r\n", "\r\n", "---\r\n", "\r\n", "- equation (13):$Tr(\\mathbf{A}) = Tr(\\mathbf{A}^{T})$\r\n", "Elements of any matrix $\\mathbf{A}$ can be represented by $\\mathbf{A}_{ij}$. After transpose, the corresponding becomes $\\mathbf{A}_{ji}$. But for diagonal elements, $i=j$, therefore, from definition of trace of matrix $\\operatorname{Tr}(\\mathbf A)=\\operatorname{Tr}(\\mathbf A^T)= \\sum_i \\mathbf A_{ii}$\r\n", "\r\n", "---\r\n", "\r\n", "- equation (14):$Tr(\\mathbf{AB}) = Tr(\\mathbf{BA})$\r\n", "Let $\\mathbf{A}$ be a $n \\times m$ and \\mathbf{B} be a $m \\times n$ matrix, we have\r\n", "$$\\begin{aligned}\\operatorname{Tr}(\\mathbf {AB}) &= \\sum_{i=1}^n(\\mathbf{AB})_{ii} \\\\&=\\sum_{i=1}^n\\sum_{j=1}^m \\mathbf {A}_{ij} \\mathbf {B}_{ji} \\\\&= \\sum_{j=1}^m\\sum_{i=1}^n \\mathbf {B}_{ji} \\mathbf {A}_{ij} \\\\&= \\sum_{j=1}^m(\\mathbf{BA})_{jj} \\\\&= \\operatorname{Tr}(\\mathbf{BA})\\end{aligned}$$\r\n", "\r\n", "---\r\n", "\r\n", "- equation (15):$Tr(\\mathbf{A}+\\mathbf{B}) = Tr(\\mathbf{A}) + Tr(\\mathbf{B})$\r\n", "$$\\begin{aligned}RHS &= \\operatorname{Tr}(\\mathbf A) + \\operatorname{Tr}(\\mathbf B) \\\\&=\\sum_{k=1}^na_{kk} + \\sum_{k=1}^nb_{kk} \\\\&=\\sum_{k=1}^n(a_{kk} + b_{kk}) \\\\&= \\operatorname{Tr}(\\mathbf{A}+\\mathbf{B}) \\\\&=LHS \\end{aligned}$$\r\n", "\r\n", "---\r\n", "\r\n", "- equation (16):$Tr(\\mathbf{ABC}) = Tr(\\mathbf{BCA}) = Tr(\\mathbf{CAB})$\r\n", "More general form of (proof 14).\r\n", "\r\n", "---\r\n", "\r\n", "- equation (17):$\\mathbf{a^Ta} = Tr(\\mathbf{aa^T})$" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "#### 1.1 Trace Validate" ], "metadata": {} }, { "cell_type": "code", "execution_count": 5, "source": [ "\r\n", "# equation 11:\r\n", "lft_hand = np.trace(A)\r\n", "rgt_hand = np.sum(np.diag(A))\r\n", "validate(lft_hand, rgt_hand, 11, r\"$Tr(\\mathbf{A}) = \\sum_{i} \\mathbf{A}_{ii}$\")\r\n", "\r\n", "# equation 12:\r\n", "lft_hand = np.trace(A)\r\n", "rgt_hand = np.sum(np.linalg.eigvals(A))\r\n", "validate(lft_hand, rgt_hand, 12, r\"$Tr(\\mathbf{A}) = \\sum_{i}\\lambda_{i}, \\;\\;\\lambda_{i} = eig(\\mathbf{A})$\")\r\n", "\r\n", "# equation 13:\r\n", "lft_hand = np.trace(A)\r\n", "rgt_hand = np.trace(A.T)\r\n", "validate(lft_hand, rgt_hand, 13, r\"$Tr(\\mathbf{A}) = Tr(\\mathbf{A}^{T})$\")\r\n", "\r\n", "# equation 14:\r\n", "lft_hand = np.trace(A.dot(B))\r\n", "rgt_hand = np.trace(B.dot(A))\r\n", "validate(lft_hand, rgt_hand, 14, r\"$Tr(\\mathbf{AB}) = Tr(\\mathbf{BA})$\")\r\n", "\r\n", "# equation 15:\r\n", "lft_hand = np.trace(A+B)\r\n", "rgt_hand = np.trace(A) + np.trace(B)\r\n", "validate(lft_hand, rgt_hand, 15, r\"$Tr(\\mathbf{A}+\\mathbf{B}) = Tr(\\mathbf{A}) + Tr(\\mathbf{B})$\")\r\n", "\r\n", "# equation 16:\r\n", "lft_hand = np.trace(np.dot(A.dot(B), C))\r\n", "rgt_hand = np.trace(np.dot(B.dot(C), A))\r\n", "validate(lft_hand, rgt_hand, 16, r\"$Tr(\\mathbf{ABC}) = Tr(\\mathbf{BCA}) = Tr(\\mathbf{CAB})$\")\r\n", "\r\n", "# equation 17:\r\n", "lft_hand = np.dot(a.T, a)\r\n", "rgt_hand = np.trace(np.dot(a, a.T))\r\n", "validate(lft_hand, rgt_hand, 17, r\"$\\vec{a}^{T}\\vec{a} = Tr(\\vec{a}\\vec{a}^{T})$\")" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$Tr(\\mathbf{A}) = \\sum_{i} \\mathbf{A}_{ii}$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$Tr(\\mathbf{A}) = \\sum_{i}\\lambda_{i}, \\;\\;\\lambda_{i} = eig(\\mathbf{A})$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$Tr(\\mathbf{A}) = Tr(\\mathbf{A}^{T})$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$Tr(\\mathbf{AB}) = Tr(\\mathbf{BA})$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$Tr(\\mathbf{A}+\\mathbf{B}) = Tr(\\mathbf{A}) + Tr(\\mathbf{B})$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$Tr(\\mathbf{ABC}) = Tr(\\mathbf{BCA}) = Tr(\\mathbf{CAB})$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$\\vec{a}^{T}\\vec{a} = Tr(\\vec{a}\\vec{a}^{T})$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:40.979994\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:41.470086\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:41.500117\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:41.529113\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:41.557087\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:41.588087\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:41.620113\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### 1.2 Determinant\r\n", "Let $A$ be an $n \\times n$ matrix.\r\n", "$$\\begin{align} \\mathrm{det}(\\mathbf{A}) &= \\prod_i{\\lambda_i} \\quad \\lambda_i=\\mathrm{eig}(\\mathbf{A})\\\\ \\mathrm{det}(c\\mathbf{A}) &=c^n \\mathrm{det}(\\mathbf{A}), \\quad \\text{if } \\mathbf{A} \\in \\mathbb{R}^{n \\times n} \\\\ \\mathrm{det}(\\mathbf{A}^T) &=\\mathrm{det}(\\mathbf{A}) \\\\ \\mathrm{det}(\\mathbf{AB}) &=\\mathrm{det}(\\mathbf{A})\\mathrm{det}(\\mathbf{B}) \\\\ \\mathrm{det}(\\mathbf{A}^{-1}) &= 1/\\mathrm{det}(\\mathbf{A}) \\\\ \\mathrm{det}(\\mathbf{A}^{n}) &= \\mathrm{det}(\\mathbf{A})^n \\\\ \\mathrm{det}(\\mathbf{I+uv^T}) &= 1+\\mathbf{u^Tv} \\\\ \\end{align}$$\r\n", "\r\n", "For $n=2$:\r\n", "\r\n", "$$\\begin{align} \\mathrm{det}(\\mathbf{I+A}) = 1+\\mathrm{det}(\\mathbf{A})+\\mathrm{Tr}(\\mathbf{A}) \\end{align}$$\r\n", "\r\n", "For $n=3$:\r\n", "\r\n", "$$\\begin{align} \\mathrm{det}(\\mathbf{I+A}) = 1+\\mathrm{det}(\\mathbf{A})+\\mathrm{Tr}(\\mathbf{A})+\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A})^2-\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A}^2) \\end{align}$$\r\n", "\r\n", "For $n=4$:\r\n", "\r\n", "$$\\begin{equation}\\begin{aligned} \\mathrm{det}(\\mathbf{I+A}) =\\; &1+\\mathrm{det}(\\mathbf{A})+\\mathrm{Tr}(\\mathbf{A})\\\\ &+\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A})^2-\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A}^2)\\\\ &+\\frac{1}{6}\\mathrm{Tr}(\\mathbf{A})^3-\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A})\\mathrm{Tr}(\\mathbf{A}^2)+\\frac{1}{3}\\mathrm{Tr}(\\mathbf{A}^3) \\\\ \\end{aligned}\\end{equation}$$\r\n", "\r\n", "For small $\\varepsilon$, the following approximation holds\r\n", "对于小$\\varepsilon$,以下近似成立\r\n", "\r\n", "$$\\begin{align} \\mathrm{det}(\\mathbf{I+\\varepsilon A}) \\cong 1+\\mathrm{det}(\\mathbf{A})+\\varepsilon\\mathrm{Tr}(\\mathbf{A})+\\frac{1}{2}\\varepsilon^2\\mathrm{Tr}(\\mathbf{A})^2-\\frac{1}{2}\\varepsilon^2\\mathrm{Tr}(\\mathbf{A}^2) \\end{align}$$\r\n" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "#### 1.2 Determinant Validate" ], "metadata": {} }, { "cell_type": "code", "execution_count": 6, "source": [ "\r\n", "# equation 18:\r\n", "lft_hand = np.linalg.det(A)\r\n", "rgt_hand = np.prod(np.linalg.eigvals(A))\r\n", "validate(lft_hand, rgt_hand, 18, r\"$\\mathrm{det}(\\mathbf{A}) = \\prod_i{\\lambda_i} \\quad \\lambda_i=\\mathrm{eig}(\\mathbf{A})$\")\r\n", "\r\n", "# equation 19:\r\n", "c = 1.23\r\n", "lft_hand = np.linalg.det(c*A)\r\n", "rgt_hand =np.power(c,A.shape[0])*np.linalg.det(A)\r\n", "validate(lft_hand, rgt_hand, 19, r\"$\\mathrm{det}(c\\mathbf{A}) = c^n \\mathrm{det}(\\mathbf{A}), \\quad \\text{if } \\mathbf{A} \\in \\mathbb{R}^{n \\times n}$\")\r\n", "\r\n", "# equation 20:\r\n", "lft_hand = np.linalg.det(A.T)\r\n", "rgt_hand = np.linalg.det(A)\r\n", "validate(lft_hand, rgt_hand, 20, r\"$\\mathrm{det}(\\mathbf{A}^T) = \\mathrm{det}(\\mathbf{A})$\")\r\n", "\r\n", "# equation 21:\r\n", "lft_hand = np.linalg.det(A.dot(B))\r\n", "rgt_hand = np.linalg.det(A) * np.linalg.det(B)\r\n", "validate(lft_hand, rgt_hand, 21, r\"$\\mathrm{det}(\\mathbf{AB}) =\\mathrm{det}(\\mathbf{A})\\mathrm{det}(\\mathbf{B})$\")\r\n", "\r\n", "# equation 22:\r\n", "lft_hand = np.linalg.det(np.linalg.inv(A))\r\n", "rgt_hand = 1.0/np.linalg.det(A)\r\n", "validate(lft_hand, rgt_hand, 22, r\"$\\mathrm{det}(\\mathbf{A}^{-1}) = 1/\\mathrm{det}(\\mathbf{A})$\")\r\n", "\r\n", "\r\n", "# equation 23:\r\n", "n = 5\r\n", "lft_hand = np.linalg.det(np.linalg.matrix_power(A, n))\r\n", "rgt_hand = np.power(np.linalg.det(A), n) \r\n", "validate(lft_hand, rgt_hand, 23, r\"$\\mathrm{det}(\\mathbf{A}^{n}) = \\mathrm{det}(\\mathbf{A})^n$\")\r\n", "\r\n", "\r\n", "# equation 24:\r\n", "lft_hand = np.linalg.det(I + u.dot(v.T))\r\n", "rgt_hand = 1 + u.T.dot(v)\r\n", "validate(lft_hand, rgt_hand, 24, r\"$\\mathrm{det}(\\mathbf{I+uv^T}) = 1+\\mathbf{u^Tv}$\")\r\n", "\r\n", "# equation 25:\r\n", "lft_hand = np.linalg.det(I2 + A2)\r\n", "rgt_hand = 1 + np.linalg.det(A2) + np.trace(A2)\r\n", "validate(lft_hand, rgt_hand, 25, r\"For $n=2$: $\\mathrm{det}(\\mathbf{I+A}) = 1+\\mathrm{det}(\\mathbf{A})+\\mathrm{Tr}(\\mathbf{A})$\")\r\n", "\r\n", "# equation 26:\r\n", "lft_hand = np.linalg.det(I + A)\r\n", "rgt_hand = 1 + np.linalg.det(A) + np.trace(A) + 0.5*np.power(np.trace(A),2) - 0.5*np.trace(np.linalg.matrix_power(A,2))\r\n", "validate(lft_hand, rgt_hand, 26, r\"For $n=3$: $\\mathrm{det}(\\mathbf{I+A}) = 1+\\mathrm{det}(\\mathbf{A})+\\mathrm{Tr}(\\mathbf{A})+\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A})^2-\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A}^2)$\")\r\n", "\r\n", "# equation 27:\r\n", "lft_hand = np.linalg.det(I4 + A4)\r\n", "rgt_hand = 1 + np.linalg.det(A4) + np.trace(A4) + 0.5*np.power(np.trace(A4),2) - 0.5*np.trace(np.linalg.matrix_power(A4,2)) +1/6 * np.power(np.trace(A4),3) - 0.5*np.trace(A4)*np.trace(np.linalg.matrix_power(A4,2)) +1/3*np.trace(np.linalg.matrix_power(A4,3))\r\n", "validate(lft_hand, rgt_hand, 27, r\"For $n=4$: $\\mathrm{det}(\\mathbf{I+A}) = 1+\\mathrm{det}(\\mathbf{A})+\\mathrm{Tr}(\\mathbf{A}) +\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A})^2-\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A}^2) +\\frac{1}{6}\\mathrm{Tr}(\\mathbf{A})^3-\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A})\\mathrm{Tr}(\\mathbf{A}^2)+\\frac{1}{3}\\mathrm{Tr}(\\mathbf{A}^3)$\")\r\n", "\r\n", "# equation 28:\r\n", "varepsilon = 1e-8\r\n", "lft_hand = np.linalg.det(I + varepsilon*A)\r\n", "rgt_hand = 1 + np.linalg.det(A) + varepsilon*np.trace(A) + 0.5*np.power(varepsilon,2)*np.power(np.trace(A),2) - 0.5*np.power(varepsilon,2)*np.trace(np.linalg.matrix_power(A,2))\r\n", "validate(lft_hand, rgt_hand, 28, r\"$\\mathrm{det}(\\mathbf{I+\\varepsilon A}) \\cong 1+\\mathrm{det}(\\mathbf{A})+\\varepsilon\\mathrm{Tr}(\\mathbf{A})+\\frac{1}{2}\\varepsilon^2\\mathrm{Tr}(\\mathbf{A})^2-\\frac{1}{2}\\varepsilon^2\\mathrm{Tr}(\\mathbf{A}^2)$\")\r\n" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$\\mathrm{det}(\\mathbf{A}) = \\prod_i{\\lambda_i} \\quad \\lambda_i=\\mathrm{eig}(\\mathbf{A})$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$\\mathrm{det}(c\\mathbf{A}) = c^n \\mathrm{det}(\\mathbf{A}), \\quad \\text{if } \\mathbf{A} \\in \\mathbb{R}^{n \\times n}$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$\\mathrm{det}(\\mathbf{A}^T) = \\mathrm{det}(\\mathbf{A})$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$\\mathrm{det}(\\mathbf{AB}) =\\mathrm{det}(\\mathbf{A})\\mathrm{det}(\\mathbf{B})$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$\\mathrm{det}(\\mathbf{A}^{-1}) = 1/\\mathrm{det}(\\mathbf{A})$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$\\mathrm{det}(\\mathbf{A}^{n}) = \\mathrm{det}(\\mathbf{A})^n$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$\\mathrm{det}(\\mathbf{I+uv^T}) = 1+\\mathbf{u^Tv}$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "For $n=2$: $\\mathrm{det}(\\mathbf{I+A}) = 1+\\mathrm{det}(\\mathbf{A})+\\mathrm{Tr}(\\mathbf{A})$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "For $n=3$: $\\mathrm{det}(\\mathbf{I+A}) = 1+\\mathrm{det}(\\mathbf{A})+\\mathrm{Tr}(\\mathbf{A})+\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A})^2-\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A}^2)$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "For $n=4$: $\\mathrm{det}(\\mathbf{I+A}) = 1+\\mathrm{det}(\\mathbf{A})+\\mathrm{Tr}(\\mathbf{A}) +\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A})^2-\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A}^2) +\\frac{1}{6}\\mathrm{Tr}(\\mathbf{A})^3-\\frac{1}{2}\\mathrm{Tr}(\\mathbf{A})\\mathrm{Tr}(\\mathbf{A}^2)+\\frac{1}{3}\\mathrm{Tr}(\\mathbf{A}^3)$" ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "(28) 1.0000000230135486 = 0.8651635248813441\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/markdown": [ "$\\mathrm{det}(\\mathbf{I+\\varepsilon A}) \\cong 1+\\mathrm{det}(\\mathbf{A})+\\varepsilon\\mathrm{Tr}(\\mathbf{A})+\\frac{1}{2}\\varepsilon^2\\mathrm{Tr}(\\mathbf{A})^2-\\frac{1}{2}\\varepsilon^2\\mathrm{Tr}(\\mathbf{A}^2)$" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:42.864859\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAABGoAAAA0CAYAAADSfN6SAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAL9UlEQVR4nO3dLXfj2BnA8cc9C7ZMyaKl16zQTsgWrgyXSZlPMNI3kM6wWZSVWaE0cJHHQjtFKy1rSxIJdcss2pKxzVp2C3ykiSO/KI4cK8n/d45BrBdfj++cKz167nN7WmsBAAAAAADA6f3h1A0AAAAAAADACoEaAAAAAACAjiBQAwAAAAAA0BEEagAAAAAAADqCQA0AAAAAAEBHEKgBAAAAAADoiK/2bGftbgAAAAAAgHb1tm0gowYAAAAAAKAjCNQAAAAAAAB0BIEaAAAAAACAjiBQAwAAAAAA0BEEagAAAAAAADqCQA0AAAAAAEBHEKgBAAAAAADoCAI1AAAAAAAAHXGUQM14PJbhcNj6eV3XFdu2Wz8vAADHFEVRp893iOFwKL1er3r1+30ZDodbX/1+f21/3/dP/RXQkpfYvwEAOKXWAzV5novv+zKdTts+tYRhKHmey3g8bv3cAIDXablcim3bcnZ2JkVRtH5+3/fl6upq7355nkuv12vUhqurq5MHOrIsk9lstvb3rlcQBCIiopQSrXX190MURSHD4bATN/JdasshiqJo5XrqpfZvAMDz5Se+9H7snboZj9J6oMa2bQmCQJRSa+8vl0vJ81xs2xbXdTcem6Zp9YSu3+9vvPgJw1B835flctl20wEAr5BhGAc/XNh305mmqVxeXophGHvPdX19LSKrcW4fwzCk3+9LmqaN2nksSqnaeL+PaZqP+rwgCMR13aME1Z5rWw6RpmmjvrbvHC+5fwMAcCqtBmriOJaiKMRxnNr7Z2dnYtu2xHG88dg0TWU0GolpmpIkifi+X73uMk1TlFI8aQEAtOr8/PzBx2wb00phGIplWXvPs1wuq3M1zdBwHOfRN9rPkWmaYhhGJ757l9ryUI7jrGVEHYL+DQDAcbQaqAnDsLpoucuyLFksFjKbzbY+dfF9XyzLkiAIxDRNcRxHgiDYmJbruu6zTTUGALwcSZJs3ZbnuVxeXjY6TxRFVWbK3ZvafS4vLyXP80b7viSO43TmOqBLbXlK9G8AAI6n1UBNmRWzyb602E0D/sXFRbXtrsFgsPF9AACeShzHO6dmTCaTRtkGIqsHHXeDPk0zCUzTfJVZB2/evKmmVJ9al9rylOjfAAAcT2uBmvICpQyiPJRpmnJzc7P23u3t7cZzlvPbmbsMADhEWZg+jmOJ43jrTXYURdU+vu9XtUjiOK7GrHKa7v2sijRNG9VvKfdTSlVTh9M0bVT3ZDAYVGPlazIYDEQp1Ymb+C615b5t/bcoChmNRtLr1QstxnEsURStHZumaa2+IP0bAHAq+b9zGf08kt6PPRlGQ4my/Zmt7idX3E+ba+V2ktZ616uxMAy1iOjFYrFzP8MwtOM4tfdns5k2DEN7nqeTJNFhGGrDMHQYhg86DwAAuyRJok3TrL0nIno2m1XvBUGggyBY208ptTbOrYbRzQaDQaP2WJalp9Op1no1FoqIFhHteV6j45VSjfY7FqVUo/F/Op1qEWlt7PY8TxuG0cq5HqtLbSkd0n+n0+na7+M4ztbrsNfSvwEA3TL9farlvWjvV08ns0SHt6E2fjK088uX8cv71dPy/ssYZ320tLwXncySUzR5l62xmK/aCviUqzA1qfy/iVJKfvvtNxkOh1VdmiAIaoWJS+fn589ylQUAwGm5rltb5el+fbXlcim+74vWurbfx48ft45Nd49vUpx4uVxKmqZVe5RSMhgMJM9ziaKo0RLWSikpimJvdoNt2w9aMTEMwwev6PSULi8vZTweS5qmj1pJqittafP3ObT/Xl9fy7t379ba5Lpubf8u9m8AwOvw9tNb8b7zJBh9GUPUmZLRzyNxL1wZfLs+G8f95Er8r1im9lRMddrrhYdoLVDz+fPnRx0fRVF18WxZVrWU983NzcZlUw8NCAEAXq+iKKQoir3TdNM0FcMwalNs5/O5ZFm293Pm83mjcSqKotpNsOu64rpuVXS1aR2QfQ5dgryLyqkzg8GgWsjgrjzPJQzDJ5mO1FZb2vx9HtN/m/TbLvZvAMDLlxapLP+3FPdifQqTqUwxvjZk8s/JWqDGT3yJ8kgCMxDrT89rvGktUPMYy+VSXNcVz/OqAXswGMh0OpXhcNiJp2UAgOevacHX+Xwu5+fntbGn6VjUNDMiDEOZz+dbV8G5vr7mRvaeNE0lDMMqsOH7fm2fMmjymtpy16H9982bN5IkSbVfnue12jQi9G8AwGkUi9WMmvM/1rM61ZmS/D/r13njf6xm6kx+n4j3Z+/4DWxRa4Gab7755uBj5/O5iEht1acyzTXP89rFRdO0WwAASk2nTyilqrGpqTzPRSklhmGIYRh7b2bLIquz2ay2zfd9GY/Hkud5o2kfTcZD27b37nNXEASdm26Spqn4vl9lhTiOI77vnyQzo+22tPn7HNJ/RVaBnMlkslYY2/PqF7Zd7N8AgJdPna3Gi2JR1KY4FYtCLr69WHvP+86TUX8ko59HMv77+HkFa3YVsHlIFZzHFhOWDQUGy8KDSVIv+kMxYQDAIQzDWCsaXJJ7xYS37Zdl2doxpbJgamlfsVXLsjaOb1qvF13dN9aduthqW8WEsyzb+V2zLKsVw9Vaa9M0tWVZa5/jed7e9jxGl9qyzUP7r9a6Vnx4l9fSvwEA3bH476JWOFjrLwWGy2LB3q+eNn76UuTf+cXR8l70bF4fF09sayymteW5Ly5W0attyyiWdQFEVhk0d/8WWaXHRlEkvu9LmqYSRZG8fftWLMvamKq7XC6l3++31XwAwCvx4cOH2hSV+7U8du13tzZHWej0ocoiq9umoiilqm0fP37cea6XUrNt1xShPM/l+++/l+l0Wvu+tm1XU2vKbJY8zw/KKGmiS23ZpUn/ve/z588b/y88FP0bAHAMxteGfPjhg0R5JO4nV9IilfHfx2JPbbH+ZG0tFhz+EIrxtSHuX1/h8txar57MbHoak2VZ9eTk/uuuJEn0YDDQIqKVUluf7JTnu/tUCACAppIk0UEQ6CRJ9HQ61VmWacMwtGmaa1kASZJoz/P0dDrVSZLUMhSyLKu23x+THMfZuH+ZgVK+7o91SZJopZQ2DKPaRym1MYMjy7IHZUEcw1Mszz0YDGoZS/fbUP47LBaLxktHH6JLbdlnW/+dzWbacZzq9yh/u8VioQ3DWHtt+76vpX8DALonmSV6EA60vBet/qJ08Lf1seJ+Rk15jLwXHd6GT9nUfbbGYnr63tKN9+M4Dwn6jEYjERFJkuQhhz3YeDzeuOwkAABdkaap5Hm+scZHW8bjsZimuXcVq2Pq9/tSFIUsFoud2Q9xHItt2+I4Ti1zJo5jubm5kXfv3j06g2I8HothGHuXUH8KXWrLPkVRSBAEtd+mKApxXVd831/LkHkt/RsAgCPqbdvQ2tQnkdWSi2maNl4N4FBhGD6Lix4AwOtlmqbc3Nwc9TNubm6e/U1s21OEwjCUq6urrSsNPaUutWWfMAw3FjRWSkkQBLXlw+nfAAAcT6uBGsuyRCkl19fXbZ52TZqm1VMfAAC6zHXdo92kx3G8cenk58ayLFkulzKfz1tZZcqyLLm9ve3EDX6X2rLPaDSqBWNKk8lkYxCH/g0AwHG0OvVJZFVkbzgcymw2O8qynv1+X1zXPWqqLQAAbfF9v5UpPXctl0u5vr4++UOLoiiqwv7T6XTnstSu60oURRuXbH5OU4ResjzPq2W1S0VR7Jx+9JL7NwAAR7Z16lPrgRqR1QXXZDKRLMsOOXwr13VlPp9vfeIDAEAXRVHUahCi7fMdYjQa1VYIUkpJlmVrN+1pmopt27Vp0Z7nVTfi/X5fsiyTNE13BnvQTS+xfwMA8ASeNlADAADQlO/7MhqNRCl1lGxcAACADiJQAwAAAAAA0BFPs+oTAAAAAAAADkegBgAAAAAAoCMI1AAAAAAAAHQEgRoAAAAAAICOIFADAAAAAADQEQRqAAAAAAAAOoJADQAAAAAAQEd8tWf71nW9AQAAAAAA0C4yagAAAAAAADqCQA0AAAAAAEBHEKgBAAAAAADoCAI1AAAAAAAAHUGgBgAAAAAAoCMI1AAAAAAAAHTE/wHLW9Fmqt/kBwAAAABJRU5ErkJggg==" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:42.893866\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:43.393836\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:43.424865\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:43.455866\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:43.486859\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:43.517835\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:43.549859\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:43.581836\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:43.618836\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-11T11:22:43.655859\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "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" }, "metadata": {} } ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### 1.3 The Special Case 2x2 (特殊情况)\r\n", "Consider the matrix $\\mathbf{A}$\r\n", "\r\n", "$$\\mathbf{A} = \\begin{bmatrix} \\mathbf{A}_{11} & \\mathbf{A}_{12} \\\\ \\mathbf{A}_{21} & \\mathbf{A}_{22} \\end{bmatrix}$$\r\n", "\r\n", "Determinant and trace\r\n", "\r\n", "$$\\begin{align} \\mathrm{det}(\\mathbf{A}) &= \\mathbf{A}_{11}\\mathbf{A}_{22} - \\mathbf{A}_{12}\\mathbf{A}_{21} \\\\ \\mathrm{Tr}(\\mathbf{A}) &= \\mathbf{A}_{11}+\\mathbf{A}_{22}\\end{align}$$\r\n", "\r\n", "Eigenvalues\r\n", "\r\n", "$$\\lambda^2 - \\lambda \\cdot \\mathrm{Tr}(\\mathbf{A}) + \\mathrm{det}(\\mathbf{A}) = 0 \\\\ \\lambda_1 = \\frac{\\mathrm{Tr}(\\mathbf{A}) + \\sqrt{\\mathrm{Tr}(\\mathbf{A})^2 - 4\\mathrm{det}(\\mathbf{A})}}{2} \\quad \\lambda_2 = \\frac{\\mathrm{Tr}(\\mathbf{A}) - \\sqrt{\\mathrm{Tr}(\\mathbf{A})^2 - 4\\mathrm{det}(\\mathbf{A})}}{2} \\\\ \\lambda_1 + \\lambda_2 = \\mathrm{Tr}(\\mathbf{A}) \\quad \\lambda_1 \\lambda_2 =\\mathrm{det}(\\mathbf{A})$$\r\n", "\r\n", "Eigenvectors\r\n", "\r\n", "$$\\mathbf{v}_1 \\propto \\begin{bmatrix} \\mathbf{A}_{12} \\\\ \\lambda_1-\\mathbf{A}_{11} \\end{bmatrix} \\quad \\mathbf{v}_2 \\propto \\begin{bmatrix} \\mathbf{A}_{12} \\\\ \\lambda_2-\\mathbf{A}_{11} \\end{bmatrix}$$\r\n", "\r\n", "Inverse\r\n", "\r\n", "$$\\begin{align} \\mathbf{A}^{-1} = \\frac{1}{\\mathrm{det}(\\mathbf{A})} \\begin{bmatrix} \\mathbf{A}_{22} & -\\mathbf{A}_{12} \\\\ -\\mathbf{A}_{21} & \\mathbf{A}_{11} \\end{bmatrix} \\end{align}$$" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "## 2 Derivatives" ], "metadata": {} }, { "cell_type": "code", "execution_count": 7, "source": [ "from sympy import MatrixSymbol, Inverse, symbols, Determinant, Trace, Derivative\r\n", "from sympy import MatAdd, Identity, MatMul" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": 8, "source": [ "# k = symbols(\"k\")\r\n", "\r\n", "# X = MatrixSymbol(\"X\", k, k)\r\n", "# x = MatrixSymbol(\"x\", k, 1)\r\n", "\r\n", "# A = MatrixSymbol(\"A\", k, k)\r\n", "# B = MatrixSymbol(\"B\", k, k)\r\n", "# C = MatrixSymbol(\"C\", k, k)\r\n", "# D = MatrixSymbol(\"D\", k, k)\r\n", "\r\n", "# a = MatrixSymbol(\"a\", k, 1)\r\n", "# b = MatrixSymbol(\"b\", k, 1)\r\n", "# c = MatrixSymbol(\"c\", k, 1)\r\n", "# d = MatrixSymbol(\"d\", k, 1)" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": 9, "source": [ "# 把assert 都去掉了\r\n", "# A.diff(A) == Derivative(A, A)\r\n", "\r\n", "# A.T.diff(A) == Derivative(A.T, A)\r\n", "\r\n", "# (2*A).diff(A) == Derivative(2*A, A)\r\n", "\r\n", "# MatAdd(A, A).diff(A) == Derivative(MatAdd(A, A), A)\r\n", "\r\n", "# (A + B).diff(A) == Derivative(A + B, A)" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# #------------matrix_derivative_trivial\r\n", "# # equation 33:\r\n", "# rgt_hand = 0\r\n", "# lft_hand = X.diff(A)\r\n", "\r\n", "# #------------matrix_derivative_vectors_and_scalars\r\n", "# # Cookbook example 69:\r\n", "# expr = x.T*a\r\n", "# expr.diff(x) == a\r\n", "# expr = a.T*x\r\n", "# expr.diff(x) == a\r\n", "\r\n", "## Cookbook example 70:\r\n", "# expr = a.T*X*b\r\n", "# expr.diff(X) == a*b.T\r\n", "\r\n", "# # Cookbook example 71:\r\n", "# expr = a.T*X.T*b\r\n", "# expr.diff(X) == b*a.T\r\n", "\r\n", "# # Cookbook example 77:\r\n", "# expr = b.T*X.T*X*c\r\n", "# expr.diff(X) == X*b*c.T + X*c*b.T\r\n", "\r\n", "# # Cookbook example 78:\r\n", "# expr = (B*x + b).T*C*(D*x + d)\r\n", "# expr.diff(x) == B.T*C*(D*x + d) + D.T*C.T*(B*x + b)\r\n", "\r\n", "# # Cookbook example 81:\r\n", "# expr = x.T*B*x\r\n", "# expr.diff(x) == B*x + B.T*x\r\n", "\r\n", "# # Cookbook example 82:\r\n", "# expr = b.T*X.T*D*X*c\r\n", "# expr.diff(X) == D.T*X*b*c.T + D*X*c*b.T\r\n", "\r\n", "# # Cookbook example 83:\r\n", "# expr = (X*b + c).T*D*(X*b + c)\r\n", "# expr.diff(X) == D*(X*b + c)*b.T + D.T*(X*b + c)*b.T\r\n", "\r\n", "\r\n", "# #-----------matrix_derivative_with_inverse\r\n", "# # Cookbook example 61:\r\n", "# expr = a.T*Inverse(X)*b\r\n", "# expr.diff(X) == -Inverse(X).T*a*b.T*Inverse(X).T\r\n", "\r\n", "# # Cookbook example 63:\r\n", "# expr = Trace(A*Inverse(X)*B)\r\n", "# expr.diff(X) == -(X**(-1)*B*A*X**(-1)).T\r\n", "\r\n", "# # Cookbook example 64:\r\n", "# expr = Trace(Inverse(X + A))\r\n", "# expr.diff(X) == -(Inverse(X + A)).T**2" ], "outputs": [], "metadata": {} }, { "cell_type": "code", "execution_count": null, "source": [ "# #---------------matrix_derivatives_of_traces\r\n", "# # First order:\r\n", "\r\n", "# # Cookbook example 99:\r\n", "# expr = Trace(X)\r\n", "# expr.diff(X) == Identity(k)\r\n", "\r\n", "# # Cookbook example 100:\r\n", "# expr = Trace(X*A)\r\n", "# expr.diff(X) == A.T\r\n", "\r\n", "# # Cookbook example 101:\r\n", "# expr = Trace(A*X*B)\r\n", "# expr.diff(X) == A.T*B.T\r\n", "\r\n", "# # Cookbook example 102:\r\n", "# expr = Trace(A*X.T*B)\r\n", "# expr.diff(X) == B*A\r\n", "\r\n", "# # Cookbook example 103:\r\n", "# expr = Trace(X.T*A)\r\n", "# expr.diff(X) == A\r\n", "\r\n", "# # Cookbook example 104:\r\n", "# expr = Trace(A*X.T)\r\n", "# expr.diff(X) == A\r\n", "\r\n", "# # Cookbook example 105:\r\n", "# # TODO: TensorProduct is not supported\r\n", "# #expr = Trace(TensorProduct(A, X))\r\n", "# #expr.diff(X) == Trace(A)*Identity(k)\r\n", "\r\n", "# ## Second order:\r\n", "\r\n", "# # Cookbook example 106:\r\n", "# expr = Trace(X**2)\r\n", "# expr.diff(X) == 2*X.T\r\n", "\r\n", "# # Cookbook example 107:\r\n", "# expr = Trace(X**2*B)\r\n", "# # TODO: wrong result\r\n", "# #expr.diff(X) == (X*B + B*X).T\r\n", "# expr = Trace(MatMul(X, X, B))\r\n", "# expr.diff(X) == (X*B + B*X).T\r\n", "\r\n", "# # Cookbook example 108:\r\n", "# expr = Trace(X.T*B*X)\r\n", "# expr.diff(X) == B*X + B.T*X\r\n", "\r\n", "# # Cookbook example 109:\r\n", "# expr = Trace(B*X*X.T)\r\n", "# expr.diff(X) == B*X + B.T*X\r\n", "\r\n", "# # Cookbook example 110:\r\n", "# expr = Trace(X*X.T*B)\r\n", "# expr.diff(X) == B*X + B.T*X\r\n", "\r\n", "# # Cookbook example 111:\r\n", "# expr = Trace(X*B*X.T)\r\n", "# expr.diff(X) == X*B.T + X*B\r\n", "\r\n", "# # Cookbook example 112:\r\n", "# expr = Trace(B*X.T*X)\r\n", "# expr.diff(X) == X*B.T + X*B\r\n", "\r\n", "# # Cookbook example 113:\r\n", "# expr = Trace(X.T*X*B)\r\n", "# expr.diff(X) == X*B.T + X*B\r\n", "\r\n", "# # Cookbook example 114:\r\n", "# expr = Trace(A*X*B*X)\r\n", "# expr.diff(X) == A.T*X.T*B.T + B.T*X.T*A.T\r\n", "\r\n", "# # Cookbook example 115:\r\n", "# expr = Trace(X.T*X)\r\n", "# expr.diff(X) == 2*X\r\n", "# expr = Trace(X*X.T)\r\n", "# expr.diff(X) == 2*X\r\n", "\r\n", "# # Cookbook example 116:\r\n", "# expr = Trace(B.T*X.T*C*X*B)\r\n", "# expr.diff(X) == C.T*X*B*B.T + C*X*B*B.T\r\n", "\r\n", "# # Cookbook example 117:\r\n", "# expr = Trace(X.T*B*X*C)\r\n", "# expr.diff(X) == B*X*C + B.T*X*C.T\r\n", "\r\n", "# # Cookbook example 118:\r\n", "# expr = Trace(A*X*B*X.T*C)\r\n", "# expr.diff(X) == A.T*C.T*X*B.T + C*A*X*B\r\n", "\r\n", "# # Cookbook example 119:\r\n", "# expr = Trace((A*X*B + C)*(A*X*B + C).T)\r\n", "# expr.diff(X) == 2*A.T*(A*X*B + C)*B.T\r\n", "\r\n", "# # Cookbook example 120:\r\n", "# # TODO: no support for TensorProduct.\r\n", "# # expr = Trace(TensorProduct(X, X))\r\n", "# # expr = Trace(X)*Trace(X)\r\n", "# # expr.diff(X) == 2*Trace(X)*Identity(k)" ], "outputs": [], "metadata": {} } ] }