Ch 9 Complex Scalar 目錄:

Ch 9-1 複數 $i$ 的計算
複數的加減乘
複數 $i$ 直接打指令i就是了,剩下的就是直觀照打。
                
                    a = 2 + 3*i
                    b = 5 + i
                    4*a - 2*b
                
            
輸出結果
                
                    a =  2 + 3i
                    b =  5 + 1i
                    ans =  -2 + 10i
                
            
複數的conjugate
找複數的conjugate,只要用到conj即可。
                
                    a = 3 + 5*i
                    conj(a)
                
            
可以得到答案
            
                a = 3 + 5i
                ans = 3 - 5i
            
            
複數的除以及呈現格式
其實在程式裡,複數的除法跟實數的除法沒有區別。 不過注意一下,由於$\displaystyle \frac{1}{z}=\frac{\bar{z}}{|z|^2}$,在這個部分的計算結果大部分都是分數。 所以稍微介紹一下輸出格式,記得在第一章的介紹裡曾提過,我們可以利用格式這個指令format來更改小數點後面的長度設定。 所以當格式選項為分數(rational number)時,使用format rat,octave會輸出分數。 特別特別要注意一件事:當格式選項為分數時,輸出值會是最接近的有理數,所以就算你問octave,$\sqrt{2}$的值,也會得到分數。 若是格式選項為『最多只顯示小數點後四位的小數表示』,使用format short
                
                    sqrt(2)
                    format rat
                    sqrt(2)
                
            
輸出結果
                
                    ans = 1.4142
                    ans = 8119/5741
                
            
                
                    1 / ( 3 + 5*i )
                    format rat
                    1 / ( 3 + 5*i )
                
            
輸出結果
                
                    ans =  0.088235 - 0.147059i
                    ans = 3/34 - 5/34i
                
            
複數的長度(length)以及角度(argument)
找複數的長度,可以使用abs(),或norm()
                
                    a = 3 + 5*i
                    abs(a)
                    norm(a)
                
            
可以得到答案
            
                a = 3 + 5i
                ans = 3.6056
                ans = 3.6056
            
            
找複數的角度,可以使用arg(),或angle()。 注意這邊得到的角度單位是徑度量,若是希望得到度度量的話,可以使用rad2deg()
                
                    a = -1 + sqrt(3)*i
                    arg(a)
                    rad2deg(arg(a))
                
            
可以得到答案
            
                a = -1.0000 + 1.7321i
                ans = 2.0944
                ans = 120.00
            
            

Ch 9-2
Dot Product
以使用octave做計算來說,你會發現一點差異都沒有,一樣是使用dot(u, v)
                
                    v=[ 1 - i , 2 ]
                    u=[ 2 , 3 ]
                    dot( u , v )
                    dot( v , u )
                
            
就可以得到:
            
                v =

                    1 - 1i   2 + 0i

                u =

                    2   3

                ans =  8 - 2i
                ans =  8 + 2i
            
            
Conjugate Transpose
Conjugate Transpose 其實是兩個步驟的事,正確的做法是結合 conj()transpose()。 不過我們也可以利用一個符號來表示這兩個指令的結合'
                
                    v=[ 1 - i , 2 ]
                    conj(v)
                    transpose(v)
                
            
就可以得到:
            
                v =

                    1 - 1i   2 + 0i
                
                ans =

                    1 + 1i   2 - 0i

                ans =

                    1 - 1i
                    2 + 0i
            
            
兩者結合後:
                
                    v=[ 1 - i , 2]
                    conj(transpose(v))
                    v'
                
            
兩者均可得到:
            
                v =

                    1 - 1i   2 + 0i
                
                ans =

                    1 + 1i
                    2 - 0i
                 
                ans =
                 
                    1 + 1i
                    2 - 0i
            
            

Ch 9-3 unitarily diagonalizable 以使用octave做計算來說,你會發現如果是可以unitarily diagonalizable的矩陣,以前的[ U , D ] = eig( A )直接就是答案了。
                
                    A=[1, 2-2*i, 0; 2+2*i, -1,0; 0, 0, 3]
                    [ U , D ] = eig( A )
                
            
就可以得到:
            
                A =

                    1 + 0i   2 - 2i   0 + 0i
                    2 + 2i  -1 + 0i   0 + 0i
                    0 + 0i   0 + 0i   3 + 0i

                U =

                   -0.4082 + 0.4082i   0.5774 - 0.5774i        0 +      0i
                    0.8165 +      0i   0.5774 +      0i        0 +      0i
                         0 +      0i        0 +      0i   1.0000 +      0i

                D =

                Diagonal Matrix

                   -3   0   0
                    0   3   0
                    0   0   3
            
            
我們可以檢查一下
                
                    U' * U
                
            
確實可以得到 identity matrix:
            
                ans =

                    1.0000 +      0i   0.0000 + 0.0000i        0 +      0i
                    0.0000 - 0.0000i   1.0000 +      0i        0 +      0i
                         0 -      0i        0 -      0i   1.0000 +      0i
            
            
當然我們依然可以使用精確的符號形式,但是得到的答案U不會直接是unitary matrix,自己要再轉換一下。
                
                    A=sym([1, 2-2*i, 0; 2+2*i, -1,0; 0, 0, 3])
                    [ C , D ] = eig( A )
                
            
            
                A = (sym 3×3 matrix)

                    ⎡   1     2 - 2⋅ⅈ  0⎤
                    ⎢                   ⎥
                    ⎢2 + 2⋅ⅈ    -1     0⎥
                    ⎢                   ⎥
                    ⎣   0        0     3⎦

                C = (sym 3×3 matrix)

                    ⎡  1   ⅈ          ⎤
                    ⎢- ─ + ─  1 - ⅈ  0⎥
                    ⎢  2   2          ⎥
                    ⎢                 ⎥
                    ⎢   1       1    0⎥
                    ⎢                 ⎥
                    ⎣   0       0    1⎦

                D = (sym 3×3 matrix)

                    ⎡-3  0  0⎤
                    ⎢        ⎥
                    ⎢0   3  0⎥
                    ⎢        ⎥
                    ⎣0   0  3⎦
            
            
再來把C做成unitary matrix的形式。p.s.simplify()只是把U寫成比較漂亮的形式而已,對於答案沒有影響。
                
                    U = C;
                    U(:,1) = C(:,1) / norm( C(:,1) );
                    U(:,2) = C(:,2) / norm( C(:,2) );
                    U(:,3) = C(:,3) / norm( C(:,3) );
                    U = simplify( U )
                
            
            
                U = (sym 3×3 matrix)

                    ⎡√6⋅(-1 + ⅈ)  √3⋅(1 - ⅈ)   ⎤
                    ⎢───────────  ──────────  0⎥
                    ⎢     6           3        ⎥
                    ⎢                          ⎥
                    ⎢    √6           √3       ⎥
                    ⎢    ──           ──      0⎥
                    ⎢    3            3        ⎥
                    ⎢                          ⎥
                    ⎣     0           0       1⎦
            
            

Ch 9-4 Jordan canonical form 在計算矩陣A的Jordan canonical form時。由於此形式對於數值誤差很敏感,建議將數值輸入轉換為精確的符號形式。然後使用[V, J] = jordan (A) 我們以課本的example 6為例。
                
                    A = sym([2 5 0 0 1;0 2 0 0 0;0 0 -1 0 0;0 0 0 -1 0;0 0 0 0 -1])
                    [V, J] = jordan(A)
                
            
就可以得到:
            
                A = (sym 5×5 matrix)

                    ⎡2  5  0   0   1 ⎤
                    ⎢                ⎥
                    ⎢0  2  0   0   0 ⎥
                    ⎢                ⎥
                    ⎢0  0  -1  0   0 ⎥
                    ⎢                ⎥
                    ⎢0  0  0   -1  0 ⎥
                    ⎢                ⎥
                    ⎣0  0  0   0   -1⎦

                V = (sym 5×5 matrix)

                    ⎡0  0  -1/3  5  0⎤
                    ⎢                ⎥
                    ⎢0  0   0    0  1⎥
                    ⎢                ⎥
                    ⎢1  0   0    0  0⎥
                    ⎢                ⎥
                    ⎢0  1   0    0  0⎥
                    ⎢                ⎥
                    ⎣0  0   1    0  0⎦

                J = (sym 5×5 matrix)

                    ⎡-1  0   0   0  0⎤
                    ⎢                ⎥
                    ⎢0   -1  0   0  0⎥
                    ⎢                ⎥
                    ⎢0   0   -1  0  0⎥
                    ⎢                ⎥
                    ⎢0   0   0   2  1⎥
                    ⎢                ⎥
                    ⎣0   0   0   0  2⎦