国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
MATLAB因式分解

4.1  因式分解

本節(jié)介紹線性代數(shù)的一些基本操作,包括行列式、逆和秩,LU分解和QR分解,以及范數(shù)等。其中LU分解和QR分解都是使用對角線上方或者下方的元素均為0的三角矩陣來進行計算。使用三角矩陣表示的線性方程組,可以通過向前或者向后置換很容易地得出結(jié)果。

4.1.1  行列式、逆和秩

MATLAB中,用戶可以通過以下命令來計算矩陣A的行列式、逆和矩陣的秩。

(1)det(A):求方陣A的行列式。

(2)rank(A):求矩陣A的秩,即A中線性無關(guān)的行數(shù)和列數(shù)。

(3)inv(A):求方陣A的逆矩陣。如果A是奇異矩陣或者近似奇異矩陣,則會給出一個錯誤信息。

(4)pinv(A):求矩陣A的偽逆。如果A是m×n的矩陣,則偽逆的尺寸為n×m。對于非奇矩陣A來說,有pinv(A)=inv(A)。

(5)trance(A):求矩陣A的跡,也就是對角線元素之和。

下面用具體示例對矩陣行列式、逆和秩作簡要的說明。

4-1  矩陣的行列式計算示例。

det函數(shù)可以用來計算矩陣的行列式。

>> A1=[1 2;3 4]          %  創(chuàng)建矩陣A1

A1 =

     1     2

     3     4

>> A2=[1 2;3,6]           %  創(chuàng)建矩陣A2

A2 =

     1     2

     3     6

>> A3=[1 2;3 4;5 6]      %  創(chuàng)建矩陣A3

A3 =

     1     2

     3     4

     5     6

>> det1=det(A1)           %  求方陣A1的行列式

det1 =

    -2

>> det2=det(A2)           % 求方陣A2的行列式

det2 =

     0

>> det3=det(A3)           %  注意非方陣的行列式?jīng)]有意義

??? Error using ==> det

Matrix must be square.

>> det_1=det(A1')        %  實數(shù)矩陣的行列式和它的轉(zhuǎn)置的行列式相同

det_1 =

    -2

>> det_2=det(A2')

det_2 =

     0

>> det_3=det(A3')

??? Error using ==> det

Matrix must be square.

本例使用det函數(shù)計算A3的行列式時返回了錯誤信息,提醒用戶A3必須是是方陣才可以調(diào)用det函數(shù)。

4-2  矩陣的逆計算示例。

本例在上例創(chuàng)建的矩陣基礎上進行演示。

>> inv1=inv(A1)

inv1 =

  -2.0000    1.0000

   1.5000   -0.5000

>> inv2=inv(A2)              %  A2行列式為0,不存在逆矩陣

Warning: Matrix is singular to working precision.

inv2 =

   Inf   Inf

   Inf   Inf

>> inv3=inv(A3)               %  非方陣不存在逆矩陣

??? Error using ==> inv

Matrix must be square.

>> detinv1=det(inv(A1))      %  A1的逆矩陣的行列式就等于1/det(A1)

detinv1 =

   -0.5000

>> 1/det(A1)

ans =

   -0.5000

4-3  使用pinv函數(shù)計算矩陣的偽逆示例。

>> pinv1=pinv(A1)   % A1的逆矩陣和它的偽逆是一樣的

pinv1 =

  -2.0000    1.0000

   1.5000   -0.5000

>> pinv2=pinv(A2)

pinv2 =

   0.0200    0.0600

   0.0400    0.1200

>> pinv3=pinv(A3)

pinv3 =

  -1.3333   -0.3333    0.6667

   1.0833    0.3333   -0.4167

本例調(diào)用pinv函數(shù)計算了矩陣A1A2、A3的偽逆。因為矩陣A2行列式為0,矩陣A3不是方陣,所以不能求矩陣A2A3的逆,但是可以求這兩個矩陣的偽逆。

4-4  使用rank函數(shù)求解矩陣的秩示例。

>> rank1=rank(A1)

rank1 =

     2

>> rank2=rank(A2)

rank2 =

     1

>> rank3=rank(A3)

rank3 =

     2

>> rank_1=rank(A1')

rank_1 =

     2

>> rank_2=rank(A2')

rank_2 =

     1

>> rank_3=rank(A3')

rank_3 =

     2

從本例中可以看出矩陣的秩和它的轉(zhuǎn)置的秩相同。

通過上面的這4個例子,可以總結(jié)出以下規(guī)律。

(1)只有方陣的行列式才有意義。

(2)只有方陣的逆才有意義,但如果方陣的行列式為0,該方陣則不存在逆矩陣。

(3)如果方陣的逆矩陣存在,它的偽逆和逆相同。

(4)如果方陣的逆矩陣存在,它的逆矩陣的行列式det(A-1)等于1/det(A)。

(5)矩陣的秩和它的轉(zhuǎn)置的秩相同。

(6)實數(shù)矩陣的行列式和它的轉(zhuǎn)置矩陣的行列式相同。

4.1.2  Cholesky因式分解

分解法是將原方陣分解成一個上三角形矩陣(或是以不同次序排列的上三角陣)和一個下三角形矩陣,這樣的分解法又稱為三角分解法,它主要用于簡化大矩陣行列式值的計算過程、求逆矩陣和求解聯(lián)立方程組。需要注意的是:這種分解法所得到的上下三角陣并不是唯一的,可以找到多個不同的上下三角陣對,每對三角陣相乘都會得到原矩陣。

對線性系統(tǒng)的求解,MATLAB依據(jù)系數(shù)矩陣A的不同,而相應地使用不同的方法。如有可能,MATLAB會先分析矩陣的結(jié)構(gòu)。例如A是對稱且正定的,則使用Cholesky分解。

如果沒有找到可以替代的方法,則采用高斯消元法和部分主元法,主要是對矩陣進行LU因式分解或LU分解。這種方法就是令ALU,其中A是方陣,U是一個上三角矩陣,L是一個帶有單位對角線的下三角矩陣。

Cholesky因式分解是把一個對稱正定矩陣A分解為一個上三角矩陣R和其轉(zhuǎn)置矩陣的乘積,其對應的表達式為:A=R'R。從理論上說,并不是所有的對稱矩陣都可以進行Cholesky因式分解,只有正定矩陣才可以。

Pascal矩陣就是一個有趣的例子。下面以Pascal矩陣為例,說明Cholesky因式分解的使用方法。

4-5  Cholesky因式分解示例。

>> A = pascal(6)             % 創(chuàng)建Pascal矩陣

A =

     1     1    1     1     1     1

     1     2    3     4     5    6

     1     3    6    10    15   21

     1     4   10    20    35   56

     1     5   15    35    70  126

     1     6   21    56   126  252

矩陣A的元素是二項式系數(shù),每一個元素都是上方和左方兩個元素的和。在MATLAB中,進行Cholesky因式分解的是chol函數(shù)。矩陣ACholesky因式分解可以通過以下命令得到:

>> R = chol(A)

R =

     1     1    1     1     1    1

     0     1    2     3     4    5

     0     0    1     3     6   10

     0     0    0     1     4   10

     0     0    0     0     1    5

     0     0    0     0     0    1

得到的矩陣R的元素同樣也是二項式系數(shù)。

Cholesky因式分解允許線性方程組A x = bR’Rx=b代替。在MATLAB環(huán)境中,這個線性方程組可以通過以下命令來求解:

>> x=R\(R'\b)

4.1.3  LU因式分解

LU分解法主要用于簡化大矩陣行列式值的計算過程、求逆矩陣和求解聯(lián)立方程組。需要注意的是:這種分解法得到的上下三角陣對并不是唯一的,可以找到多個不同的上下三角陣對,每對三角陣相乘都會得到原矩陣。

MATLAB中,求矩陣ALU分解的調(diào)用函數(shù)是lu,調(diào)用格式如下:

[L,U]=lu(A)

另外,矩陣ALU分解為線性系統(tǒng)A*x=b提供了以下表達式來快速求解:

x=U\(L\b)

4-6  矩陣ALU分解示例。

>> A=[5 2 0;2 6 2;5 6 7]

A =

     5     2    0

     2     6    2

     5     6    7

>> [L,U]=lu(A)               %  分解所得L是帶有單位對角線的下三角矩陣,U是上三角矩陣

L =

   1.0000         0         0

    0.4000   1.0000         0

   1.0000    0.7692    1.0000

U =

   5.0000    2.0000         0

        0    5.2000    2.0000

        0         0    5.4615

>> L*U                          %  驗證結(jié)果

ans =

     5     2    0

     2     6    2

     5     6    7

4-7  矩陣ALU分解實例。

>> A=[1 2 3;4 5 6;7 8 9];

>> [L,U]=lu(A);

>> B=[9 8 7;6 5 4; 3 2 1];

>> x=U\(L\B)

Warning: Matrix is close to singular or badlyscaled.

         Results may be inaccurate. RCOND =1.586033e-017.

x =

   -27   -26  -17

    42    41   24

   -16   -16   -8

>> A*x           % 驗證結(jié)果

ans =

     9     8    7

     6     5    4

     3     2    1

4.1.4  QR因式分解

如果A是正交矩陣,那么它滿足A’A=1。二維坐標旋轉(zhuǎn)變換矩陣就是一個簡單的正交矩陣:

矩陣的正交分解又稱做QR分解,是將矩陣分解成一個單位正交矩陣和上三角形矩陣。假設Am×n的矩陣,那么A就可以分解成:

A=QR

其中Q是一個正交矩陣,R是一個維數(shù)和A相同的上三角矩陣,因此Ax=B可以表示為QRx=B或者等同于Rx=QB。這個方程組的系數(shù)矩陣是上三角的,因此容易求解。

MATLAB中,用戶可以調(diào)用函數(shù)qr來求QR因式分解,這個命令可用于分解m×n的矩陣,假設Am×n的矩陣。qr函數(shù)常用調(diào)用格式有以下幾種。

(1)[Q,R]=qr(A):求得m×m階矩陣Q和m×n階上三角矩陣R。Q和R滿足A=QR。

(2)[Q,R,P]= qr(A):求得矩陣Q,上三角矩陣R和置換矩陣P。R的對角線元素按大小降序排列,且滿足AP=QR。

(3)[Q,R]= qr(A,0):求矩陣A的QR因式分解。如果在m×n的矩陣A中行數(shù)小于列數(shù),則給出Q的前n列。

(4)[Q1,R1]=gradelete(Q,R,j):求去掉矩陣A中第j列之后形成的矩陣的QR因式分解,矩陣Q和R是A的QR因子。

(5)[Q1,R1]=qrinset(Q,R,b,j):求在矩陣A的第j列前插入列向量b后形成的矩陣的QR因式分解,矩陣Q和R是A的QR因子。如果j=n+1,那么插入的一列放在最后。

4-8  QR分解示例。已知魔方矩陣

對其進行QR分解。

用戶只需要調(diào)用qr函數(shù)就可以實現(xiàn)對A進行QR分解。具體過程如下:

>> A=magic(3)

A =

     8     1    6

     3     5    7

     4     9    2

>> [Q,R]=qr(A)               %  QR分解

Q =

   -0.8480    0.5223   0.0901

  -0.3180   -0.3655   -0.8748

  -0.4240   -0.7705    0.4760

R =

  -9.4340   -6.2540   -8.1620

        0   -8.2394   -0.9655

        0         0   -4.6314

>> Q*R                     %  驗證結(jié)果

ans =

   8.0000    1.0000    6.0000

   3.0000    5.0000    7.0000

   4.0000    9.0000    2.0000

4-9  利用QR分解求線性方程組的解。

用戶可以通過求AQR分解并計算R\Q'*B來求解X。具體過程如下:

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

A =

     1     2     2

     3     2    2

     1     1    2

>> B=[7;9;5]

B =

     7

     9

     5

>> [Q,R]=qr(A)

Q =

   -0.3015    0.9239  -0.2357

   -0.9045   -0.3553  -0.2357

   -0.3015    0.1421   0.9428

R =

   -3.3166   -2.7136  -3.0151

         0    1.2792   1.4213

         0         0   0.9428

>>  X=R\Q'*B

X =

    1.0000

    2.0000

    1.0000

>> A\B

ans =

    1.0000

    2.0000

    1.0000

4.1.5  范數(shù)

向量的范數(shù)是一個標量,用來衡量向量的長度。需注意不要把向量范數(shù)和向量中元素的個數(shù)相混淆。在MATLAB中,可以用命令norm得到不同的范數(shù)。

norm形式的表達式還有norm(x,-inf),但它不是求向量的范數(shù),而是求向量x的絕對值的最小值,即min(abs(x))。請讀者注意區(qū)分。

4-10  向量范數(shù)的求解示例。

>> x=[2 4 5]

x =

     2     4    5

>> norm1=norm(x)                 %  歐幾里德范數(shù)

norm1 =

    6.7082

>> norm2=norm(x,1)                %  1-范數(shù)

norm2 =

    11

>> norm3=norm(x,inf)             % -范數(shù)

norm3 =

     5

>> norm4=norm(x,4)               %  p-范數(shù)

norm4 =

    5.4727

>> norm5=norm(x,-inf)            % 向量絕對值的最小值

norm5 =

     2

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
其他矩陣函數(shù) | 一些MATLAB的更高級的矩陣函數(shù)
5.3.1 反矩陣、矩陣秩與行列式
常用矩陣計算C語言代碼
矩陣中的det是什么意思?
矩陣計算——MATLAB——奇異值分解在A+上的應用
matlab矩陣求逆:inv pinv \ / 斜線運算符的選擇 | 學步園
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服