原文:http://www.cnblogs.com/JCSU/articles/1449986.html
?
一、線性代數(shù)基本方程組
?
基本方程組:
?
矩陣表示:
?
?
解決問題的視角:
?
1、解聯(lián)立方程的視角 (行階梯變換 & ?矩陣運算)
著重研究解x,即研究線性方程組的解法。中學里的解方程和MATLAB的矩陣除法就是這樣。
要點:矩陣的每一行代表一個方程,m行代表m個線性聯(lián)立方程。 n列代表n個變量。如果m是獨立方程數(shù),根據m<n、m=n、m>n確定方程是 ‘欠定’、‘適定’ 還是 ‘超定’。對這三種情況都會求解了,研究就完成了。必須剔除非獨立方程。行階梯形式、行列式和秩的概念很大程度上為此目的而建立。
?
2、向量空間中向量的合成的視角 (用向量空間解方程組)
把A各列看成n個m維基本向量,線性方程組看成基向量的線性合成:
要點:解x是這些基向量的系數(shù)。它可能是常數(shù)(適定方程),也可能成為其中的一個子空間(欠定方程) 。要建立其幾何概念,并會求解或解空間。
?
3、線性變換或映射的視角 (線性變換及其特征)
把b看成變量y,著重研究把Rn空間的x變換為Rm空間y 的效果,就是研究線性變換系數(shù)矩陣A的特征對變換的影響。
?
要點:就是要找到適當?shù)淖儞Q,使研究問題的物理意義最為明晰。特征值問題就是一例。
?
?
?
?
二、線性代數(shù)建模與應用概述
?
?
介紹一些大的系統(tǒng)工程中使用線性代數(shù)的情況,使讀者知道為什么線性代數(shù)在近幾十年來變得如此的重要。
-
把飛行器的外形分成若干大的部件,每個部件沿著其表面又用三維的細網格劃分出許多立方體,這些立方體包括了機身表面以及此表面內外的空氣。對每個立方體列寫出空氣動力學方程,其中包括了與它相鄰的立方體的共同邊界變量,這些方程通常都已經簡化為線性方程。對一個飛行器,小立方體的數(shù)目可以多達400,000個,而要解的聯(lián)立方程可能多達2,000,000個。
?
?
三、行階梯法解線性方程
?
?
1、線性方程的Matlab表示方法
?
(1) 由n個變量組成的m個聯(lián)立線性代數(shù)方程組:
?
用MATLAB語言表示為:
其中:
n是未知數(shù)個數(shù),m是獨立方程的個數(shù)。當m<n時,方程組有無數(shù)多個解,稱為欠定方程;當m>n時,方程組無解,稱為超定方程;當m=n時,方程組有唯一解,稱為適定方程;所以不能簡單地看形式上的m和n,還必須剔除其中非獨立方程的虛假成分。將要討論的行階梯形式、行列式和“秩”等概念,很大程度上就是為了找到獨立方程的數(shù)目。
?
(2) 解線性方程組及在matlab中的顯示
作圖的matlab代碼:
subplot(2,2,1)?%作左上角圖,畫方程組(a)
ezplot('x1-2*x2+1')?%畫(a)中的x1-2*x2+1=0
hold?on
ezplot('-x1+3*x2-3')
subplot(2,2,2)?%作右上角圖,畫方程組(b)
ezplot('x1-2*x2+1')
hold?on
ezplot('-x1+2*x2-3')
subplot(2,2,3)?%作左下角圖,畫方程組(c)
ezplot('x1-2*x2+1')
hold?on
ezplot('-x1+2*x2-1')
subplot(2,2,4)?%作右下角圖,畫方程組(d)
ezplot('x1+x2-1')
hold?on
ezplot('x1-x2-3')
hold?on
ezplot('-x1+2*x2+3')
?
使用參考:ezplot
?
四個方程組在matlab中的作圖:
?
?
2、初等行變換
?
將系數(shù)矩陣A和B組成增廣矩陣:
?
對增廣矩陣的行作以下三種運算不會改變方程組的解,這三種運算組成了矩陣的初等行變換:
(1) 行交換:將增廣矩陣的第 i , j 兩行互換位置。MATLAB語句:c([i,j],:) = c([j,i],:)
(2) 行乘數(shù):將增廣矩陣的第 i 行乘以常數(shù) k 。MATLAB語句:c(i,:) = k*c(i,:)
(3) 行相加:將增廣矩陣的第 i 行乘以常數(shù) k,加到第 j 行。MATLAB語句:c(j,:) = c(j,:) + k*c(i,:)
?
?
3、行階梯矩陣的生成(高斯消元過程)
?
(1) 行階梯矩陣、簡化行階梯矩陣
?
如果線性方程組的左端系數(shù)具有以下三個特點:
a) 所有非零行都處在全零行的上方;
b) 各行的第一個非零元素的列號比其上方所有各行的第一非零元素的列號都要大;
c) 所有的第一非零元素所在的列中,其下方的所有元素均為零;
這樣的矩陣稱為行階梯矩陣(或上三角矩陣),如矩陣C1:
?
?
?
如果行階梯矩陣還滿足以下兩個額外特點,則稱之為簡化行階梯矩陣,如下圖的矩陣C2:
1)?各行的第一個非零元素是所在列中唯一的非零元素
2)?各行的第一個非零元素都等于1
?
(2) 高斯消元過程、實例、matlab消元
步驟1:把主對角線下方第一列元素全變?yōu)榱恪T诰仃嚨母餍兄校x擇第1列元素的絕對值最大的行,通過行交換把它放到第1行(這樣做主要是為了提高計算精度,如果不考慮精度,只要第1行第1列元素不為零,可以跳過這個環(huán)節(jié))。以第1行為基準,依次把第2行至第n行的第1列的元素消為零。
步驟2:在2~n行中,選擇第2列元素的絕對值最大的行,通過行交換把它放到第2行。以第2行為基準行,依次把第3行至第n行的第2列的元素消為零。
步驟3: 做法同前面的步驟
...
步驟n-1:做法同前面的步驟
?
實例:用行階梯及回代法求解以下方程組(方程組對應的增廣矩陣已給出):
?
matlab消元程序:
function?[B]=gauss(A,i,j,q)
%?---------------------------------
%?A為輸入矩陣,B為變換后的輸出矩陣
%?i為基準行的行號
%?j為待變換行的行號
%?q為基準元的列號,即A(i,q)為基準元,A(j,q)為待消元
%
x?=?A(i,:);?y=A(j,:);??????%?取出A的第i,j兩行命名為x,y,
z?=?y?-?y(q)/x(q)*x;????%?實現(xiàn)(6.2.5)式的運算
A(j,:)=z;???????%?把結果賦值給A第j行,
B=A;?????????%?將A作為輸出變元B
?
?
matlab中的消元過程如下:
>>?C
C?=
?????1?????4?????7?????1
?????8?????5?????2?????3
?????3?????6????-2?????5
>>?B=gauss(C,1,2,1) %以第1行為基準行,使第2行的第1列元素變?yōu)?
B?=
?????1?????4?????7?????1
?????0???-27???-54????-5
?????3?????6????-2?????5
>>?B=gauss(B,1,3,1) %以第1行為基準行,使第3行的第1列元素變?yōu)?
B?=
?????1?????4?????7?????1
?????0???-27???-54????-5
?????0????-6???-23?????2
>>?B=gauss(B,2,3,2) %以第2行為基準行,使第3行的第2列元素變?yōu)?,此時,生成了行階梯矩陣
B?=
????1.0000????4.0000????7.0000????1.0000
?????????0??-27.0000??-54.0000???-5.0000
?????????0?????????0??-11.0000????3.1111
>>?B=gauss(B,3,2,3) %以第3行為基準行,使第2行的第3列元素變?yōu)?
B?=
????1.0000????4.0000????7.0000????1.0000
?????????0??-27.0000?????????0??-20.2727
?????????0?????????0??-11.0000????3.1111
>>?B=gauss(B,3,1,3) %以第3行為基準行,使第1行的第3列元素變?yōu)?
B?=
????1.0000????4.0000?????????0????2.9798
?????????0??-27.0000?????????0??-20.2727
?????????0?????????0??-11.0000????3.1111
>>?B=gauss(B,2,1,2) %以第2行為基準行,使第1行的第2列元素變?yōu)?,此時,A陣變成了對角矩陣
B?=
????1.0000?????????0?????????0???-0.0236
?????????0??-27.0000?????????0??-20.2727
?????????0?????????0??-11.0000????3.1111
>>?B(2,:)=-1/27*B(2,:) %第2行除以對角項
B?=
????1.0000?????????0?????????0???-0.0236
?????????0????1.0000?????????0????0.7508
?????????0?????????0??-11.0000????3.1111
>>?B(3,:)=-1/11*B(3,:) %第3行除以對角項,此時,生成了簡化行階梯矩陣
B?=
????1.0000?????????0?????????0???-0.0236
?????????0????1.0000?????????0????0.7508
?????????0?????????0????1.0000???-0.2828
>>?
?
?
?
4、MATLAB中的行階梯生成函數(shù)
MATLAB已經把“簡化行階梯形式(reduced row echelon form)”的計算過程集成為一個子程序rref。它的輸入變元可以是線性方程組的系數(shù)矩陣,也可以是其增廣矩陣,輸入U=rref([A,b]),輸出結果就是簡化行階梯矩陣。
?
例:用MATLAB中的rref求解3(2)中的方程組:
>>?A=[1,4,7;?8,5,2;?3,6,-2];??b=[1;?3;?5];??C=[A,?b];??U=rref(C)
U?=
????1.0000?????????0?????????0???-0.0236
?????????0????1.0000?????????0????0.7508
?????????0?????????0????1.0000???-0.2828
>>?
?
解得:x1=-0.0236,?? x2=0.7508,?? x3=-0.2828
?
?
5、行階梯法解欠定方程組
上面討論的是方程數(shù)m與變量數(shù)n相等的情況。普遍情況下,m<n,屬于欠定方程,方程將有無數(shù)解,我們必須找出其解的一般形式。即使m=n,也有可能是假象,因為有的方程是相依的,有效方程數(shù)也許小于m。要看清它究竟是什么類型,應該看行階梯形式的結果,即有效行的數(shù)目,有效行的個數(shù)也叫矩陣的“秩”。對于一個矩陣,盡管因變換的次序不同,但“秩”是唯一的。
對增廣矩陣C=[A, b]進行行階梯變換,得到的行階梯矩陣U的下方可能有全零出現(xiàn)。行階梯形式為:
其中,U為方程中左端的系數(shù)矩陣,d為方程右端的常數(shù)項。當U中某行各變量系數(shù)全為零時,d中的對應行也必須為零,否則就構成了等式左右不相等的矛盾方程。因此,矩陣A和增廣矩陣[A,b]的行階梯形式U(或簡化行階梯矩陣)應當有同樣的全零行,也就是兩者有同樣的秩,這是方程組有解的必要條件。
原來的m行中只剩下r個非全零行,意味著m個方程中只有r個有效,也就是它的秩為r,m-r個全零行反映了原方程組中有m-r個是相依方程,最后U中有效的部分是r×n矩陣,就是r個方程和n個未知數(shù)。因為r<n,這是一個欠定方程組,n個未知數(shù)(變量)中有n-r個可以任意設定,我們稱這些未知數(shù)為自由變量,也可把它們稱為任意常數(shù)。
?
例:解下列方程組
輸入系數(shù)矩陣A和常數(shù)矩陣b,求增廣矩陣的簡化行階梯形式,MATLAB代碼如下:
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=[A,b]
%增廣矩陣
[U0,V0I]=rref(B)
%U0存放增廣矩陣的簡化行階梯形式,V0I存放各行中第一個非零元素的列號
U=U0(1:5,1:5),d=U0(:,6)
%從U0中取出系數(shù)矩陣的簡化行階梯形式放入U中,常數(shù)部分放到d中
?
運行過程如下:
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
U0?=
?????1?????0?????1?????0????-1?????0
?????0?????1?????0?????0?????0?????0
?????0?????0?????0?????1?????1?????1
?????0?????0?????0?????0?????0?????0
?????0?????0?????0?????0?????0?????0
V0I?=
?????1?????2?????4
U?=
?????1?????0?????1?????0????-1
?????0?????1?????0?????0?????0
?????0?????0?????0?????1?????1
?????0?????0?????0?????0?????0
?????0?????0?????0?????0?????0
d?=
?????0
?????0
?????1
?????0
?????0
>>?
?
從U0可知,下方有兩個全零行,說明原方程中有兩個方程是相依的,只有三個獨立方程,此時各行首非零元素不在對主角線上,列號分別為1,2,4。我們應當把x1, x2, x4看作待求的變量,而把其余的兩個變量x3和x5看作自由變量。
把U恢復成方程形式并移項,使左端只包含待求變量,把x3和x5移到等式右邊:
如果要給出一個具體解,通常取自由變量x3和x5為零,這樣得出的解是x1=x2=x3=x5=0, x4=-1。但這樣來表示方程的解容易造成誤會,以為方程組只有一個解。所以比較嚴格的表示方法是取自由變量x3和x5為c1和c2:
x3=c1,? x5=c2,? x1=-c1+c2,? x2=0,? x4=-c2+1
這樣,選擇不同的c1和c2,就可以得出不同的解,所以其解有無數(shù)組。由于它包含兩個自由變量,因此在兩個自由度上都可以在(-∞,+∞)范圍內變化,從幾何上說,它的解占據了一個兩維空間(平面)。
解的最后形式:
?
?
5、應用實例
?
(1) 平板穩(wěn)態(tài)溫度的計算
?
研究一個平板的熱傳導問題,設該平板的周邊溫度已經知道(見下圖),現(xiàn)在要確定板中間4個點a,b,c,d處的溫度。假定其熱傳導過程已經達到穩(wěn)態(tài),因此在均勻的網格點上,各點的溫度是其上下左右4個點的溫度的平均值。
根據題意列出方程為:
移項整理為標準的矩陣形式為:
輸入MATLAB程度計算為:
>>?A=[1,-0.25,-0.25,0;-0.25,1,0,-0.25;-0.25,0,1,-0.25;0,-0.25,-0.25,1]
A?=
????1.0000???-0.2500???-0.2500?????????0
???-0.2500????1.0000?????????0???-0.2500
???-0.2500?????????0????1.0000???-0.2500
?????????0???-0.2500???-0.2500????1.0000
>>?b=[7.5;15;10;17.5]
b?=
????7.5000
???15.0000
???10.0000
???17.5000
>>?U=rref([A,b])
U?=
????1.0000?????????0?????????0?????????0???20.0000
?????????0????1.0000?????????0?????????0???27.5000
?????????0?????????0????1.0000?????????0???22.5000
?????????0?????????0?????????0????1.0000???30.0000
>>?
?
把它“翻譯”為方程,即有:xa=20℃,xb=27.5℃,xc=22.5℃,xd=30℃
?
?
(2) 化學方程式配平
?
建立一個向量方程組,每個方程分別描述一種原子在反應前后的數(shù)目。在上面的方程中,有碳、氫、氧三種元素需要配平,構成了三個方程。而有四種物質,其數(shù)量用四個變量x1,x2,x3,x4來表示。將每種物質中的元素原子數(shù)按碳、氫、氧順序排列,可以寫出:
要使方程配平,x1,x2,x3,x4必須滿足:
寫成矩陣方程:
對A進行行階梯變換:
>>?A=[3,0,-1,0;8,0,0,-2;0,2,-2,-1]
A?=
?????3?????0????-1?????0
?????8?????0?????0????-2
?????0?????2????-2????-1
>>?U=rref(A)
U?=
????1.0000?????????0?????????0???-0.2500
?????????0????1.0000?????????0???-1.2500
?????????0?????????0????1.0000???-0.7500
>>?
?
要注意這四個列對應于四個變量的系數(shù),所以這三行系數(shù)對應的方程是:
x1????????? -0.2500x4 = 0
??? x2????? -1.2500x4 = 0
??????? x3? -0.7500x4 = 0
即x4是自由變量。因為化學家們喜歡把方程的系數(shù)取為最小整數(shù),此處可取x4=4,則x1,x2,x3均有整數(shù)解,x1=1, x2=5, x3=3。?
對于比較復雜的反應過程,為了便于得到最小整數(shù)解,在解化學配平的線性方程組時,應該在MATLAB中先規(guī)定取有理分式格式,即先輸入format rat,這樣就很容易看出應令x4=4。結果為:
>>?format?rat
>>?U=rref(A)
U?=
???????1?????????????0?????????????0????????????-1/4?????
???????0?????????????1?????????????0????????????-5/4?????
???????0?????????????0?????????????1????????????-3/4?????
>>
?
?
(3) 交通流量分析
某城市有兩組單行道,構成了一個包含四個節(jié)點A,B,C,D的十字路口,如下圖所示。在交通繁忙時段的汽車從外部進出此十字路口的流量(每小時的車流數(shù))標于圖上。現(xiàn)要求計算每兩個節(jié)點之間路段上的交通流量x1, x2, x3, x4。
解:
在每個節(jié)點上,進入和離開的車數(shù)應該相等,這就決定了四個節(jié)點的流通方程:
節(jié)點A:?x1+450=x2+610
節(jié)點B:?x2+520=x3+480
節(jié)點C:?x3+390=x4+600
節(jié)點D:?x4+640=x2+310
?
將這組方程進行整理,寫成矩陣形式:
?
用消元法或直接調用U=rref([A,b]),得出精簡行階梯形式為:
>>?A=[1,-1,0,0;0,1,-1,0;0,0,1,-1;-1,0,0,1]
A?=
???????1????????????-1?????????????0?????????????0??????
???????0?????????????1????????????-1?????????????0??????
???????0?????????????0?????????????1????????????-1??????
??????-1?????????????0?????????????0?????????????1??????
>>?b=[160;-40;210;-330]
b?=
?????160??????
?????-40??????
?????210??????
????-330??????
>>?U=rref([A,b])
U?=
???????1?????????????0?????????????0????????????-1???????????330??????
???????0?????????????1?????????????0????????????-1???????????170??????
???????0?????????????0?????????????1????????????-1???????????210??????
???????0?????????????0?????????????0?????????????0?????????????0??????
>>?
?
矩陣U中第1至4列代表變量x1,x2,x3和x4的系數(shù),第5列則是等式右邊的常數(shù)項。把第4列移到等式右邊,可以恢復為方程,其結果為:
x1 = x4 +330
x2 = x4 +170
x3 = x4 + 210
0?? = 0
?
由于最后一行為全零,說明四個方程中實際上只有三個有效方程。方程數(shù)比未知數(shù)的數(shù)目少,即沒有給出足夠的信息來唯一地確定x1, x2, x3和x4,其原因也不難從物理上理解。題目給出的只是進入和離開這個十字路口的流量,如果有些車沿著這四方的單行道繞圈,并不會影響總的輸入輸出流量,但可以全面增加四條路上的流量。所以x4被稱為自由變量。實際上它的取值也不是完全自由的,因為規(guī)定了這些路段都是單行道,x1,x2,x3和x4都不能取負值。所以要準確了解這里的交通流量情況,還應該在x1,x2,x3和x4中,再檢測一個變量。