1.3 MATLAB入门实例
下面通过几个入门的实例讲解来加深读者对MATLAB的了解。
1.3.1 命令行程序
在命令窗口,用户可以直接调用MATLAB内部已经编译好的M文件,也可以直接在命令行提示符下输入命令,然后按回车键运行。下面通过一个矩阵操作的例子来介绍命令行程序。
【示例 1-1】在命令窗口中定义两个矩阵,进行各种矩阵运算。其中,函数magic用于生成一个魔术矩阵A。程序如下所示:
>> A=magic(3) %定义一个魔术矩阵A
得到的结果如下:
A = 8 1 6 3 5 7 4 9 2
输入以下语句,生成一个和A一样大小全1的矩阵B。
>> B=ones(3) %定义全1矩阵B
得到的结果如下:
B = 1 1 1 1 1 1 1 1 1
将A、B两个矩阵相加,得到结果如下:
>> A+B %计算符号矩阵加法A+B ans = 9 2 7 4 6 8 5 10 3 >>
在命令窗口中可以使用MATLAB工具箱函数对矩阵进行操作。使用flipud函数可以对矩阵进行上下翻转,以前面定义的魔术矩阵A为例。
>> flipud(A) ans = 4 9 2 3 5 7 8 1 6
可以看到,结果与前面分析的一样。而fliplr可以对矩阵进行左右翻转。
下面针对函数humps来介绍MATLAB在科学计算中的应用。
【示例1-2】humps函数表达式如下:
下面的代码是利用函数fzero分别找出了humps函数在x=1.3附近的零点位置。
>> format long >> H_humps=@humps >> x=fzero(H_humps,1.3)
得到结果如下:
x = 1.299549682584822
现在要计算它在x∈[−1,2]时的面积。在MATLAB命令窗口,用户只要输入如下命令即可。
>> x=linspace(-1,2,100); >> y=humps(x); >> format long >> area=trapz(x,y)
其中,函数linspace将-1到2之间的数值100等分(产生间隔均匀的100个抽样点),函数trapz将根据均匀间隔的抽样值列表,使用梯形分割来近似估计函数的面积(积分)。得到结果如下:
area = 26.344731195245956
以上只是利用MATLAB进行科学计算的一个例子,其详细内容将在本书后面的章节介绍。
1.3.2 MATLAB绘图
利用1.3.1节介绍的humps函数,使用MATLAB绘图函数可以方便快捷地得到我们需要的图形。
>> plot(x,y)
所得结果如图1-34所示。
图1-34 MATLAB绘图示例
利用MATLAB进行三维绘图同样很方便。下面的代码是产生一条三维螺旋线,如图1-35所示。
>> t=linspace(0,10*pi); >> plot3(sin(t),cos(t),t)
图1-35 三维螺旋线
关于绘图更详细的内容,请参阅本书后面的章节。
1.3.3 M文件的编写
MATLAB不仅具有强大的数值处理和符号运算功能,而且可以像计算机高级语言一样进行程序设计。用MATLAB编程语言编写的程序称为M文件,它可以在MATLAB的工作空间运行。M文件根据调用方式的不同分为命令文件和函数文件两类。命令文件不需要用户输入任何参数,也不会输出任何参数,它只是各种命令的叠加,与DOS文件类似,运行时系统按顺序执行文件中的各个语句。函数文件一般需要用户输入参数,也有可能输出用户需要的参数,函数文件在格式上必须以function语句作为引导,在功能上主要解决参数传递和调用的问题。在作用对象上,命令文件的作用对象是工作空间中的变量。因此,命令文件中的变量一般不需要预先定义,而函数文件中的变量是局部变量,除输入、输出的变量会驻留在工作空间以外,其他变量不会驻留在工作空间。
命令文件的编写很简单,通过File→New→M-File菜单打开M文件编辑器,把想要执行的命令按行编写,编写完成以后,将文件确定一个名称保存起来即可。要注意的是,命令文件存盘时不要忘记加上M文件的扩展名.m。当要执行时,只要在命令窗口的提示符下输入该文件的文件名,按回车键后,系统即可运行该命令文件。
函数文件一般分为定义行、帮助信息行、函数体和注释四部分。函数定义行为函数文件的第一行,功能是定义函数名、确定输入和输出变量。格式一般为
function<变量名>=函数名(参数)
紧跟定义行后的以符号%开头的文字说明部分是帮助信息行。该行的文字信息在用户应用lookfor或help+<函数名>进行查询帮助信息时,系统显示该行的文字信息。接下来的是函数体,也就是函数实现其功能的程序,是函数文件编写的主要部分。在函数文件中,凡是以%开头的文字部分都是注释内容,它可以被安排在程序的任何地方。
【示例 1-3】 编写一个命令文件,画出z=3-(x-3)2-(y-3)2在x∈[0,6],y∈[0,6]上的曲面。程序代码如下:
%%%这是一个画二元函数z=3-((x-3).^2+(y-3).^2)图的命令文件 D=[0:0.1:6]; %%%%创建向量D [X,Y]=meshgrid(D); %%%%创建向量X、Y,并赋值为D surf(X,Y,3-((X-3).^2+(Y-3).^2)) %%%%绘制曲面图 axis off %关闭坐标轴
得到的结果如图1-36所示。
图1-36 曲面图
【示例1-4】编写一个M函数文件,求小于任何给定正整数的自然数的阶乘值。
该示例程序代码如下所示:
function f=ex0104(n) %这是一个求小于任何正整数的自然数的阶乘值的示例 %调用格式c=zsqf2(n) %参数说明:n可以是任意的正整数 f(1)=1 i=1; while f(i)<ceil(n/i) f(i+1)=f(i)*(i+1) i=i+1; end
在命令窗口调用这个函数,求得10000以内的自然数的阶乘值有7个,结果如下:
>>ex0104(10000) ans = 1 2 6 24 120 720 5040
1.3.4 GUI实例
GUI(Graphical User Interface)即图形用户界面,是由图形对象构建的用于人与计算机交互信息的界面。在图形用户界面中,用户可以根据界面中的提示信息完成自己的工作,而不需要记忆大量烦琐的命令,只须通过鼠标、键盘等简捷的方式与计算机交互信息、选择想要运行的程序、控制程序的运行、实时显示图形信息。换言之,图形用户界面就是包含了各种图形控制对象(图形窗口、菜单、对话框和文本等)用于和计算机交互信息的图形界面。
【示例1-5】建立一个进度条监视一个循环语句的进度。
程序代码如下:
h=waitbar(0,'请等待……'); for i=1:10000 waitbar(i/10000) end
建立的进度条如图1-37所示。
图1-37 正在运行的进度条
关于GUI的知识,本书有专门的章节介绍,请读者参阅。
1.3.5 使用Simulink进行系统仿真
Simulink是MATLAB最重要的组件之一,它提供一个动态系统建模、仿真和综合分析的集成环境。在该环境中,无须大量书写程序,只需要通过简单直观的鼠标操作,就可构造出复杂的系统。Simulink具有适应面广、结构和流程清晰及仿真精细、贴近实际、效率高、灵活等优点,它已被广泛应用于控制理论和数字信号处理的复杂仿真和设计。
【示例1-6】用Simulink仿真生成一个正弦波发生器,如图1-38所示。
图1-38 正弦波仿真系统
运行得到的结果如图1-39所示。
图1-39 正弦波图形