第11课 扩展知识

多元函数的梯度:

多元函数对各个自变量偏导数形成的向量叫做多元函数的梯度。
写成修饰器时这样的

def grad(func):
    def f(*args):
        return Matrix([diff(func(*args),i,1) for i in args]).T
    return f

计算举例:

@grad
def gf(x,y):
    return x**2+x*y+y**2
gf(x,y)

雅可比矩阵

如果有一个多元函数,它输入的每个参数对应着某一n维向量的每一维度,并且这个n元函数的输出为m维向量,那么,输出向量的每个分量对输入向量的每个分量的偏导数构成一个m行n列的矩阵,这个m行n列的矩阵叫做这个函数的雅可比矩阵。
计算举例

u=x**2+2*x*y+z
v=x-y**2+z**2
X = Matrix([u, v])
Y = Matrix([x, y, z])
X.jacobian(Y)

Hessian矩阵

n元函数的二阶偏导数有n^2个,如果把它们依次排开,能够得到一个对称矩阵,这个矩阵就叫做这个函数的Hessian矩阵
矩阵主对角线上的n个元素是对同一个自变量求二阶偏导数。
例如,求下面这个的Hessian矩阵

f = x**2+2*x*y+4*y**2+6*y*z+4*z**2
hessian(f,(x,y,z))

二次型

二次型是只由二次项构成的二次函数,例如下面的三元二次函数:

写成矩阵的形式为
\left[\begin{matrix}x & y & z\end{matrix}\right]×\left[\begin{matrix}1 & 1 & 0\\1 & 4& 3\\0 & 3 & 4\end{matrix}\right]×\left[\begin{matrix}x\\y\\z\end{matrix}\right]=\left[\begin{matrix}x+y & x+4y+3z & 3y+4z\end{matrix}\right]×\left[\begin{matrix}x\\y\\z\end{matrix}\right]=\left[\begin{matrix}1xx+2xy+4yy+6yz+4zz\end{matrix}\right]
这个矩阵形式也叫二次型,其中,

等于这个二次型的Hessian矩阵的一半

矩阵的各种“定”

矩阵正定

用任意一个非零的n维行向量,乘以一个n阶方阵,再乘以这个n维行向量的转置,得到一个只有一个元素的矩阵,这个元素都大于0,则这个n阶方阵是一个正定矩阵

判定矩阵正定的常用方法:
  1. 矩阵的特征值全大于0
  2. 矩阵的顺序主子式都大于0(n阶方阵的前i行和前i列构成的矩阵的行列式,叫做这个方阵的i阶顺序主子式,n阶方阵总共有n个顺序主子式)
  3. 矩阵合同于与之同阶的单位矩阵(如果存在一个可逆矩阵C,使得C的转置乘以n阶方阵A,再乘以C的结果等于n阶方阵B,则矩阵A合同与矩阵B)

矩阵负定

用任意一个非零的n维行向量,乘以一个n阶方阵,再乘以这个n维行向量的转置,得到一个只有一个元素的矩阵,这个元素都小于0,则这个n阶方阵是一个负定矩阵

矩阵半定

用任意一个非零的n维行向量,乘以一个n阶方阵,再乘以这个n维行向量的转置,得到一个只有一个元素的矩阵,这个元素都大于或小于0,则这个n阶方阵是一个半定矩阵

矩阵半正定

用任意一个非零的n维行向量,乘以一个n阶方阵,再乘以这个n维行向量的转置,得到一个只有一个元素的矩阵,这个元素都大于或等于0,则这个n阶方阵是一个半正定矩阵

矩阵半负定

用任意一个非零的n维行向量,乘以一个n阶方阵,再乘以这个n维行向量的转置,得到一个只有一个元素的矩阵,这个元素都小于或等于0,则这个n阶方阵是一个半负定矩阵

矩阵不定

除了上述五种定的情形外的矩阵不定。

from sympy import *
from sympy.matrices import Matrix

def classify_matrix(matrix):
    eigenvalues = matrix.eigenvals()
    positive = 0
    negative = 0
    zero = 0
    for eigenvalue in eigenvalues.values():
        if eigenvalue > 0:
            positive += 1
        elif eigenvalue < 0:
            negative += 1
        else:
            zero += 1
    if positive == matrix.shape[0]:
        return "正定"
    elif negative == matrix.shape[0]:
        return "负定"
    elif zero > 0:
        return "不定"
    elif positive > 0 and negative > 0:
        return "半定"
    elif positive > 0 and negative == 0:
        return "半正定"
    elif positive == 0 and negative > 0:
        return "半负定"

matrix = Matrix([[1, -2, -3], [-2, -5, -3], [-3, -3, -6]])
print(classify_matrix(matrix))

这是用来判断矩阵如何定的python代码,输入的必须是方阵,函数没有做输入检查,请注意。

推论——针对多元函数

如果一个多元函数的Hessian矩阵半正定,则此函数为凸函数;如果一个多元函数的Hessian矩阵正定,则此函数为严格凸函数。

你可能感兴趣的:(第11课 扩展知识)