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)2在x∈[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做一个简单介绍,在后面章节将会对它的建模及仿真进行详细介绍。