Wednesday, November 11, 2009

scilab矩陣計算

手邊沒有MATLAB,我就改用scilab,原本我都用scilab當計算機使用,現在研究所要用MATLAB,我就仔細來研究一下scilab的用法。他跟matlab有些差異,我會特別註明。

矩陣

-->A=[1 1 1;1 2 3;1 3 6]
A  =
    1.    1.    1. 
    1.    2.    3. 
    1.    3.    6. 

-->B=A(1:2,:)
B  =
    1.    1.    1. 
    1.    2.    3. 

冒號非常有意思,B矩陣透過使用冒號,可以擷取A矩陣的1到2行,同樣的,如果…

-->B=A(1:3,:)
B  =
    1.    1.    1. 
    1.    2.    3. 
    1.    3.    6. 

B矩陣就是擷取了A矩陣的1到3行。

矩陣的基本運算

-->A=[1 1 1;1 2 3;1 3 6];
-->B=[8,1,6;3,5,7;4,9,3];
-->A+B
ans  =
    9.    2.     7.  
    4.    7.     10. 
    5.    12.    9.  
-->A-B
ans  =
  - 7.    0.  - 5. 
  - 2.  - 3.  - 4. 
  - 3.  - 6.    3. 
-->A*B
ans  =
    15.    15.    16. 
    26.    38.    29. 
    41.    70.    45. 

-->a=[1 2 3;4 2 6;7 4 9];b=[4;1;2];
-->x=a\b
x  =
  - 1.5 
    2.  
    0.5 

scilab提供了兩種除法運算,左除\與右除/,一般來說x=a\b是方程式a*x=b的解,而x=b/a是方程式x*a=b的解。

矩陣與常數的運算

-->A=[1 1 1;1 2 3;1 3 6];
-->A+3
ans  =
    4.    4.    4. 
    4.    5.    6. 
    4.    6.    9. 
-->A/2
ans  =
    0.5    0.5    0.5 
    0.5    1.     1.5 
    0.5    1.5    3.  

矩陣的乘方運算

-->A=[1 1 1;1 2 3;1 3 6];
-->A^3
ans  =
    19.    45.     81.  
    45.    109.    198. 
    81.    198.    361. 
-->A^0.1
ans  =
    0.9534649    0.1001917    0.0071215 
    0.1001917    0.9373189    0.1377022 
    0.0071215    0.1377022    1.1519452 

當A為方矩陣,P為大於零的整數時,A^P表示A的P次方,P小於零的整數時表示A^-1的P次方

矩陣的函數計算

det() 行列式
spec() 特徵值 matlab為eig()
inv()或 a^(-1) 逆矩陣
rank() 秩
trace() 跡
norm() 範數

-->A=[1 1 1;1 2 3;1 3 6];
-->det(A)
ans  =
    1. 

-->spec(A)
ans  =
    0.1270167 
    1.        
    7.8729833 

轉置A’

另外pinv(A)為A的逆偽

累了…

2 comments:

Joyfaith said...

真佩服你怎麼可以老是在BLOG寫這些硬的像石頭的東西呢我這個家庭主婦都是直接看完第一行後,跳到最後一行....應該是我腦袋空白的幅度太大了吧

李愷兒 said...

因為我是個嚴肅的人