• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Welcome to ErranLi's Blog!

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              106 Posts :: 1 Stories :: 97 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(12)

            搜索

            •  

            積分與排名

            • 積分 - 175914
            • 排名 - 151

            最新評論

            閱讀排行榜

            ?

            原文:http://www.cnblogs.com/JCSU/articles/1490363.html

            ?

            一、用矩陣運算法解線性方程組

            ?

            1、矩陣運算規則及MATLAB實例

            ?

            (1)? 矩陣加(減)法:即兩矩陣對應元素相加減,要求兩矩陣的階數必須相同。

            ??????C = A + B

            ?

            (2)? 矩陣乘法:m×p階矩陣A與p×n階矩陣B的乘積C是一個m×n階的矩陣。元素C(i, j)的值為A矩陣的第i行和B矩陣的第j列對應元素乘積的和。

            ??????A*B = C

            ????? 矩陣乘法一般不滿足交換律,即:A*B B*A

            例:

            >>?A=[1?2?3]

            A?=

            ?????1?????2?????3

            >>?B=[4;?5;?6]

            B?=

            ?????4
            ?????5
            ?????6

            >>?A*B?
            %結果是一個標量

            ans?=

            ????32

            >>?B*A?
            %結果是一個矩陣

            ans?=

            ?????4?????8????12
            ?????5????10????15
            ?????6????12????18

            >>?

            ?

            ?

            (3)? 矩陣求逆:矩陣的逆陣V定義為滿足V*A = I (I為與A同階的單位矩陣)。只有方陣才可以求逆,而且此方陣的行列式必須不為零,det(A) ≠ 0。如果det(A)?= 0,求逆時就會出現無窮大,此時的矩陣稱為奇異的。

            例:

            >>?A

            A?=

            ?????4?????8????12
            ?????5????10????15
            ?????6????12????18

            >>?B

            B?=

            ?????4?????8????12
            ?????6????10????15
            ?????7????12?????4

            >>?det(A)?
            %矩陣A的行列式為零

            ans?=

            ?????0

            >>?det(B)?
            %矩陣B的行列式不為零

            ans?=

            ???112

            >>?inv(A)?
            %對矩陣A求逆時出現無窮大(Inf)
            Warning:?Matrix?is?singular?to?working?precision.

            ans?=

            ???Inf???Inf???Inf
            ???Inf???Inf???Inf
            ???Inf???Inf???Inf

            >>?inv(B)?
            %對矩陣B求逆正常

            ans?=

            ???-1.2500????1.0000?????????0
            ????0.7232???-0.6071????0.1071
            ????0.0179????0.0714???-0.0714

            >>?

            ?

            ?

            (4)? 矩陣轉置:矩陣的行列互換后構成轉置矩陣。如果A是m×n階的,則AT是n×m階的。

            例:

            >>?A

            A?=

            ?????4?????8????12
            ?????5????10????15

            >>?B=A'

            B?=

            ?????4?????5
            ?????8????10
            ????12????15

            ?

            ?

            (5)? 矩陣分塊:矩陣A可以劃分成許多小矩陣。

            例:

            >>?A

            A?=

            ?????3????-4?????3?????2????-1
            ?????0????-6?????0????-3????-3
            ?????4????-3?????4?????2????-2
            ?????1?????1?????1?????0????-1

            >>?A1=A(1:3,?1:3)

            A1?=

            ?????3????-4?????3
            ?????0????-6?????0
            ?????4????-3?????4

            >>?A2=A(1:3,?4:5)

            A2?=

            ?????2????-1
            ????-3????-3
            ?????2????-2

            >>?A3=A(4,?1:4)

            A3?=

            ?????1?????1?????1?????0

            >>?A4=A(4,?5)

            A4?=

            ????-1

            >>?

            ?

            ?

            (5)? 矩陣分解為向量:把矩陣沿行向或列向分解為單列或單行向量,常見的是分解為列向量。

            其中:

            ?

            ?

            (6)? 行向量左乘列向量:要求兩向量的長度必須一致,結果為一個標量。得出的是向量各分量的平方和。如果這些分量是正交的,則得出的是向量的長度平方。它的平方根就是向量長度,也稱為向量的范數或2范數。

            行向量左乘列向量得到的是,在工程中具有這樣計算形式的問題很多,比如用它計算兩個向量x和y之間的相關性。

            ?

            (7)? 列向量左乘行向量:如果列向量的長度為n,行向量的長度為m,則相乘會得出一個n×m的矩陣,這種方法常常用來生成和計算一些復雜的大矩陣。

            ?

            (8)? 矩陣乘法和冪次:A^2 = A*A,? A^n =? A*A*...*A。根據矩陣相乘內階數必須相等,只有方陣才能乘方和冪次。

            ?

            ?

            2、初等變換乘子矩陣的生成及MATLAB實例

            ?

            本節通過將原矩陣左乘變換的單位矩陣實現矩陣的初等行變換:

            (1) 行交換:將矩陣A的第 i , j 兩行互換位置。


            %?行交換:交換矩陣A的第1行和第3行

            %?步驟1:得到一個5階單位陣:E=eye(5)
            %?步驟2:交換E的第1行和第3行得到矩陣 E1
            %?步驟3:矩陣A左乘矩陣E1得到交換后 的矩陣

            >>?A

            A?=

            ?????3????-4?????3?????2????-1
            ?????0????-6?????0????-3????-3
            ?????4????-3?????4?????2????-2
            ?????1?????1?????1?????0????-1
            ????-2?????6????-2?????1?????3

            >>?

            E1?=

            ?????0?????0?????1?????0?????0
            ?????0?????1?????0?????0?????0
            ?????1?????0?????0?????0?????0
            ?????0?????0?????0?????1?????0
            ?????0?????0?????0?????0?????1

            >>?E1*A

            ans?=

            ?????4????-3?????4?????2????-2
            ?????0????-6?????0????-3????-3
            ?????3????-4?????3?????2????-1
            ?????1?????1?????1?????0????-1
            ????-2?????6????-2?????1?????3

            >>?

            ?

            寫成函數E1gen(A,i,j):

            function?E=E1gen(A,i,j)
            n=size(A);
            %求矩陣A的行數和列數
            m=min(n);
            %獲取矩陣行數和列數中的最小值
            E=eye(m);
            %產生單位對角陣
            E(i,i)=0;?E(j,j)=0;?E(i,j)=1;?E(j,i)=1;

            ?

            ?

            (2) 行乘數:將矩陣A的第 i 行乘以 k 。

            ?

            ?

            %?行乘數:將矩陣A的第4行乘以5

            %?步驟1:得到一個5階單位陣:E=eye(5)
            %?步驟2:將單位陣E中的元素E(4,4)乘以5得到矩陣E2
            %?步驟3:矩陣A左乘矩陣E2得到變換后 的矩陣

            >>?A

            A?=

            ?????3????-4?????3?????2????-1
            ?????0????-6?????0????-3????-3
            ?????4????-3?????4?????2????-2
            ?????1?????1?????1?????0????-1
            ????-2?????6????-2?????1?????3

            >>?E2

            E2?=

            ?????1?????0?????0?????0?????0
            ?????0?????1?????0?????0?????0
            ?????0?????0?????1?????0?????0
            ?????0?????0?????0?????5?????0
            ?????0?????0?????0?????0?????1

            >>?E2*A

            ans?=

            ?????3????-4?????3?????2????-1
            ?????0????-6?????0????-3????-3
            ?????4????-3?????4?????2????-2
            ?????5?????5?????5?????0????-5
            ????-2?????6????-2?????1?????3

            >>?

            ?

            寫成函數E2gen(A,i,k):

            ?

            function?E=E2gen(A,i,k)
            n=size(A);
            m=min(n);%獲取矩陣行數和列數中的最小值
            E=eye(m);%產生單位對角陣
            E(i,i)=k;

            ?

            ?

            (3) 行相加:將矩陣的第 i 行乘以 k,加到第 j 行。


            %?行乘數加到另一行:將矩陣A的第4行乘以2加到第5行

            %?步驟1:得到一個5階單位陣:E=eye(5)
            %?步驟2:將單位陣E中的元素E(5,4)乘以2得到矩陣E3
            %?步驟3:矩陣A左乘矩陣E3得到變換后的矩陣

            >>?A

            A?=

            ?????3????-4?????3?????2????-1
            ?????0????-6?????0????-3????-3
            ?????4????-3?????4?????2????-2
            ?????1?????1?????1?????0????-1
            ????-2?????6????-2?????1?????3

            >>?E3

            E3?=

            ?????1?????0?????0?????0?????0
            ?????0?????1?????0?????0?????0
            ?????0?????0?????1?????0?????0
            ?????0?????0?????0?????1?????0
            ?????0?????0?????0?????2?????1

            >>?E3*A

            ans?=

            ?????3????-4?????3?????2????-1
            ?????0????-6?????0????-3????-3
            ?????4????-3?????4?????2????-2
            ?????1?????1?????1?????0????-1
            ?????0?????8?????0?????1?????1

            >>?

            ?

            寫成函數E3gen(A,i,j,k):

            ?

            function?E=E3gen(A,i,j,k)
            n=size(A);
            m=min(n);%獲取矩陣行數和列數中的最小值
            E=eye(m);%產生單位對角陣
            E(j,i)=k;

            ?

            實例:

            要消去下列矩陣的A(2,1),求乘子矩陣E3

            A?=

            ?????3????-4?????3?????2????-1
            ?????6????-6?????0????-3????-3
            ?????4????-3?????4?????2????-2
            ?????1?????1?????1?????0????-1
            ????-2?????6????-2?????1?????3

            ?

            在第二行加以第一行乘 -A(2,1)/A(1,1) = -2,故令E3 = E3gen(A,1,2,-2)

            >>?E3=E3gen(A,1,2,-2)

            E3?=

            ?????1?????0?????0?????0?????0
            ????-2?????1?????0?????0?????0
            ?????0?????0?????1?????0?????0
            ?????0?????0?????0?????1?????0
            ?????0?????0?????0?????0?????1

            >>?E3*A

            ans?=

            ?????3????-4?????3?????2????-1
            ?????0?????2????-6????-7????-1
            ?????4????-3?????4?????2????-2
            ?????1?????1?????1?????0????-1
            ????-2?????6????-2?????1?????3

            >>?

            ?

            綜上可知:

            1、 行階梯生成等價于矩陣左乘

            因此,整個行階梯形式U的生成過程,可以看作把原矩陣左乘以一系列的初等變換矩陣E1和E3。把這些初等矩陣的連乘積寫成EX,則有:?U=EX*A,設其逆為L:

            從而有 L*U=A?

            就是說,A可以分解為一個準下三角矩陣L和一個上三角(即行階梯)矩陣U的乘積。MATLAB提供了三角分解的函數lu,它的調用方法是:[L,U]=lu(A)

            2、 lu分解是求行階梯的一個方法

            用lu函數求出的U實際上就是A的行階梯形式(不是簡化行階梯形式)。所以,求簡化行階梯形式用rref函數,而求行階梯形式可以用lu 函數。不過,它和我們用消元運算所得U的數據不一定相同,盡管得出的階次和階梯形狀相同。但因為行階梯形式可以有無數種,用不同步驟算出的結果也不同。只有變成簡化行階梯形式,才能進行比較,看它是不是惟一的。

            ?

            ?

            3、行列式

            (1) 行列式的幾何意義:

            行列式的幾何意義是面積或體積,它的用途很單一,就是判斷奇異性,連正負號都不必關心。

            (2) 行列式的計算方法:

            計算行列式的最好方法還是行階梯法,可以利用lu分解
            ??????????????? [L,U] = lu(A)
            把A分解為一個準下三角矩陣L和一個上三角矩陣U的乘積。因為det(L) = 1,所以U和A的行列式相等。??

            ?????????????? det(A) = det(U)
            而三角矩陣U的det(U)很好求。只要把U的主對角線元素連乘就可得到它的行列式。

            ?

            實例:

            >>?A

            A?=

            ????10?????8?????6?????4?????1
            ?????2?????5?????8?????9?????4
            ?????6?????0?????9?????9?????8
            ?????5?????8?????7?????4?????0
            ?????9?????4?????2?????9?????1

            >>?[L?U]=lu(A)

            L?=

            ????1.0000??????????? 0?????????? 0?????????? 0??????????? 0
            ????0.2000???-0.7083????1.0000?????????? 0??????????? 0
            ????0.6000????1.0000??????????? 0?????????? 0??????????? 0
            ????0.5000???-0.8333????0.8000???-0.2953????1.0000
            ????0.9000????0.6667???-0.6588????1.0000??????????? 0


            U?=

            ???10.0000????8.0000???? 6.0000???? 4.0000????1.0000
            ??????????? 0???-4.8000???? 5.4000???? 6.6000????7.4000
            ??????????? 0??????????? 0???10.6250??? 12.8750????9.0417
            ??????????? 0??????????? 0??????????? 0????? 9.4824????1.1235
            ??????????? 0??????????? 0??????????? 0???????????? 0???-1.2349

            >>?du=diag(U)

            du?=

            ???10.0000
            ???-4.8000
            ???10.6250
            ????9.4824
            ???-1.2349

            >>?result=prod(du)

            result?=

            ??5.9720e+003

            >>?

            ?

            用det求A的行列式值得到相同的結果:

            >>?det(A)

            ans?=

            ????????5972

            >>?

            ?

            ?

            ?

            4、矩陣的秩和矩陣求逆

            ?

            矩陣的秩:

            (1) 按定義,矩陣的是矩陣A中行列式不等于零的最高階子式的階次。是用以衡量聯立方程中有效方程數目的指數。
            (2) 按照定義來計算矩陣的秩,可能遇到的問題也是子矩陣的數量很大,每個矩陣的行列式計算又非常麻煩,其計算量也將是不可接受的天文數字。
            (3) 計算矩陣的秩的最好方法是行階梯法,行階梯化簡后非全為零的行數就是該矩陣的秩。用MATLAB函數r=rank(A)可以檢驗A的秩,rank函數對A是否是方陣沒有要求,即可以有m≠n。

            ?

            矩陣求逆:

            (1) 對于n×n方陣A,當r=n時,稱A是滿秩的,若r<n,必有det(A) = 0,稱A是欠秩的或奇異的。奇異矩陣不可以求逆。?
            (2) 矩陣求逆的最簡單方法也是行階梯化簡,其方法是設定一個由A和I組成的增廣矩陣C = [A,I],求C的簡化行階梯形式UC = rref([A,I]),得出UC = [I,V]。V就顯示出這個逆矩陣的內容。

            ?

            求逆實例:

            >>?A=[3?0?3?-6;5?-1?1?-5;-3?1?4?-9;1?-3?4?-4]

            A?=

            ?????3?????0?????3????-6
            ?????5????-1?????1????-5
            ????-3?????1?????4????-9
            ?????1????-3?????4????-4

            >>?C=[A,eye(4)]

            C?=

            ?????3?????0?????3????-6?????1?????0?????0?????0
            ?????5????-1?????1????-5?????0?????1?????0?????0
            ????-3?????1?????4????-9?????0?????0?????1?????0
            ?????1????-3?????4????-4?????0?????0?????0?????1

            >>?UC=rref(C)
            %UC右邊四列就是矩陣A的逆

            UC?=

            ????1.0000?????????0?????????0?????????0????0.2323???-0.0101???-0.1313???-0.0404
            ?????????0????1.0000?????????0?????????0????0.5354???-0.3131???-0.0707???-0.2525
            ?????????0?????????0????1.0000?????????0????0.5859???-0.4747???-0.1717????0.1010
            ?????????0?????????0?????????0????1.0000????0.2424???-0.2424???-0.1515????0.0303

            >>?V=UC(:,5:8)

            V?=

            ????0.2323???-0.0101???-0.1313???-0.0404
            ????0.5354???-0.3131???-0.0707???-0.2525
            ????0.5859???-0.4747???-0.1717????0.1010
            ????0.2424???-0.2424???-0.1515????0.0303

            >>?

            ?

            矩陣求逆命令:V=inv(A)

            ?

            ?

            5、條件數—衡量奇異程度的量

            (1) 在用數值方法計算矩陣的逆時,由于計算中的誤差,人們不大可能得到理想的零合理想的全零行,所以矩陣是否奇異,并不是那么絕對的。
            (2) 為了評價矩陣接近‘奇異’的程度,采用了‘條件數’(Condition Number)作為常用的衡量指標。它永遠大于1。其數值愈接近于1,計算誤差愈小。
            (3) MATLAB中,條件數用cond(A)計算,它達到10的4次方以上時,求逆的誤差就可能相當可觀。像現在,條件數達到10的16次方(注:條件數是逆條件數RCOND的倒數),結果是根本不能用的。

            ?

            6、用矩陣‘除法’解線性方程

            ?

            (1) 如果m = n,則線性代數方程Ax = b中的A是方陣,設det(A)≠0,則它的逆陣存在。將上式左右同乘以inv(A) ,由于inv(A)*A = I,得到

            X = inv(A)*b (1)

            MATLAB創立了矩陣除法的概念,因為 inv(A)相當于將A放到分母上去,所以可以把上式寫成

            X = A \ b????? (2)

            ‘\’就稱為左除,因為inv(A)是乘在b的左方。

            ?

            (2) 左除’\’解線性方程的擴展

            左除‘\’的功能遠遠超過了矩陣求逆函數inv,inv(A)函數要求A必須是方陣,所以(1)式只能用來解‘適定’方程,而(2)式并不要求A為方陣,在A是m×n階且m < n(欠定)時,它只要求A與b的行數相等且A的秩為m。所以(2)式也可以用來解欠定方程,在下例中可以看出。此外,運算符‘\’還能用來解超定方程。

            ?

            例:左除’\’解欠定方程

            >>?A=[3,4,3,2,1;0,6,0,3,3;4,3,4,2,2;1,1,1,0,1;2,6,2,1,3]

            A?=

            ?????3?????4?????3?????2?????1
            ?????0?????6?????0?????3?????3
            ?????4?????3?????4?????2?????2
            ?????1?????1?????1?????0?????1
            ?????2?????6?????2?????1?????3

            >>?b=[2;3;2;0;1]

            b?=

            ?????2
            ?????3
            ?????2
            ?????0
            ?????1

            >>??x=A\b
            Warning:?Matrix?is?singular?to?working?precision.

            x?=

            ???????NaN
            ???????NaN
            ???????Inf
            ????1.0000
            ????0.0000

            >>?

            ?

            得到x=inf,無解。改用行階梯方法找有效行。左除要求的是系數矩陣的行數與秩相同

            >>?A

            A?=

            ?????3?????4?????3?????2?????1
            ?????0?????6?????0?????3?????3
            ?????4?????3?????4?????2?????2
            ?????1?????1?????1?????0?????1
            ?????2?????6?????2?????1?????3

            >>?b

            b?=

            ?????2
            ?????3
            ?????2
            ?????0
            ?????1

            >>?B=[A,b]

            B?=

            ?????3?????4?????3?????2?????1?????2
            ?????0?????6?????0?????3?????3?????3
            ?????4?????3?????4?????2?????2?????2
            ?????1?????1?????1?????0?????1?????0
            ?????2?????6?????2?????1?????3?????1

            >>?r=rank(B)

            r?=

            ?????4

            >>?[UB,ip]=rref(B)

            UB?=

            ?????1?????0?????1?????0?????0?????0
            ?????0?????1?????0?????0?????0?????0
            ?????0?????0?????0?????1?????0?????1
            ?????0?????0?????0?????0?????1?????0
            ?????0?????0?????0?????0?????0?????0


            ip?=

            ?????1?????2?????4?????5

            >>?U0=UB(1:r,1:5)

            U0?=

            ?????1?????0?????1?????0?????0
            ?????0?????1?????0?????0?????0
            ?????0?????0?????0?????1?????0
            ?????0?????0?????0?????0?????1

            >>?d=UB(1:4,6)

            d?=

            ?????0
            ?????0
            ?????1
            ?????0

            >>?x=U0\d

            x?=

            ?????0
            ?????0
            ?????0
            ?????1
            ?????0

            >>?

            ?

            其中,x是此欠定方程的一個特解。

            ?

            posted on 2010-07-10 18:16 erran 閱讀(734) 評論(0)  編輯 收藏 引用
            丰满少妇人妻久久久久久4| 久久婷婷五月综合97色一本一本 | 丁香五月网久久综合| 久久久久夜夜夜精品国产| 99久久精品久久久久久清纯| 久久人人爽人人爽人人av东京热| 无码AV波多野结衣久久| 97精品国产97久久久久久免费| 国内精品久久久久国产盗摄| 亚洲中文字幕无码久久2020| 国产一区二区三区久久| 亚洲国产精品无码久久一线| 97r久久精品国产99国产精| 久久久久久久综合日本| 2021精品国产综合久久| 久久国产精品二国产精品| A级毛片无码久久精品免费| 久久精品国产只有精品2020| 久久无码中文字幕东京热| 久久精品国产精品亚洲下载| 伊人 久久 精品| 久久天天躁夜夜躁狠狠躁2022 | 国产精品久久久久久久午夜片| 久久婷婷国产剧情内射白浆| 99久久国产主播综合精品| 亚洲精品无码专区久久久| 亚洲欧美精品一区久久中文字幕 | 狠狠色丁香久久婷婷综合图片| 久久久青草久久久青草| 久久综合综合久久综合| 久久久无码精品亚洲日韩蜜臀浪潮 | 亚洲欧美一级久久精品| 久久久久成人精品无码中文字幕| 污污内射久久一区二区欧美日韩| 久久99精品国产麻豆婷婷| 久久精品亚洲精品国产色婷| 久久综合九色综合网站| 99久久免费只有精品国产| 久久久综合九色合综国产| 久久久久无码精品国产| 人妻丰满AV无码久久不卡 |