Matlab仿真技术

乔世坤

目录

  • 1 实验一Matlab基础与入门
    • 1.1 Matlab简介
    • 1.2 变量与数值
    • 1.3 矩阵运算
    • 1.4 数组运算
    • 1.5 常用数学函数
    • 1.6 Matlab帮助系统
    • 1.7 实验内容
    • 1.8 思考题
  • 2 实验二 Matlab程序设计基础
    • 2.1 M文件
    • 2.2 Matlab程序流控制
    • 2.3 实验内容
    • 2.4 思考题
  • 3 实验三Matlab图形绘制
    • 3.1 二维曲线的绘制
    • 3.2 三维曲线的绘制
    • 3.3 实验内容
    • 3.4 思考题
  • 4 MATLAB数值计算与符号运算
    • 4.1 线性代数中的应用
    • 4.2 多项式运算
    • 4.3 数据分析与统计
    • 4.4 功能函数
    • 4.5 常微分方程的数值求值
    • 4.6 符号运算
    • 4.7 Matlab数值计算部分实验题
    • 4.8 Matlab符号运算部分实验题
    • 4.9 Matlab程序设计部分实验题
    • 4.10 思考题
  • 5 Simulink仿真基础
    • 5.1 Simulink概述
    • 5.2 Simulink建模与仿真
    • 5.3 子系统及其封装技术
    • 5.4 SIMULINK模块库简介
    • 5.5 Simulink仿真基础实验题
    • 5.6 Simulink仿真应用实验题
    • 5.7 思考题
  • 6 Matlab在电路分析中的应用
    • 6.1 Matlab在电路中的仿真应用
    • 6.2 数字逻辑电路仿真
    • 6.3 实验内容
    • 6.4 思考题
  • 7 MATLAB在信号与系统中的应用
    • 7.1 连续时间信号及其表示
    • 7.2 线性时不变系统
    • 7.3 线性时不变系统的时域分析
    • 7.4 线性时不变系统的频域分析
    • 7.5 实验内容
    • 7.6 思考题
  • 8 Matlab在数字信号处理中的应用
    • 8.1 信号的表示与信号的基本运算
    • 8.2 实验内容
    • 8.3 思考题
  • 9 MATLAB在通信原理中的应用
    • 9.1 脉冲编码调制仿真
    • 9.2 实验内容
线性代数中的应用
  • 1 文档
  • 2 视频
  • 3 PPT

4.1 线性代数中的应用

4.1.1线性方程组

线性方程组的一般形式为

                      4-1

m个方程n个未知数。方程组的矩阵形式为

其中A是方程组系数矩阵,x是未知数列向量,B是方程右边常数的列向量。根据mn值的不同,分三种情况。

1. 恰定方程组

当线性方程组m=n,且矩阵A可逆,则称该方程为恰定方程组,此类方程组的求解前面已知介绍过,应用左除求得特解。如例1-1,下面验证计算结果。

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

>> inv(A)*B                                         %结果等于A\B

ans =

    3.0000

   -4.0000

   -1.0000

    1.0000

对于线性齐次方程,如果矩阵A的秩等于n,则只有零解;如果矩阵A的秩小于n,则有非零解,且所有解构成一向量空间,可利用函数null给出齐次方程组的解空间的一个正交规范基。

[4-1]求线性方程组的解。


>>A=[1,1,-2,-1;3,-2,-1,2;0,5,7,3;2,-3,-5,-1];

>> det(A)

ans =

     0

>> null(A)'

ans =

   0.4714   -0.2357    0.4714  -0.7071

说明该齐次线性方程组的解空间是一维向量空间,且向量(0.4714-0.2350.4714-0.7071)T是解空间的一个正交规范基。

[4-2] 求线性方程组的解。


>>A=[1,1,2,-1;3,-2,-3,2;0,5,7,3;2,-3,-5,-1];

>> det(A)

ans =

  -40.0000

>> null(A)

ans =

   空矩阵: 4×0

解空间的基是一个空集,说明该线性方程组只有零解。

2. 超定方程组

当线性方程组m>n,称该方程组为超定方程组,Matlab求解超定方程组的运算是采用Householder变换直接求解方程组的最小二乘解。最小二乘法是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

[4-3] 求超定方程组的解。


解:此超定方程有四个方程,三个未知数。

>> A=[2 3 4;-2 5 -1;6 -4 3;2 5 -7];B=[3;-3;-7;4];

>>A\B

ans =

   -0.2532

    0.3950

   -0.1954

>> pinv(A)*B;                                             %pinv函数求伪逆矩阵验证A\B

3. 欠定方程组

m<n,称该方程组为欠定方程组(不定方程组)

[4-4] 求欠定方程组的解。


解:此不定方程组有三个方程,四个未知数。解是不确定的。用矩阵法得到的解有两个特征:在解中至多有秩(矩阵A的秩)个非零元素;该解是方程组所有解中2-阶范数最小的一个解。

>> A=[2 4 2 1;-1 2 0 2; 3 5 2 1 ];B=[1 ;4;6];

>>A\B

ans =

    2.0000

    3.0000

   -7.5000

         0

[4-5] 一组测量数据如下表所示,拟用延迟指数函数


来拟合这组数据,并用图形形式给出拟合结果。

                           

 

t

 
 

0

 
 

0.3

 
 

0.8

 
 

1.1

 
 

1.6

 
 

2.3

 
 

y

 
 

0.82

 
 

0.72

 
 

0.63

 
 

0.6

 
 

0.55

 
 

0.5

 

解:六组数据,可以建立起六个方程,但只含有c1c2两个未知数,组成不定方程组,程序编写如下:

t=[0,0.3,0.8,1.1,1.6,2.3]';

a=[ones(size(t)),exp(-t)];                                  %得到方程的系数矩阵

y=[0.82,0.72,0.63,0.6,0.55,0.5]';                %方程右边常数的列向量

c=a\y                                                  %c1,c2

T=[0:0.1:2.5]';Y=[ones(size(T)) exp(-T)]*c;       %应用刚求得的c1,c2计算拟合曲线

plot(T,Y,'-',t,y,'o');                                     %作图显示原数据点与拟合曲线

title('最小二乘法曲线拟合');xlabel('\itt');ylabel('\ity');

legend('拟合曲线','实际值');


4-1曲线拟合

程序执行后得到方程解,c1等于0.4760c2等于0.3413,即


。图形形式结果见图4-1所示。

4.1.2矩阵分解

矩阵分解是将矩阵拆解为数个矩阵的乘积,常见的有三种:三角分解法QR分解法,奇异值分解法。

1. 三角(LU)分解

三角分解法是将方分解成一个上三角形矩阵U和一个交换下三角形矩阵L,这样的分解法又称为LU分解法。它的用途主要在简化一个大矩阵的行列式值的计算过程、求逆矩阵和求解联立方程组。解并非唯一。Matlab中用于LU分解的lu函数常用的格式如下:

 [L,U]=lu(A)

 [L,U,P]=lu(A)

说明应用第二种格式时l*u=p*a例如:

>> a=[1 2 3;4 5 6;4 2 6];

>> [l,u]=lu(a)

l =

   0.2500   -0.2500    1.0000

   1.0000         0         0

   1.0000    1.0000         0

u =

   4.0000    5.0000    6.0000

        0   -3.0000         0

        0         0   1.5000

>> l*u;                                                            %验证

>> [l,u,p]=lu(a)

l =

   1.0000         0         0

   1.0000    1.0000         0

   0.2500   -0.2500    1.0000

u =

   4.0000    5.0000    6.0000

        0   -3.0000         0

        0         0    1.5000

p =

     0    1     0

     0     0    1

     1     0    0

>> l*u; p*a;                                                     %验证l*u=p*a

线性方程组求解可以利用克莱姆法则求解但随着阶次增高计算量极大。一般采用高斯消元法,LU仅仅是高斯消元法的矩阵表示。下面简单介绍矩阵分解如何减小计算量。


应用LU分解来求解线性方程,消元过程是通过对系数矩阵的行操作实现的,而并没有进行矩阵相乘,运算速度更快。

2. 正交(QR)分解函数

QR算法是重要性最高、应用最广泛、最成功的工程计算工具之一。QR算法的基础是:反复使用QR分解,将矩阵A分解为一个正交矩阵与另一个矩阵的乘积称为矩阵A的正交分解。Matlab中用于QR分解qr函数常用的格式如下:

 [Q,R] =qr(A)

说明:Q表示正交(酉)矩阵,R是上三角矩阵,A = Q*R

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

说明:Q表示归一化矩阵,R是上三角矩阵,E是置换矩阵,A*E = Q*R

例如

>> [q,r,e]=qr(a)

q =

  -0.6667    0.3333   -0.6667

  -0.6667   -0.6667    0.3333

  -0.3333    0.6667    0.6667

r =

  -3.0000   -2.0000   -2.6667

       0    2.0000    0.3333

       0        0    1.3333

e =

    0     1     0

    1     0     0

    0     0     1

3. 奇异值分解SVD

S=svd(A)

[U,S,V] = svd(A)

说明:计算矩阵奇异值分解的三个矩阵,满足

例如:

>> a=[1 0 1;0 -1 1]

a =

     1     0    1

     0    -1    1

>> [u,s,v]=svd(a)                                     %可以验证得到a=u*s*v'

u =

  -0.7071   -0.7071

  -0.7071    0.7071

s =

   1.7321         0         0

        0    1.0000         0

v =

  -0.4082   -0.7071   -0.5774

   0.4082   -0.7071    0.5774

  -0.8165    0.0000    0.5774

>> S=svd(a)                                             %a分解所得的全部奇异值

S =

    1.7321

    1.0000

    Matlab中还提供有用于Cholesky分解的chol函数、用于Jordan分解的jordan函数。

4.1.3矩阵的特征值与特征向量

An阶阵,如果数λn维非零列向量X,使关系式AX=λX成立,那么这样的数λ称为方阵A的特征值,非零列向量X称为A对应于特征值λ的特征向量。|A-λE|=0 称为方阵A的特征方程,其左端λn次多项式,称为方阵A的特征多项式。Matlab中用于求解矩阵的特征值与特征向量函数eig格式如下:

lambda = eig(A)

[v,d]=eig(a)

例如:

>> a=[0 1;1 1];

>> [v,d] = eig(a)                                       %可以验证a*v(:,1)等于d(1,1)*v(:,1)

v =

  -0.8507    0.5257

   0.5257    0.8507

d =

  -0.6180         0

        0    1.6180