程式扎記: [ RubyAlg ] MIT Linear Algebra, Spring 2005 - Lec7

標籤

2014年12月19日 星期五

[ RubyAlg ] MIT Linear Algebra, Spring 2005 - Lec7

source from here 
Solving Null Space A(x)=0 
Consider we have a matrix A
>> A = LA.newMtx3(3,4, [1,2,2,2,2,4,6,8,3,6,8,10])
=> #
>> puts A
1 2 2 2
2 4 6 8
3 6 8 10
=> nil

Then we do row elimination: 
>> B = A.rowElim(0,-2,1) # 將 row0 乘與 -2 並加到 row1
>> print("Elim Row1:\n#{B}\n")
Elim Row1:
1 2 2 2
0 0 2 4
3 6 8 10

>> B = B.rowElim(0,-3,2) # 將 row0 乘與 -3 並加到 row2
>> print("Elim Row2:\n#{B}\n")
Elim Row2:
1 2 2 2
0 0 2 4
0 0 2 4

>> B = B.rowElim(1,-1,2) # Row echelon form
>> print("Echelon From:\n#{B}\n")
Echelon From:
1 2 2 2
0 0 2 4
0 0 0 0

>> puts A.rref() Reduce row echelon form
1 2 0 -2.0
0 0.0 1 2.0
0 0.0 0 0.0
=> nil

由上可以知道 pivot 數目為 2 (x1, x3), 因此 free variable 數目等於 4-2=2 (x2, x4). 

Pivot Variables vs Free Variables 
既然是 free variables, 所以我們可以給值並求解 Ax=0. 考慮 x2=1; x4=0, 求 x1, x3: 
 

接著考慮 考慮 x2=0; x4=1, 求 x1, x3: 
 

所以我們可以知道 Ax=0 的 Null Space 為: 
 

Special Solution rref(A)=R 
事實上你會發現 Null Space 的參數與 rref 的矩陣有點相似: 
 

事實上這樣的相似並不是巧合, 而是有背後的原理. 假設我們將 matrix A 得到的 rref 的 col1 與 col2 進行調換, 可以得到: 
>> newREFF = A.rref.swapCol!(1,2) # swap col1 with col2 from reff
>> puts newREFF
1 0 2 -2.0
0 1 0.0 2.0
0 0 0.0 0.0
=> nil

而這樣的結果可以看成下面的示意圖: 
 

此時 x1, x2 為 pivot variables; x3, x4 為 free variables. 接下來解 Rx=0
 

此時可以這麼解 Rx=0
 

這時就可以知道為什麼 Null Space 會跟 rref 的矩陣這麼像了: 

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!