?? matlab5.htm
字號:
<html>
<head>
<title>學用MatLab</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
body { font-family: "宋體"; font-size: 9pt; text-decoration: none}
h2 { font-family: "楷體_GB2312"; font-size: 18pt; text-decoration: underline; color: #FF9999}
h1 { font-family: "隸書"; font-size: 24pt; font-style: italic; font-weight: bolder; color: #CC66CC; text-decoration: blink}
.explain { border-color: black black #00FF00; font-weight: bold; color: #333333}
.code { font-family: "Arial", "Helvetica", "sans-serif"; font-size: 12pt; background-color: #FFFFFF; line-height: 24pt}
h3 { font-size: 12pt; font-style: italic; font-weight: bold; color: #9999FF}
-->
</style>
</head>
<body bgcolor="#CCFFCC" text="#666600" link="#009900" alink="#00FF00" vlink="#006600">
<h1 align="center">矩陣和線性代數</h1>
<h2>MatLab中的矩陣</h2>
<p>MatLab中有好多函數可以產生不同的矩陣,下面就讓我們產生兩個3*3的矩陣,這一章中,我們的學習就靠她們了!!!</p>
<p class="code">A = pascal(3) <br>
A = <br>
1 1 1 <br>
1 2 3 <br>
1 3 6 <br>
B = magic(3) <br>
B = <br>
8 1 6 <br>
3 5 7 <br>
4 9 2 </p>
<p>還有一個3*2的隨機矩陣:</p>
<p class="code">C = fix(10*rand(3,2)) <br>
C = <br>
9 4 <br>
2 8 <br>
6 7</p>
<h3>看看列矩陣,行矩陣,以及常數的表達:</h3>
<p class="code">u = [3; 1; 4] <br>
v = [2 0 —1] <br>
s = 7</p>
<p>產生的矩陣是:</p>
<p class="code">u = <br>
3 <br>
1 <br>
4 <br>
v = <br>
2 0 —1 <br>
s = <br>
7</p>
<h3>加減法</h3>
<p class="code">X = A + B <br>
X = <br>
9 2 7 <br>
4 7 10 <br>
5 12 8 <br>
Y = X –A <br>
Y = <br>
8 1 6 <br>
3 5 7 <br>
4 9 2 </p>
<p>若二矩陣維數不統一,則會出錯!</p>
<p class="code">X = A + C <br>
<br>
Error using ==> + <br>
Matrix dimensions must agree.</p>
<p>向量的乘積與轉置</p>
<p class="code">x = v*u <br>
x = <br>
2 <br>
X = u*v <br>
X = <br>
6 0 —3 <br>
2 0 —1 <br>
8 0 —4 <br>
X = B' <br>
X = <br>
8 3 4 <br>
1 5 9 <br>
6 7 2 </p>
<p>如x與y均是列向量,則x*y無解,但下二表達式卻可以:</p>
<p class="code">x'*y<br>
y'*x</p>
<p>稱<span class="explain">內積</span>或<span class="explain">點積</span>.</p>
<p>下面的語句產生<span class="explain">單位矩陣</span> </p>
<p class="code">eye(m,n)</p>
<p>若用eye(n)則產生n*n的方陣</p>
<h2>解線性方程</h2>
<p>情況一:</p>
<p class="code">x = A\u <br>
x = <br>
10 <br>
—12 <br>
5</p>
<p>又如:</p>
<p class="code">X = A\B <br>
X = <br>
19 –3 —1 <br>
—17 4 13 <br>
6 0 —6</p>
<p>情況二;y是不同時刻t時的觀測值:</p>
<p class="code">t = [0 .3 .8 1.1 1.6 2.3]'; <br>
y = [.82 .72 .63 .60 .55 .50]';</p>
<p>若函數形式是:y(t)=c1+c2*exp(t);<br>
構造矩陣:</p>
<p class="code">E = [ones(size(t)) exp(–t)] <br>
E = <br>
1.0000 1.0000 <br>
1.0000 0.7408 <br>
1.0000 0.4493 <br>
1.0000 0.3329 <br>
1.0000 0.2019 <br>
1.0000 0.1003 </p>
<p>則可求得系數c1及c2</p>
<p class="code">c = E\y <br>
c = <br>
0.4760 0.3413</p>
<p>表明:y(t)=0.4760+0.3413*exp(t)<br>
畫圖如下:</p>
<p class="code">T = (0:0.1:2.5)'; <br>
Y = [ones(size(T)) exp(–T)]*c; <br>
plot(T,Y,'–',t,y,'o') </p>
<p><img src="image/algebra1.jpg" width="538" height="407"></p>
<h2>轉置與行列式</h2>
<p>若A是方陣,且是非奇異的,則:</p>
<p class="code">d = det(A) <br>
X = inv(A) <br>
d = <br>
1 <br>
X = <br>
3 —3 1 <br>
—3 5 —2 <br>
1 —2 1 </p>
<p>若c不是方陣,則用pinv:</p>
<p class="code">X = pinv(C) <br>
X = <br>
0.1159 —0.0729 0.0171 <br>
—0.0534 0.1152 0.0418</p>
<p>那么我們可以發現,下面3個命令具有同樣的功效(A是m*n的矩陣,m>n):</p>
<p>x = A\b <br>
x = pinv(A)*b <br>
x = inv(A’*A)*A’*b</p>
<h2>LU.RQ.及Cholesky分解</h2>
<p>MatLab求解線性方程建立在以下三個分解之上:<br>
Cholesky分解<br>
Guass(高斯)分解<br>
正交分解</p>
<h3>Cholesky分解</h3>
<p class="explain">A=p*p'</p>
<p>讓我們臨時把A變一變:</p>
<p class="code">A = pascal(6) <br>
A = <br>
1 1 1 1 1 1 <br>
1 2 3 4 5 6 <br>
1 3 6 10 15 21 <br>
1 4 10 20 35 56 <br>
1 5 15 35 70 126 <br>
1 6 21 56 126 252 </p>
<p>A是二項式系數,每一項是其左方與上方系數之和,求其Cholesky分解系數有:</p>
<p class="code">R = chol(A) <br>
R = <br>
1 1 1 1 1 1 <br>
0 1 2 3 4 5 <br>
0 0 1 3 6 10 <br>
0 0 0 1 4 10 <br>
0 0 0 0 1 5 <br>
0 0 0 0 0 1</p>
<p>R認識二項式系數.<br>
這樣對于線性方程便可化簡:<br>
A*x = b<br>
R'*R*x = b<br>
x = R\(R'\b) <br>
復雜度由O(n^3)變為O(n^2);</p>
<h3>LU分解 </h3>
<p class="explain">A = L U</p>
<p>其中,L時下三角陣,U是上三角陣,如:</p>
<p class="code">[L,U] = lu(B) <br>
L = <br>
1.0000 0 0 <br>
0.3750 0.5441 1.0000 <br>
0.5000 1.0000 0 <br>
U = <br>
8.0000 1.0000 6.0000 <br>
0 8.5000 —1.0000 <br>
0 0 5.2941</p>
<p>同樣:</p>
<p>A*x = b可以解為<br>
x = U\(L\b)</p>
<h3>QR分解 </h3>
<p>正交陣有如下性質:</p>
<p>Q'Q = I</p>
<p>正交陣的好處在于,她保持了原陣的長度,角度,并且在計算的過程中不會擴大誤差.</p>
<p>RQ分解如下:</p>
<p><span class="explain">A = Q R</span> 或 <span class="explain">A P =
Q R</span></p>
<p>其中,Q是正交陣,R是上三角陣.</p>
<h2>矩陣的冪與指數</h2>
<p>若A是方陣,p是正數,則</p>
<p class="code">X = A^2 <br>
X = <br>
3 6 10 <br>
6 14 25 <br>
10 25 46</p>
<p>若A是方陣,且是非奇異的,則X=A^(-P)將inv(A) P次方,如:</p>
<p class="code">Y = B^(–3) <br>
Y = <br>
0.0053 —0.0068 0.0018 <br>
—0.0034 0.0001 0.0036 <br>
—0.0016 0.0070 —0.0051</p>
<p>分數詞冪將由A的特征值決定.</p>
<p>若是對矩陣的每個元素進行冪,用<span class="explain">.^</span>,如</p>
<p class="code">X = A.^2 <br>
A = <br>
1 1 1 <br>
1 4 9 <br>
1 9 36</p>
<p><span class="explain">sqrtm(A)</span>計算A^(1/2),但要更精確,而<br>
<span class="explain">sqrt(A)</span>則計算A.^(1/2),是一個元素一個元素的算.</p>
<p>dx/dt=Ax,可以表示為<span class="explain">x(t)=exp(tA)*x(0)</span>;<br>
下面來看看如何計算:--expm(A) </p>
<p class="code">A = <br>
0 —6 —1 <br>
6 2 —16 <br>
—5 20 —10<br>
x0 = <br>
1 <br>
1 <br>
1</p>
<p>計算如下:</p>
<p class="code">X = []; <br>
for t = 0:.01:1 <br>
X = [X expm(t*A)*x0]; <br>
end</p>
<p>作圖有:</p>
<p class="code">plot3(X(1,:),X(2,:),X(3,:),'–o')</p>
<p><img src="image/algebra2.jpg" width="582" height="330"></p>
<h2>特征值</h2>
<p class="explain">Av=λv</p>
<p>若L是特陣值矩陣,則特征向量是V: </p>
<p>AV=VL;</p>
<p>如下:</p>
<p class="code">A = <br>
0 —6 —1 <br>
6 2 —16<br>
—5 20 —10 <br>
lambda = eig(A)<br>
lambda = <br>
—3.0710 <br>
—2.4645+17.6008i <br>
—2.4645-17.6008i </p>
<p>由exp(λt)可以看出exp(At)(見上小節)</p>
<p>若用二參數調用函數eig(),則返回特征向量及特征值矩陣:</p>
<p class="code">[V,D] = eig(A) <br>
V = <br>
—0.8326 —0.1203+ 0.2123i —0.1203– 0.2123i <br>
—0.3553 0.4691+ 0.4901i 0.4691– 0.4901i <br>
—0.4248 0.6249– 0.2997i 0.6249+ 0.2997i <br>
D = <br>
—3.0710 0 0 <br>
0 —2.4645+17.6008i 0 <br>
0 0 —2.4645—17.6008i</p>
<p>對于下面的矩陣:</p>
<p class="code">A = <br>
6 12 19 <br>
—9 —20 —33 <br>
4 9 15 <br>
V = <br>
0.4741 0.4082 —0.4082 <br>
—0.8127 —0.8165 0.8165 <br>
0.3386 0.4082 —0.4082 <br>
D = <br>
—1.0000 0 0 <br>
0 1.0000 0 <br>
0 0 1.0000</p>
<p>可以看出,有二特征值是一樣的,其特征向量僅差一個符號,在Symbolic Math Toolbox中提供了Jordan標準型的函數,如下:</p>
<p class="code">[X,J] = jordan(A) <br>
X = <br>
—1.7500 1.5000 2.7500 <br>
3.0000 —3.0000 —3.0000 <br>
—1.2500 1.5000 1.2500 <br>
J = <br>
—1 0 0 <br>
0 1 1 <br>
0 0 1</p>
<p><font size="6"><a href="index.htm">back</a></font></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -