You Know Nothing
  • 主页
  • 分类
  • 标签
  • 归档

矩阵微积分

  • 1. 概述
  • 2. 分子布局下的求导
    • 2.1 向量对标量求导
    • 2.2 标量对向量求导
    • 2.3 向量对向量的求导
    • 2.5 矩阵对标量求导
    • 2.6 标量对矩阵求导
    • 2.7 其他矩阵求导
  • 3. 标量对矩阵求导计算方法
    • 3.1 全微分公式
    • 3.2 微分法则
    • 3.3 其他公式
    • 3.4 求导方法

矩阵求导,本质是多元函数求导,仅仅是把函数的⾃变量以及求导的结果排列成了矩阵的形式,⽅便表达与计算。类似地,复合函数的求导法则本质上也是多元函数求导的链式法则,只是将结果整理成了矩阵的形式。从原理上讲,可以对矩阵的每个分量逐元素地求导,得到最终结果;但是这样做太繁琐,极其容易出错,因此推导并记住⼀些常⽤的结论在实践中是⾮常必要的。

不同的矩阵求导方法采取不同的导数排列方法,以便于所求导数可以方便后续计算。主要存在两种符号约定。

1. 概述

矩阵微积分的自变量可以是标量,向量,或者是一个矩阵,因变量也可以是上述的三者之一。每一种不同的自变量和因变量的组合都有不同的一套运算规则。

标量 向量 矩阵
标量 \(\frac{\partial y}{\partial x}\) \(\frac{\partial {\boldsymbol y}}{\partial x}\) \(\frac{\partial {\bf Y}}{\partial x}\)
向量 \(\frac{\partial y}{\partial {\boldsymbol x}}\) \(\frac{\partial {\boldsymbol y}}{\partial {\boldsymbol x}}\)
矩阵 \(\frac{\partial y}{\partial {\bf X}}\)

向量和标量可以看作矩阵的特殊形式。表中用粗体小写字母代表向量,粗体大写字母代表矩阵。

上表中空白的部分求导结果维度太高,而且没有统一的符号约定。

以下说明采用“分子布局”。

2. 分子布局下的求导

2.1 向量对标量求导

$${\boldsymbol y}=\begin{bmatrix} y_{1}\\ y_{2}\\ \vdots\\ y_{m} \end{bmatrix} \Longrightarrow\frac{\partial {\boldsymbol y}}{\partial x}=\begin{bmatrix} \frac{\partial y_1}{\partial x}\\ \frac{\partial y_2}{\partial x}\\ \vdots\\ \frac{\partial y_m}{\partial x}\\ \end{bmatrix}$$

在向量微积分中,向量 \({\boldsymbol y}\) 相对于标量 \(x\) 的导数被称为向量 \({\boldsymbol y}\) 的切向量。

2.2 标量对向量求导

$${\boldsymbol x} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \\ \end{bmatrix}\Longrightarrow \frac{\partial y}{\partial {\boldsymbol x}^{\text{T}}} = \left[ \frac{\partial y}{\partial x_1} \frac{\partial y}{\partial x_2} \cdots \frac{\partial y}{\partial x_n} \right]$$

这是标量函数 \(f({\boldsymbol x})\) 梯度的转置。

2.3 向量对向量的求导

$${\boldsymbol y} = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_m \\ \end{bmatrix},{\boldsymbol x} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \\ \end{bmatrix}\Longrightarrow \frac{\partial {\boldsymbol y}}{\partial {\boldsymbol x}} = \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \frac{\partial y_1}{\partial x_2} & \cdots & \frac{\partial y_1}{\partial x_n}\\ \frac{\partial y_2}{\partial x_1} & \frac{\partial y_2}{\partial x_2} & \cdots & \frac{\partial y_2}{\partial x_n}\\ \vdots & \vdots & \ddots & \vdots\\ \frac{\partial y_m}{\partial x_1} & \frac{\partial y_m}{\partial x_2} & \cdots & \frac{\partial y_m}{\partial x_n}\\ \end{bmatrix}$$

此即雅可比矩阵。

2.5 矩阵对标量求导

$$\frac{\partial {\bf Y}}{\partial x} = \begin{bmatrix} \frac{\partial y_{11}}{\partial x} & \frac{\partial y_{12}}{\partial x} & \cdots & \frac{\partial y_{1n}}{\partial x}\\ \frac{\partial y_{21}}{\partial x} & \frac{\partial y_{22}}{\partial x} & \cdots & \frac{\partial y_{2n}}{\partial x}\\ \vdots & \vdots & \ddots & \vdots\\ \frac{\partial y_{m1}}{\partial x} & \frac{\partial y_{m2}}{\partial x} & \cdots & \frac{\partial y_{mn}}{\partial x}\\ \end{bmatrix}$$

称为切矩阵。

2.6 标量对矩阵求导

$$\frac{\partial y}{\partial {\bf X}} = \begin{bmatrix} \frac{\partial y}{\partial x_{11}} & \frac{\partial y}{\partial x_{21}} & \cdots & \frac{\partial y}{\partial x_{p1}}\\ \frac{\partial y}{\partial x_{12}} & \frac{\partial y}{\partial x_{22}} & \cdots & \frac{\partial y}{\partial x_{p2}}\\ \vdots & \vdots & \ddots & \vdots\\ \frac{\partial y}{\partial x_{1q}} & \frac{\partial y}{\partial x_{2q}} & \cdots & \frac{\partial y}{\partial x_{pq}}\\ \end{bmatrix}$$

矩阵标量 \(f({\bf X})\) 在矩阵 \({\bf Y}\) 方向上的方向导数为:

$$\nabla_{\bf Y} f = \operatorname{tr} \left(\frac{\partial f}{\partial {\bf X}} {\bf Y}\right)$$

2.7 其他矩阵求导

对于向量对矩阵求导,矩阵对向量求导,矩阵对矩阵求导。它们没有统一的符号,也没有统一的应用。

与向量相关的两种矩阵导数,可以被看作是一个只有一列的矩阵和另一个矩阵导数的特例。下面只考虑如何写出一个矩阵对另一个矩阵求导的导数结果。

3. 标量对矩阵求导计算方法

3.1 全微分公式

 对于实值函数对矩阵求导,我们可以写出:

$$df=\sum_{i=1}^m\sum_{j=1}^n\frac{\partial f}{\partial x_{ij}}dx_{ij}=\text{tr}\left(\left(\frac{\partial f}{\partial x}\right)^\text{T}dx\right)$$

3.2 微分法则

  • 加减:\(d({\bf X}\pm{\bf Y})=d{\bf X}\pm d{\bf Y}\)
  • 乘法:\(d({\bf XY})=(d{\bf X}){\bf Y}+{\bf X}(d{\bf Y})\)
  • 转置:\(d({\bf X}^\text{T})=(d{\bf X})^\text{T}\)
  • 迹:\(d\text{tr}({\bf X})=\text{tr}(d{\bf X})\)
  • 逆:\(d{\bf X}^{-1}=-{\bf X}^{-1}d{\bf X}{\bf X}^{-1}\),利用 \({\bf X}{\bf X}^{-1}=\mathbb{I}\)
  • 行列式:\(d|{\bf X}|=\text{tr}({\bf X}^*d{\bf X})\),其中 \({\bf X}^*\) 表示 \({\bf X}\) 的伴随矩阵,在 \({\bf X}\) 可逆时又可以写做:\(d|{\bf X}|=|{\bf X}|\text{tr}({\bf X}^{-1}d{\bf X})\)
  • 逐元素乘:\(d({\bf X}\odot{\bf Y})=d{\bf X}\odot{\bf Y}+{\bf X}\odot d{\bf Y}\),\(\odot\) 表示尺寸相同的矩阵逐元素相乘
  • 逐元素函数:\(dw({\bf X})=w'({\bf X})\odot d{\bf X}\),\(w({\bf X})\) 是逐元素标量运算,\(w'({\bf X})\)是逐元素求导

3.3 其他公式

  • \(\text{tr}(a)=a\),\(a\) 为标量
  • \(\text{tr}({\bf A}^\text{T})=\text{tr}({\bf A})\)
  • \(\text{tr}({\bf A}+{\bf B})=\text{tr}({\bf A})+\text{tr}({\bf B})\)
  • \(\text{tr}({\bf AB})=\text{tr}({\bf BA})\)
  • \(\text{tr}\left({\bf A}^{\text{T}}({\bf B}\odot{\bf C})\right)=\text{tr}\left(({\bf A}\odot {\bf B})^{\text{T}}{\bf C}\right)\)

3.4 求导方法

若标量函数 \(f\) 是矩阵\({\bf X}\) 经加减乘法、行列式、逆、逐元素函数等运算构成,则使用相应的运算法则对 \(f\) 求微分,再使用迹变换给 \(df\) 套上迹并将其它项交换至 \(d{\bf X}\) 左侧,即能得到导数。

例题1:\(f={\boldsymbol a}^{\text{T}}{\bf X}{\boldsymbol b}\),求:\(\frac{\partial f}{\partial {\bf X}}\)。其中 \({\boldsymbol a}\) 是 \(m\times 1\) 列向量,\({\bf X}\) 是 \(m\times n\) 矩阵,\({\boldsymbol b}\) 是 \(n\times 1\) 列向量,\(f\) 是标量。

解答:

全微分:

$$df={\boldsymbol a}^{\text{T}}d{\bf X}{\boldsymbol b}$$

两边取迹:

$$df=\text{tr}({\boldsymbol a}^{\text{T}}d{\bf X}{\boldsymbol b})=\text{tr}({\boldsymbol b}{\boldsymbol a}^{\text{T}}d{\bf X})$$

对照全微分公式:

$$(\frac{\partial f}{\partial {\bf X}})^{\text{T}}={\boldsymbol b}{\boldsymbol a}^{\text{T}}$$

得到:

$$\frac{\partial f}{\partial {\bf X}}=({\boldsymbol b}{\boldsymbol a}^{\text{T}})^{\text{T}}={\boldsymbol a}{\boldsymbol b}^{\text{T}}$$

例题2:\(f={\boldsymbol a}^{\text{T}}\text{exp}({\bf X}{\boldsymbol b})\),求:\(\frac{\partial f}{\partial {\bf X}}\)。其中 \(\boldsymbol{a}\) 是 \(m\times 1\) 列向量,\({\bf X}\) 是 \(m\times n\) 矩阵,\(\boldsymbol{b}\) 是 \(n\times 1\) 列向量,\(\text{exp}\) 表示逐元素求指数,\(f\) 是标量。

解答:

全微分:

$$df=\boldsymbol{a}^{\text{T}}\left(\text{exp}({\bf X}{\boldsymbol b})\odot(d{\bf X}{\boldsymbol b})\right)$$

两边取迹:

$$df = \text{tr}( \boldsymbol{a}^{\text{T}}(\exp({\bf X}\boldsymbol{b})\odot (d{\bf X}\boldsymbol{b}))) \\ =\text{tr}((\boldsymbol{a}\odot \exp({\bf X}\boldsymbol{b}))^{\text{T}}dX \boldsymbol{b}) \\ = \text{tr}(\boldsymbol{b}(\boldsymbol{a}\odot \exp({\bf X}\boldsymbol{b}))^\text{T}d{\bf X})$$

对照全微分公式得到:

$$\frac{\partial f}{\partial {\bf X}} = (\boldsymbol{b}(\boldsymbol{a}\odot \exp({\bf X}\boldsymbol{b}))^{\text{T}})^{\text{T}}= (\boldsymbol{a}\odot \exp({\bf X}\boldsymbol{b}))\boldsymbol{b}^{\text{T}}$$

例题3:线性回归问题。\(l = \|{\bf X}\boldsymbol{w}- \boldsymbol{y}\|^2\)。求 \(\boldsymbol{w}\) 的最小二乘估计,即求 \(\frac{\partial l}{\partial \boldsymbol{w}}\) 的零点。其中 \(\boldsymbol{y}\) 是 \(m\times 1\) 列向量,\({\bf X}\) 是 \(m\times n\) 矩阵,\(\boldsymbol{w}\) 是 \(n\times 1\) 列向量,\(l\) 是标量。

解答:

改写模平方表达式:

$$l = ({\bf X}\boldsymbol{w}- \boldsymbol{y})^{\text{T}}({\bf X}\boldsymbol{w}- \boldsymbol{y})$$

全微分:

$$dl = ({\bf X}d\boldsymbol{w})^\text{T}({\bf X}\boldsymbol{w}-\boldsymbol{y})+({\bf X}\boldsymbol{w}-\boldsymbol{y})^\text{T}({\bf X}d\boldsymbol{w}) = 2({\bf X}\boldsymbol{w}-\boldsymbol{y})^\text{T}{\bf X}d\boldsymbol{w}$$

对照全微分公式得到:

$$\frac{\partial l}{\partial \boldsymbol{w}}= (2({\bf X}\boldsymbol{w}-\boldsymbol{y})^\text{T}{\bf X})^\text{T} = 2{\boldsymbol X}^\text{T}({\bf X}\boldsymbol{w}-\boldsymbol{y})$$

\(\frac{\partial l}{\partial \boldsymbol{w}}\) 的零点即 \(\frac{\partial l}{\partial \boldsymbol{w}}\) 的最小二乘估计 \(\boldsymbol{w} = ({\bf X^\text{T}X})^{-1}{\bf X}^\text{T}\boldsymbol{y}\)

例题4:方差的最大似然估计。样本 \(\boldsymbol{x}_1,\dots, \boldsymbol{x}_n\sim N(\boldsymbol{\mu}, \Sigma)\),求方差 \(\Sigma\) 的最大似然估计。写成数学式是:\(l =\log|\Sigma|+\frac{1}{n}\sum_{i=1}^n(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^\text{T}\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}})\),求 \(\frac{\partial l }{\partial \Sigma}\) 的零点。其中 \(\boldsymbol{x}_i\) 是 \(m\times 1\) 列向量,\(\overline{\boldsymbol{x}}=\frac{1}{n}\sum_{i=1}^n \boldsymbol{x}_i\) 是样本均值,\(\Sigma\) 是 \(m\times m\) 对称正定矩阵,\(l\) 是标量。

解答:

第一项:

$$d\log|\Sigma| = |\Sigma|^{-1}d|\Sigma| = \text{tr}(\Sigma^{-1}d\Sigma)$$

第二项:

$$\frac{1}{n}\sum_{i=1}^n(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^\text{T}d\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}}) = -\frac{1}{n}\sum_{i=1}^n(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^\text{T}\Sigma^{-1}d\Sigma\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}})$$

第二项求迹:

$$\text{tr}\left(\frac{1}{n}\sum_{i=1}^n(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^\text{T}\Sigma^{-1}d\Sigma\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}})\right)\\ =\frac{1}{n} \sum_{i=1}^n \text{tr}((\boldsymbol{x}_i-\boldsymbol{\bar{x}})^\text{T}\Sigma^{-1} d\Sigma \Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}}))\\ = \frac{1}{n}\sum_{i=1}^n\text{tr}\left(\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}})(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^\text{T}\Sigma^{-1}d\Sigma\right)=\text{tr}(\Sigma^{-1}S\Sigma^{-1}d\Sigma)$$

定义:

$$S = \frac{1}{n}\sum_{i=1}^n(\boldsymbol{x}_i-\boldsymbol{\bar{x}})(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^\text{T}$$

为样本方差矩阵

得到:

$$dl = \text{tr}\left(\left(\Sigma^{-1}-\Sigma^{-1}S\Sigma^{-1}\right)d\Sigma\right)$$

对照全微分公式得到:

$$\frac{\partial l }{\partial \Sigma}=(\Sigma^{-1}-\Sigma^{-1}S\Sigma^{-1})^\text{T}$$

其零点即 \(\Sigma\) 的最大似然估计为 \(\Sigma = S\)

例题5:多元 logistic 回归。\(l = -\boldsymbol{y}^\text{T}\ln\text{softmax}({\bf W}\boldsymbol{x})\),求 \(\frac{\partial l}{\partial W}\)。其中 \(\boldsymbol{y}\) 是除一个元素为1外其它元素为0的 \(m\times 1\) 列向量,\({\bf W}\) 是 \(m\times n\) 矩阵,\(\boldsymbol{x}\) 是 \(n\times 1\) 列向量,\(l\) 是标量;\(\text{softmax}(\boldsymbol{a}) = \frac{\exp(\boldsymbol{a})}{\boldsymbol{1}^\text{T}\exp(\boldsymbol{a})}\),其中 \(\exp(\boldsymbol{a})\) 表示逐元素求指数,\(\boldsymbol{1}\) 代表全1向量。

解答:

首先将 softmax 函数代入并写成:

$$l = -\boldsymbol{y}^\text{T} \left(\ln (\exp({\bf W}\boldsymbol{x}))-\boldsymbol{1}\ln(\boldsymbol{1}^\text{T}\exp({\bf W}\boldsymbol{x}))\right) \\ = -\boldsymbol{y}^\text{T}{\bf W}\boldsymbol{x} + \ln(\boldsymbol{1}^\text{T}\exp({\bf W}\boldsymbol{x}))\\$$

这里注意:注意逐元素 log 满足等式:

$$\ln(\boldsymbol{u}/c) = \ln(\boldsymbol{u}) - \boldsymbol{1}\ln(c)$$

以及:

$$\boldsymbol{y}^\text{T} \boldsymbol{1} = 1$$

求微分:

$$dl =-\boldsymbol{y}^\text{T}d{\bf W}\boldsymbol{x}+\frac{\boldsymbol{1}^\text{T}\left(\exp({\bf {\bf W}}\boldsymbol{x})\odot(d{\bf W}\boldsymbol{x})\right)}{\boldsymbol{1}^\text{T}\exp({\bf W}\boldsymbol{x})}$$

根据:

$$\boldsymbol{1}^\text{T} (\boldsymbol{u}\odot \boldsymbol{v}) = \boldsymbol{u}^\text{T} \boldsymbol{v}$$

得:

$$\boldsymbol{1}^\text{T}\left(\exp({\bf W}\boldsymbol{x})\odot(d{\bf W}\boldsymbol{x})\right) = \exp({\bf W}\boldsymbol{x})^\text{T}d{\bf W}\boldsymbol{x}$$

求迹化简为:

$$dl = \text{tr}\left(-\boldsymbol{y}^\text{T}d{\bf W}\boldsymbol{x}+\frac{\exp({\bf W}\boldsymbol{x})^\text{T}d{\bf W}\boldsymbol{x}}{\boldsymbol{1}^\text{T}\exp({\bf W}\boldsymbol{x})}\right) =\text{tr}(\boldsymbol{x}(\text{softmax}({\bf W}\boldsymbol{x})-\boldsymbol{y})^\text{T}d{\bf W})$$

得到:

$$\frac{\partial l}{\partial {\bf W}}= (\text{softmax}({\bf W}\boldsymbol{x})-\boldsymbol{y})\boldsymbol{x}^\text{T}$$

例题5:二层神经网络。\(l = -\boldsymbol{y}^\text{T}\log\text{softmax}({\bf W_2}\sigma({\bf W_1}\boldsymbol{x}))\),求 \(\frac{\partial l}{\partial {\bf W_1}}\) 和 \(\frac{\partial l}{\partial \bf{W_2}}\)。其中 \(\boldsymbol{y}\) 是除一个元素为1外其它元素为0的的 \(m\times 1\) 列向量,\({\bf W_2}\) 是 \(m\times p\) 矩阵,\({\bf W_1}\) 是 \(p\times n\) 矩阵,\(\boldsymbol{x}\) 是 \(n\times 1\) 列向量,\(l\) 是标量;\(\text{softmax}(\boldsymbol{a}) = \frac{\exp(\boldsymbol{a})}{\boldsymbol{1}^\text{T}\exp(\boldsymbol{a})}\) 同例5,\(\sigma(\cdot)\) 是逐元素 sigmoid 函数 \(\sigma(a) = \frac{1}{1+\exp(-a)}\)。

解答:

定义:

$$\boldsymbol{a}_1={\bf W_1}\boldsymbol{x},\boldsymbol{h}_1 = \sigma(\boldsymbol{a}_1),\boldsymbol{a}_2 = {\bf W_2} \boldsymbol{h}_1$$

则:

$$l =-\boldsymbol{y}^\text{T}\log\text{softmax}(\boldsymbol{a}_2)$$

在例5中已求出:

$$\frac{\partial l}{\partial \boldsymbol{a}_2} = \text{softmax}(\boldsymbol{a}_2)-\boldsymbol{y}$$

使用复合法则,注意此处 \(\boldsymbol{h}_1, {\bf W_2}\) 都是变量:

$$dl = \text{tr}\left(\frac{\partial l}{\partial \boldsymbol{a}_2}^\text{T}d\boldsymbol{a}_2\right) = \text{tr}\left(\frac{\partial l}{\partial \boldsymbol{a}_2}^\text{T}dW_2 \boldsymbol{h}_1\right) + \text{tr}\left(\frac{\partial l}{\partial \boldsymbol{a}_2}^\text{T}W_2 d\boldsymbol{h}_1\right)$$

使用矩阵乘法交换的迹技巧从第一项得到:

$$\frac{\partial l}{\partial W_2}= \frac{\partial l}{\partial\boldsymbol{a}_2}\boldsymbol{h}_1^\text{T}$$

从第二项得到:

$$\frac{\partial l}{\partial \boldsymbol{h}_1}= W_2^\text{T}\frac{\partial l}{\partial\boldsymbol{a}_2}$$

接下来求 \(\frac{\partial l}{\partial \boldsymbol{a}_1}\),继续使用复合法则,并利用矩阵乘法和逐元素乘法交换的迹技巧:

$$\text{tr}\left(\frac{\partial l}{\partial\boldsymbol{h}_1}^\text{T}d\boldsymbol{h}_1\right) = \text{tr}\left(\frac{\partial l}{\partial\boldsymbol{h}_1}^\text{T}(\sigma'(\boldsymbol{a}_1)\odot d\boldsymbol{a}_1)\right) = \text{tr}\left(\left(\frac{\partial l}{\partial\boldsymbol{h}_1}\odot \sigma'(\boldsymbol{a}_1)\right)^\text{T}d\boldsymbol{a}_1\right)$$

得到:

$$\frac{\partial l}{\partial \boldsymbol{a}_1}= \frac{\partial l}{\partial\boldsymbol{h}_1}\odot\sigma'(\boldsymbol{a}_1)$$

为求 \(\frac{\partial l}{\partial {\bf W_1}}\),再用一次复合法则 :

$$\text{tr}\left(\frac{\partial l}{\partial\boldsymbol{a}_1}^\text{T}d\boldsymbol{a}_1\right) = \text{tr}\left(\frac{\partial l}{\partial\boldsymbol{a}_1}^\text{T}d{\bf W_1}\boldsymbol{x}\right) = \text{tr}\left(\boldsymbol{x}\frac{\partial l}{\partial\boldsymbol{a}_1}^\text{T}d{\bf W_1}\right)$$

得到:

$$\frac{\partial l}{\partial {\bf W_1}}= \frac{\partial l}{\partial\boldsymbol{a}_1}\boldsymbol{x}^\text{T}$$

RELATED

  • 似然函数
  • 方向导数和梯度
  • 拉格朗日对偶性
  • 贝叶斯定理
  • 指示器随机变量

OLDER

  • C++ Primer 第十七章 标准库特殊设施
  • C++ Primer 第十六章 模板与泛型编程
  • C++ Primer 第十五章 面向对象程序设计
  • C++ Primer 第十四章 重载运算与类型转换
  • C++ Primer 第十三章 拷贝控制

NEWER

  • 排序算法
  • 最大子数组问题
  • 指示器随机变量
  • 贝叶斯定理
  • Python argparse 模块

发布日期

2018-10-23 20:42:45

最后更新

2018-10-24 11:57:17

分类

数学

标签

  • 矩阵 1
  • 数学 6
  • Powered by Pelican. Theme: Elegant by Talha Mansoor