矩陣代數
學習目標
- 理解矩陣及其相關運算的定義
- 探究為何能把向量和矩陣的乘法視為一種線性組合
- 學習單位矩陣、轉置矩陣、行列式以及矩陣的逆等概念
- 逐步熟悉DirectXMath庫中提供的關於矩陣計算的類與函數的子集
2.1矩陣的定義
一個規模為m x n的矩陣,是由m行n列實數構成的矩陣陣列,行數和列數的乘積表示了矩陣的維度,矩陣中的數字則稱為元素或元。理解矩陣相等、加法運算,標量乘法和減法運算。
2.2矩陣乘法
如果A是一個m x n矩陣,B是一個n x p矩陣,那么AB的乘積是一個規模為m x p的矩陣C,矩陣C中第i行、第j列的元素,有矩陣A的第i個行向量與矩陣B的第j個列向量的點積求得。要注意的是,矩陣A的行向量的維數(可認為是分量的個數)必須和矩陣B的列向量的維數相等才可以使矩陣乘積AB有意義。而且矩陣乘積一般不滿足交換律
2.2.2向量和矩陣的乘法
向量與矩陣的乘積uA相當於:向量u給定的標量系數(x,y,z)與矩陣A中各行向量的線性組合。這個結論有一個一般性,對於一個1 x n行向量u和一個n x m矩陣A的乘積為:u1A1 + u2A2 + …… unAn
2.2.3結合律
矩陣乘法對矩陣加法的分配律:A(B + C) = AB + AC和(A + B)C = AC + BC。
矩陣乘法結合律:(AB)C = A(BC)
2.3轉置矩陣
轉置矩陣指的是將原矩陣的行與列進行互換所得到的新矩陣,轉置矩陣具有一些性質,這里不列舉
2.4單位矩陣
單位矩陣I是一種主對角線的元素均為1,其他元素都為0的方陣。單位矩陣是矩陣的乘法單位元,即任何矩陣和單位矩陣相乘,得到的原矩陣,如果M是一個方陣M,則MI = IM,滿足乘法交換律
2.5矩陣的行列式
行列式是一種特殊的函數,它以一個方陣作為輸入,並輸出一個實數,方陣A的行列式通常表示為det A。行列式推導出求逆矩陣的公示,此外,行列式也可以用來證明:方陣A是可逆的,當且僅當det A 不為0。
2.5.1余子陣
指定一個n x n的矩陣,余子陣Aij(A上有一橫線)即從A中取出第i行和第j列的(n - 1) x (n - 2)矩陣
2.5.2行列式的定義
略
2.6伴隨矩陣
略
2.7逆矩陣
略
2.8用DirectXMath庫處理矩陣
為了對點和向量進行變換,我們要借助1 x 4行向量以及4 x 4矩陣
2.8.1矩陣類型
DirectXMath庫用定義在DirectXMath.h頭文件中的XMMATRIX類來表示4 x 4矩陣,XMMATRIX由4個XMVECTOR實例構成,借此來使用SIMD技術。XMMATRIX類為矩陣運算提供了多種重載運算符。除了各種構造方法之外,我們還可以使用XMMatrixSet函數來創建XMMATRIX實例。
和XMVECTOR一樣,我們建議用XMFLOAT4X4來存儲類中的矩陣類型數據成員,而不是直接使用XMMATRIX.
我們可以用加載方法和存儲方法來實現XMMATRIX和XMFLOAT4X4類型之間的相互轉換
加載方法:
XMMATRIX XM_CALLCONV XMLoadFloat4x4(const XMFLOAT4X4* pSource)
存儲方法:
void XM_CALLCONV XMStoreFloat4x4(XMFloat4x4 * pDestination,FXMMATRIX M)
2.8.2矩陣函數
DirectXMath庫包含了一些和矩陣相關的函數
//返回單位矩陣
XMMATRIX XM_CALLCONV XMMatrixIdentity();
//如果M是單位矩陣則返回true
bool XM_CALLCONV XMMatrixIsIdentity(FXMMATRXI M);
//返回矩陣乘積AB
XMMATRIX XM_CALLCONV XMMatrixMultiply(FXMMATRIX A,CXMMATRIX B);
//返回矩陣M的轉置
XMMATRIX XM_CALLCONVE XMMatrixTranspose(FXMMATRIX M);
//返回(det M,det M,det M,det M,)
XMVECTOR XM_CALLCONV XMMatrixDeteminant(FXMMATRIX M);
//返回矩陣M的逆矩陣
XMMATRIX XM_CALLCONV XMMatrixInverse(XMVECTOR* pDeteminant,FXMMATRIX M);
在聲明具有XMMATRIX參數的函數時,除了要注意一個XMMATRIX類型相當於4個XMVECTOR類型之外,還要注意,第一個參數應該為FXMMATRIX類型,其余都應該為CXMMATRIX類型。不過有一個特例,在構造函數中的參數應該都使用CXMMATRIX類型,而且對於構造函數,也不能使用XM_CALLCONV約定注解
2.8.3DirectXMath矩陣實例程序
主要是一些XMMATRIX類的使用范例,如果想要看示例代碼可以自行百度,以后可能會更新。