MATLAB/Simulink建模与仿真
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 MATLAB

通过前面对MATLAB的介绍及其操作界面,相信读者对MATLAB有了一定的了解,下面通过几个示例来加深读者对MATLAB的理解。

1.3.1 命令行程序

在命令窗口中,用户可以直接调用MATLAB内部已经编译好的M文件,也可以直接在命令行提示符下输入命令,然后按回车键运行。下面通过一个矩阵操作的例子来介绍命令行程序(在此只是简单涉及MATLAB的数值计算,在1.4节中将会对MATLAB的数值计算展开介绍)。

【例1-1】在命令窗口中定义两个矩阵,进行各种矩阵运算。其中函数magic用于生成一个魔术矩阵A

      >> A=magic(3)

输出结果为:

          A=
              8    1    6
              3    5    7
              4    9    2

输入以下语句生成一个和A一样大小全1的矩阵B

      >> B=ones(3)

输出结果为:

      B=
          1    1    1
          1    1    1
          1    1    1

A、B两个矩阵相乘的积为C,得到结果为:

          >> C=A*B
          C=
              8    1    6
              3    5    7
              4    9    2

在命令窗口中可以使用MATLAB工具箱函数对矩阵进行操作。使用fliplr函数可以对矩阵进行左右翻转,以前面定义的魔术矩阵A为例。

      >> fliplr(A)

得到结果如下:

          ans =
              6    1    8
              7    5    3
              2    9    4

可以看到,结果与前面分析的一样。而flipud函数可以对矩阵进行上下翻转。

下面针对函数humps来介绍MATLAB在科学计算中的应用。该函数表达式如下:

下面的代码利用函数fzero分别找出了humps函数在x=1.3附近的零点位置。

【例1-2】MATLAB在科学计算中的应用。

      >> format long;
      >> H_humps=@humps;
      >> x=fzero(H_humps,1.3)

得到结果如下:

      x=
        1.29954968258482

现在要计算它在x∈[-1, 2]时的面积。

【例1-3】利用MATLAB求面积。

      >> x=linspace(-1,2,100);
      >> y=humps(x);
      >> format long
      >> area=trapz(x,y)

其中函数linspace将-1~2之间的数值100等分(产生间隔均匀的100个抽样点),函数trapz将根据均匀间隔的抽样值列表,使用梯形分割来近似估计函数的面积(积分)。得到结果如下所示。

      area =
        26.34473119524596

1.3.2 MATLAB绘图

还是利用上面的humps函数,使用MATLAB绘图函数可以方便、快捷地做出需要的图形。

      >> plot(x,y)

所得结果如图1-7所示。

图1-7 MATLAB绘图示例

利用MATLAB进行三维绘图同样方便。下面的代码产生一条三维螺旋线,如图1-8所示。

图1-8 三维螺旋线

      >> t=linspace(0,12*pi);
      >> plot3(cos(t),sin(t),t)

1.3.3 M文件

MATLAB不仅具有强大的数值处理和符号运算功能,而且可以像计算机高级语言一样进行程序设计。用MATLAB编程语言编写的程序称为M文件,它可以在MATLAB的工作空间运行。M文件根据调用方式的不同分为命令文件和函数文件。命令文件不需要用户输入任何参数,也不会输出任何参数,它只是各种命令的叠加,有点像过去的 DOS 文件,运行时系统按顺序去执行文件中的各个语句。函数文件一般需要用户输入参数,也有可能输出用户需要的参数,在格式上函数文件必须以function语句作为引导,在功能上函数文件主要解决参数传递和调用的问题。在作用对象上,命令文件的作用对象是工作空间中的变量,因此,命令文件中的变量一般不需要预先定义;而函数文件中的变量是局部变量,除输入、输出的变量会驻留在工作空间以外,其他变量不会驻留在工作空间。

命令文件的编写很简单,通过单击【File】菜单下【New】选项下的【M-File】命令打开M文件编辑器,把想要执行的命令按行编写上去,编写完后将文件确定一个名称保存起来即可。需要注意的是,命令文件存盘时不要忘记加上M文件的扩展名“.m”。当要执行时,只要在命令窗口的提示符号下输入该文件的文件名,按回车键后系统即可运行该命令文件。

函数文件一般分为定义行、帮助信息行、函数体和注释四部分。函数定义行为函数文件的第一行,功能是定义函数名,确定输入和输出变量。格式一般如下:

function<变量名>=函数名(参数)

紧跟定义行后以符号%开头的文字说明部分是帮助信息行。该行的文字信息在用户应用look for+<关键字>或 help+<函数名>进行查询帮助信息时,系统显示该行的文字信息。接下来是函数体,也就是函数实现其功能的程序,是函数文件编写的主要部分。在函数文件中凡是以%开头的文字部分均是注释内容,它可以被安排在程序的任何地方。

【例1-4】试编写一个命令文件,画出z=4-(x-3)2-(y-3)2x∈[0, 6],y∈[0, 6]上的曲面。

在M文件编辑器中输入以下命令

      %这是一个画二元函数z=4-(x-3).^2-(y-3).^2图的命令文件
      A=[0:0.1:6];  %建立A向量
      %创建向量x,y并赋值为A
      [x,y]=meshgrid(A);
      z=4-(x-3).^2-(y-3).^2;
      %绘制曲面
      surf(x,y,z);
      axis off; %关闭坐标轴

运行程序效果图如图1-9所示。

图1-9 曲面图

【例1-5】编写一个M函数文件,求小于任何给定正整数的自然数的阶乘值。

在M文件编辑器输入以下命令:

      function y=zsqf2(n)
      %这是一个求小于任何给定正整数的自然数的阶乘值的示例
      %调用格式c=zsqf2(n)
      y(1)=1;
      i=1;
      while y(i)<ceil(n/i)
          y(i+1)=y(i)*(i+1);
          i=i+1;
      end

在命令窗口调用这个函数,求得9999以内的自然数的阶乘值有7个,结果如下:

          >> zsqf2(9999)
          ans =
              1        2        6       24      120      720      5040

1.3.4 GUI举例

GUI(Graphical User Interface)即图形用户界面,是由图形对象构建的用于人与计算机交互信息的界面。在图形用户界面上,用户可以根据界面上的提示信息完成自己的工作,而不需要记忆大量烦琐的命令,只需通过鼠标、键盘等简捷的方式与计算机交互信息,选择想要运行的程序,控制程序的运行,实时显示图形信息。换言之,图形用户界面就是包含了各种图形控制对象(图形窗口、菜单、对话框和文本等)用于和计算机交互信息的图形界面。

【例1-6】建立一个信息对话框。

在M文件编辑器中输入以下命令:

      s=sprintf(['这是一个msgbox的基本测试\n\n','Version:
        1.0\n\n',...
          'Copyright 1994-2001 The MathWorks, INC.']);
      msgbox(s,'About Message-Box','help');

建立的信息对话框如图1-10所示。

图1-10 信息对话框

1.3.5 Simulink系统仿真

Simulink是MATLAB最重要的组件之一,它提供了一个动态系统建模、仿真和综合分析的集成环境。在该环境中,无须大量书写程序,而只需要通过简单直观的鼠标操作,就可构造出复杂的系统。Simulink具有适应面广、结构和流程清晰及仿真精细、贴近实际、效率高、灵活等优点,并基于以上优点Simulink已被广泛应用于控制理论和数学信号处理的复杂仿真和设计。

下面的例子是用Simulink仿真生成一个正弦发生器,如图1-11所示。

图1-11 正弦波仿真系统

运行后可以得到如图1-12所示的结果。

图1-12 正弦波图形

在此只是对Simulink做一个简单介绍,在后面章节将会对它的建模及仿真进行详细介绍。