MATLAB应用实例精讲:数学数值计算与统计分析篇
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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

AB两个矩阵相加,得到结果如下:

        >> 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)2x∈[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 正弦波图形