?? matralgi.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> </p></body></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -