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 PPT
  • 3 视频
  • 4 小测试

1.3.1矩阵建立


Matlab矩阵主要分三类,包括数值矩阵、符号矩阵和特殊矩阵。建立矩阵,采取多种方式。

1. 逐个元素输入法

直接逐个元素从键盘敲入,同一行元素用逗号或空格分隔,不同行用分号分隔,例如,在命令窗口中输入以下命令,回车后,则立刻显示输出结果。

>> a=[1,2,3;4,5,6;7,8,9]

a =

     1     2    3

     4     5    6

     7     8    9

矩阵元素可以是复数,如图1-4中所示的命令及其结果。

2. 冒号生成法

采用冒号生成法产生一维向量的通用格式:

x=a:step(increase):b

说明:step(increase)为步长,例如:

>> b=1:2:10

显示输出:

b =

     1     3    5     7     9

3.“全下标”元素赋值法

例如:输入以下命令,输出结果如下:

>> c(1,10,2)=10

c(:,:,1) =

     0     0    0     0     0    0     0     0    0     0

c(:,:,2) =

     0     0    0     0     0    0     0     0    0    10

此语句可以理解为产生的新矩阵共有2页,第1110列,第2页同样110列,对第2页第1行第10列的元素赋值等于10,其余元素值均为0

4. 利用函数生成

常用生成矩阵的函数包括:oneszerosrandrandnlinspace等。rand函数可产生均匀分布0-1之间的随机数,randn函数用于产生均值为0,方差为1服从正态分布随机数,linspace生成线性等分向量,logspace生成按对数等分向量。例如:

>> a=zeros(3,3);                                 %产生33列全0矩阵

a =

     0     0    0

     0     0    0

     0     0    0

>> b=fix(rand(1,10)*100);           %产生1100-100之间的随机数,并取整

b =

    70    75   27    67    65   16    11    49   95    34

>> c=randn(2,4);                  %产生24列正态分布均值为0,方差为1随机数

c =

    0.3714    1.1174   0.0326    1.1006

    -0.2256   -1.0891   0.5525    1.5442

>> d=linspace(0,10,11);             %生成从0-10,线性等分的含有11个元素的向量

d =

     0     1    2     3     4    5     6     7    8     9    10

>> e=logspace(0,2,3);              %生成从100 ­-102按对数等分的3个元素的行向量

e =

     1    10  100

>> f=magic(3);                   %生成3阶魔方矩阵,行、列、对角线上元素的和相等

f =

     8     1    6

     3     5    7

     4     9    2

>> g=eye(3);                                   %生成3阶单位矩阵

g =

     1     0    0

     0    1     0

     0     0    1

>> h=[1 2 3];h=diag(h);                             %生成向量元素为对角线元素的矩阵

h =

     1     0    0

     0     2    0

     0     0    3

5 .矩阵合并与矩阵行列的删除

矩阵合并是将两个或两个以上的矩阵连接成一个新矩阵,矩阵合并要符合维数的约束。要删除矩阵某行或某列,只需将该行或该列赋予“[]”即可。举例如下:

a=ones(2,3); b=[4 5 6]; c=[a;b]

c =

     1     1    1

     1     1    1

     4     5    6

>> c(2,:)=[]                                              %删除第二行

c =

     1     1    1

     4     5    6

>> c(:,1)=[]                                              %删除第一列

c =

     1     1

     5     6

1.3.2矩阵结构的改变与排序

常用改变矩阵结构与矩阵排序函数见表1-2所示。

1-2 常用改变矩阵结构函数

                                       

 

函数名

 
 

功能

 
 

函数

 
 

功能

 
 

fliplr

 
 

矩阵左右翻转

 
 

reshape

 
 

重塑矩阵

 
 

flipud

 
 

矩阵上下翻转

 
 

transpose

 
 

矩阵的转置

 
 

flipdim

 
 

矩阵沿特性维翻转

 
 

ctranspose

 
 

矩阵的共轭转置

 
 

rot90

 
 

逆时针旋转矩阵

 
 

sort

 
 

元素排序

 

下面举例说明函数的使用。

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

a =

     1     2    3

     4     5    6

>> fliplr(a)

ans =

     3     2    1

     6     5    4

>> flipud(a)

ans =

     4     5    6

     1     2    3

>> flipdim(a,2)                                         %以竖直方向为轴进行镜像

ans =

     3     2    1

     6     5    4

>> rot90(a,1)                                            %旋转90

ans =

     3     6

     2     5

    1     4

>> rot90(a,3)                                            %旋转3×90

ans =

     4     1

     5     2

     6     3

>> reshape(a,3,2)                                      %a重新排列为3×2矩阵

ans =

    1     5

     4     3

    2     6

>>b=[1+i,2+2i,3+3i;4+4i,5+5i,6+6i];

>> transpose(b)

ans =

   1.0000 + 1.0000i   4.0000 + 4.0000i

   2.0000 + 2.0000i   5.0000 + 5.0000i

   3.0000 + 3.0000i   6.0000 + 6.0000i

>> ctranspose(b)                                      %b'进行比较

ans =

   1.0000 - 1.0000i   4.0000 - 4.0000i

   2.0000 - 2.0000i   5.0000 - 5.0000i

   3.0000 - 3.0000i   6.0000 - 6.0000i

此外,利用“:”将矩阵元素按列取出并排成一列。

>> a(:)'

ans =

     1     4    2     5     3    6

排序函数sort可以实现沿矩阵不同维,以升序排列元素。元素如果含有复数,其元素按其模的大小进行排列,模相等时,按区间上相角进行排序,[a,index]=sort(x),返回矩阵x各列的排序结果及各列上元素的原下标位置值,举例如下:

>> x=[4 1 7 6 9;3 4 7 1 3;7 4 2 1 5;7 6 6 4 2];

x =

     4     1    7     6     9

     3     4    7     1     3

     7     4    2     1     5

     7     6    6     4     2

>> [a,index]=sort(x)            

a =

     3     1    2     1     2

     4     4    6     1     3

     7     4    7     4     5

     7     6    7     6     9

index =

     2     1    3     2     4

     1     2    4     3     2

     3     3    1     4     3

     4     4    2     1     1

1.3.3矩阵元素的赋值与寻访

下面列举几例矩阵元素的赋值与寻访。

>> a=zeros(3,3);                                     %产生33列全0矩阵

>> a(2,:)=1;                                        %将第2行全部元素赋值为1

>> a(:,1)=9;                                        %将第1列全部元素赋值为9

>> a(:,3)=[7 8 9]'                                    %将列向量赋给a3列,“'”表示转置

a =

     9     0    7

     9     1    8

     9     0    9

%显示矩阵a第八个元素,排序按先排第一列元素,再排第二列元素,类推

>> b=a(8)         

b =

     8

>> c=a(2,3)                                             %显示矩阵a2行第3列元素

c =

     8

>> a(3:end)

ans =

     9     0    1     0     7    8     9

>> a([1 2])=6                                           %a的第12个元素赋值

a =

     6     0    7

     6     1    8

     9     0    9

>> e=[2 0 1 0];

>> find(e)                                                %返回非零元素的下标值

ans =

    1     3

>> e(find(e>0.1))                                     %寻访e中大于0.1的元素

ans =

    2     1

下面再介绍一组寻访元素的函数。

 >> a=fix(rand(3,3)*10)

a =

     2     3    5

     6     8    9

     4     5    2

>> diag(a)                                        %diag(v,k),省略k k= 0代表取主对角线元素

ans =

     2

     8

     2

>> diag(a,1)'                                          %k > 0取主对角线上方对角线元素

ans =

     3     9

>> diag(a,-2)                                            % k < 0取主对角线下方对角线元素

ans =

     4

>> tril(a)                                                  % tril (a),返回下三角阵

ans =

     2     0    0

     6     8    0

     4     5    2

>> tril(a,1)                                               % k > 0取主对角线上方对角线以下元素。

ans =

     2     3    0

     6     8    9

     4     5    2

>> triu(a)                                                        % 返回上三角阵

ans =

     2     3    5

     0     8    9

     0     0    2

1.3.4矩阵的基本运算

矩阵运算是按照线性代数运算法则定义的,矩阵作为整体进行运算,有着明确而严格的数学规则。

1. 向量的运算

向量的点积运算函数dot(a,b);向量的叉积运算函数cross(a,b)。例如:

>> a=[2 2 3];b=[4 5 6];c=[9 4 2];

>>dot(a,b),cross(a,b)

ans =

    36

ans =

    -3     0    2

>> dot(a,cross(b,c))                                      %向量的混合积

ans =

   -23

当向量运算函数的输入变量是矩阵形式时,运算针对列向量进行运算。

>> a=magic(3),b=ceil(randn(3,3))

a =

     8     1    6

     3     5    7

     4     9    2

b =

     1     0    0

     1     1    1

     2     1   -1

>> dot(a,b)

ans =

    19    14    5

2. 矩阵的加减乘除运算

矩阵的基本运算包括加、减、乘、除,转置等。矩阵的转置是共轭转置。举例如下:

>> a=ones(3,3); b=magic(3)

b =

     8     1    6

     3     5    7

     4     9    2

>> c=a+b

c =

     9     2    7

     4     6    8

     5    10    3

>> d=a*b                                                               %按矩阵相乘的定义进行相乘运算

d =

    15    15   15

    15    15   15

    15    15   15

>> e=[1+i,2+2i,3+3i;4+4i,5+5i,6+6i]

e =

   1.0000 + 1.0000i   2.0000 + 2.0000i   3.0000 + 3.0000i

   4.0000 +4.0000i   5.0000 + 5.0000i   6.0000 + 6.0000i

>> f=e'

f =

   1.0000 -1.0000i   4.0000 - 4.0000i

   2.0000 -2.0000i   5.0000 - 5.0000i

   3.0000 -3.0000i   6.0000 - 6.0000i

矩阵的除法运算有左除\与右除/两种,当方程组的矩阵形式为如果A是非奇异矩阵,左除A\B的解A\B等于A的逆乘以B。类似,右除A/B方程组的解A/B等于A乘以B的逆。



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

>> X=A\B

X =

    3.0000

   -4.0000

   -1.0000

    1.0000

>> X=B/A

错误使用  /

矩阵维度必须一致。

矩阵运算A\BB/A不相同。同样,矩阵运算A/BB\A也不相同。

3. 矩阵关系运算与逻辑运算

矩阵关系运算符包括:“>”、“>=”、“<”、“<=”、“==”、“~=”。逻辑运算包括:&(与)、|(或)、~(非)。常用逻辑函数有xoranyall。应用举例如下。

>> a=rand(1,5)

a =

   0.7094    0.7547    0.2760   0.6797    0.6551

>> r1=(a>0.5)&(a<0.8)

r1 =

    1     1     0    1     1

>> r3=~r1

r3 =

     0     0    1     0     0

% all(x),当向量x所有元素非零时,返回1

>> x=all([1 1 0;1 0 0;1 1 0])       %x为矩阵时,计算各列向量是否所有元素非零。

x =

     1     0    0

%any(x),当向量x中任意元素非零时,返回1

>> x=any([1 1 0;1 0 0;1 1 0])             %x为矩阵时,计算各列向量是否有非零元素。

x =

     1     1    0

4. 矩阵的基本性质分析

矩阵的性质分析包括:向量和矩阵的范数、矩阵的秩、矩阵的行列式值、矩阵的迹、零空间正交基等。例如

>> a=ceil(randn(3))                                   %产生3×3正态分布随机数并取整

a =

     2    -2   -1

     0     0    1

     1     0    1

>>b=norm(a)                                            %计算a的最大奇异值相当于b=max(svd(a))

b =

    3.0381

>> det(a)                                                  %求矩阵a行列式值

ans =

    -2

>> trace(a)                                               %求矩阵a的迹即主对角线上元素的和

ans =

     3

>> rank(a)                                                %求矩阵a的秩

ans =

     3