⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matlab5.htm

📁 MATLAB真正强有力的地方在于它的数值处理能力。然而
💻 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 + -