第11課 擴展知識

多元函數(shù)的梯度:

多元函數(shù)對各個自變量偏導(dǎo)數(shù)形成的向量叫做多元函數(shù)的梯度。
寫成修飾器時這樣的

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)

\left[\begin{matrix}2 x + y & x + 2 y\end{matrix}\right]

雅可比矩陣

如果有一個多元函數(shù),它輸入的每個參數(shù)對應(yīng)著某一n維向量的每一維度,并且這個n元函數(shù)的輸出為m維向量,那么,輸出向量的每個分量對輸入向量的每個分量的偏導(dǎo)數(shù)構(gòu)成一個m行n列的矩陣,這個m行n列的矩陣叫做這個函數(shù)的雅可比矩陣。
計算舉例

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)

\left[\begin{matrix}2 x + 2 y & 2 x & 1\\1 & - 2 y & 2 z\end{matrix}\right]

Hessian矩陣

n元函數(shù)的二階偏導(dǎo)數(shù)有n^2個,如果把它們依次排開,能夠得到一個對稱矩陣,這個矩陣就叫做這個函數(shù)的Hessian矩陣。
矩陣主對角線上的n個元素是對同一個自變量求二階偏導(dǎo)數(shù)。
例如,求下面這個的Hessian矩陣
f(x,y,z)=x^{2} + 2 x y + 4 y^{2} + 6 y z + 4 z^{2}

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

\left[\begin{matrix}2 & 2 & 0\\2 & 8 & 6\\0 & 6 & 8\end{matrix}\right]

二次型

二次型是只由二次項構(gòu)成的二次函數(shù),例如下面的三元二次函數(shù):
f(x,y,z)=x^{2} + 2 x y + 4 y^{2} + 6 y z + 4 z^{2}
寫成矩陣的形式為
\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]
這個矩陣形式也叫二次型,其中,
\left[\begin{matrix}1 & 1 & 0\\1 & 4& 3\\0 & 3 & 4\end{matrix}\right]
等于這個二次型的Hessian矩陣的一半。

矩陣的各種“定”

矩陣正定

用任意一個非零的n維行向量,乘以一個n階方陣,再乘以這個n維行向量的轉(zhuǎn)置,得到一個只有一個元素的矩陣,這個元素都大于0,則這個n階方陣是一個正定矩陣。

判定矩陣正定的常用方法:
  1. 矩陣的特征值全大于0
  2. 矩陣的順序主子式都大于0(n階方陣的前i行和前i列構(gòu)成的矩陣的行列式,叫做這個方陣的i階順序主子式,n階方陣總共有n個順序主子式)
  3. 矩陣合同于與之同階的單位矩陣(如果存在一個可逆矩陣C,使得C的轉(zhuǎn)置乘以n階方陣A,再乘以C的結(jié)果等于n階方陣B,則矩陣A合同與矩陣B)

矩陣負定

用任意一個非零的n維行向量,乘以一個n階方陣,再乘以這個n維行向量的轉(zhuǎn)置,得到一個只有一個元素的矩陣,這個元素都小于0,則這個n階方陣是一個負定矩陣。

矩陣半定

用任意一個非零的n維行向量,乘以一個n階方陣,再乘以這個n維行向量的轉(zhuǎn)置,得到一個只有一個元素的矩陣,這個元素都大于或小于0,則這個n階方陣是一個半定矩陣

矩陣半正定

用任意一個非零的n維行向量,乘以一個n階方陣,再乘以這個n維行向量的轉(zhuǎn)置,得到一個只有一個元素的矩陣,這個元素都大于或等于0,則這個n階方陣是一個半正定矩陣。

矩陣半負定

用任意一個非零的n維行向量,乘以一個n階方陣,再乘以這個n維行向量的轉(zhuǎ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代碼,輸入的必須是方陣,函數(shù)沒有做輸入檢查,請注意。

推論——針對多元函數(shù)

如果一個多元函數(shù)的Hessian矩陣半正定,則此函數(shù)為凸函數(shù);如果一個多元函數(shù)的Hessian矩陣正定,則此函數(shù)為嚴格凸函數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容