許文立,安徽大學,xuweny87@163.com
許坤,中國人民大學,kunxu2014@126.com
第二部分 工具與技術
線性代數
概述
線性代數是經濟學需要學習的、最有用的應用數學分支之一
例如,經濟和金融中的許多應用問題需要解決線性方程組,如
或者更一般地,
這裡的目標就是給定和,解出。
在考慮這些問題時,至少要考慮以下一些問題
· 解存在嗎?
· 實際上有很多解,如果是,我們應該如何解釋它們?
· 如果解不存在,是否有最佳的「近似」解呢?
· 如果解存在,我們應該如何計算呢?
這些是由線性代數解決的主題
在本講中,我們將介紹線性和矩陣代數的基本原理,同時考慮理論和計算
本講的一些內容與Numpy有一些重複
注意,本講更為理論,並且包含將在應用中使用的背景材料
向量
長度為n的向量僅僅是n個數的序列(或者數組,或者元組),我們可以寫成
我們會按照要求將這些序列寫成行向量或列向量
(以後,當我們希望執行某些矩陣運算時,就有必要區分兩者)
所有n維向量的集合由表示
例如,是平面,而中的一個向量僅僅是平面是上的一個點
一般,向量用圖形表示為從原點到點的箭頭
下圖以這種方式表示三個向量
如果你有興趣,可以查看生成該圖的Python代碼,https://github.com/QuantEcon/QuantEcon.lectures.code/blob/master/linear_algebra/vecs.py
向量運算
最常用的兩種向量運算是加法和標量乘法,我們現在描述
定義,當我們讓兩個向量相加時,我們讓它們的每個元素相加
標量乘法是一個數lamda與一個向量x相乘的運算,
標量乘法如下圖所示
在Python中,向量可以表示為列表或元組,例如,x = (2, 4, 6),但更常用的表示為NumPy數組(https://lectures.quantecon.org/py/numpy.html#numpy-array)
NumPy數組的一個優點是標量乘法和加法具有非常自然的語法
內積和範數
向量x,y的內積定義為
如果兩個向量的內積為零,稱為正交
向量x的範數表示其「長度」(即,其距離零向量的距離),被定義為
表達式被看作x和y之間的距離
繼續看前面的例子,內積和範數可以採用如下代碼計算
張成(Span)
在中給出一組向量,很自然地想到可以通過執行線性運算創建新向量
以這種方式創建的新向量被稱為A的線性組合
特別地,是的線性組合,如果
在這種情況下,值被稱為線性組合的係數
A的線性組合的集合被稱為A的張成
下圖顯示了的張成
該張成是通過這兩點和原點的二維平面
產生該圖的代碼下載地址https://github.com/QuantEcon/QuantEcon.lectures.code/blob/master/linear_algebra/3dvec.py
示例
如果A只包含一個向量,那麼它的張成就是a1的數量乘積,這是通過a1和原點的唯一直線
如果由R^3的經典單位向量組成,也就是
那麼,A的張成就是R^3中的所有元素 ,因為對於任何,我們可以寫
現在考慮
如果是這些向量的任意線性組合,那麼,
因此A0無法張成R^3中的所有向量集
線性無關
我們將看到,通常希望找到具有相對較大張成的向量族,使得許多向量可以由幾個向量的線性運算描述
我們所需要的的條件被稱為線性無關性
具體地,向量的集合被說成是
· 線性相關,如果一些A的子集與A具有相同的張成
· 線性無關,如果它不是線性相關的
換句話說,如果沒有向量冗餘,則一組向量是線性無關的,否則是線性相關的
為了說明這個想法,回憶一下,展示向量的張成的圖,即通過原點的平面
如果我們給出第三個向量a3,並形成集合,則該集合是
· 線性相關,如果a3位於平面中
· 否則,線性無關
作為概念的另一個例證,由於R^n可以被n個向量張成,任何m>n個向量的集合肯定是線性相關的
以下語句等同於線性無關
1. A中的向量不能由其他元素的線性組合構成
2. 如果,那麼,
(第一個表達式中的零是R^n的原點)
唯一的表示
關於線性無關向量的集合的另一個好處是,張成中的每個元素都有一個唯一的表達式來作為這些向量的線性組合
換句話說,如果是線性無關的,且
那麼沒有其他係數序列可以得到相同的向量y
的確,如果我們也有,那麼
線性無關意味著對於所有的i,
矩陣
矩陣是組織用於線性運算的數據的整潔方式
一個矩陣是n行、k列的矩形數組A:
通常,矩陣中的數字表示線性方程組中的係數,如本講座開始時所討論的
顯而易見,如果n=1或者k=1,那麼,矩陣A也被稱為向量
在前一種情況下,A被稱為行向量,而後者稱為列向量
如果n = k ,則A 稱為方陣
aji與aij交換形成的矩陣被稱為A的轉置,表示為
如果A = A',則A 稱為對稱矩陣
對於方陣A ,形成aii的第i個元素被稱為主對角線
A 被稱為對角陣,如果唯一非零項都在主對角線上
如果除對角線之外,主對角線上的每個元素等於1,則A 稱為單位陣,並用I表示
矩陣運算
就像向量一樣,矩陣也定義了一些代數運算
數量乘法和加法是向量的直接推廣:
和
在後一種情況下,矩陣必須具有相同的行列,才能使運算有意義
矩陣乘法的規則是上述討論的內積的推廣,旨在使乘法與基本的線性運算相適應
如果A和B是兩個矩陣,則它們的乘積AB是A的第i行和B的第j列的內積組成的第i,j個元素
有很多教程,可以幫助你可視化此運算,如http://www.mathsisfun.com/algebra/matrix-multiplying.html,或者維基百科的討論(https://en.wikipedia.org/wiki/Matrix_multiplication)
如果A是n*k, B是j*m,那麼,要讓A*B,我們需要k=j,且得到的AB矩陣是n*m
也許是最重要的特例,考慮n*k的矩陣A 乘k*1的列向量x
根據前面的規則,我們得到一個n*1的列向量
注意
AB和BA通常不一樣
另一個重要的特例是單位矩陣
如果A是n*k, I是k*k的單位矩陣,那麼AI = A
如果I是n*n的單位矩陣,則IA = A
NumPy中的矩陣
NumPy數組也被用作矩陣,對於所有的標準矩陣運算,其具有快速、有效的函數和方法[1]
您可以從元組(或列表列表)的元組中來手動創建它們,如下所示
該shape屬性是一個給出行和列數目的元組-更多的討論,參看https://lectures.quantecon.org/py/numpy.html#numpy-shape-dim
為了得到A轉置,使用A.transpose()或更簡單地,A.T
有許多方便的函數,用於創建常用矩陣(零矩陣,單位陣,等等) - 見https://lectures.quantecon.org/py/numpy.html#creating-arrays
由於默認情況下元素執行操作,因此標量乘法和加法具有非常自然的語法
要乘以矩陣,我們使用 np.dot
特別地,np.dot(A, B)是矩陣乘法,而A * B是元素乘法
更多的討論,參見https://lectures.quantecon.org/py/numpy.html#numpy-matrix-multiplication
矩陣映射
每個n*k矩陣A都可以視為與函數相同,函數把映射到
這些函數具有特殊的性質:它們是線性的
一個函數被稱為線性的,如果,對於所有和所有標量alfa,beta,我們有
你可以驗證,當b是零向量時,函數成立,而b為非零向量時則不成立
事實上,眾所周知地是若且唯若存在一個矩陣A使得所有x都滿足時,f是線性的 。
(未完待續……)