MATLAB编程与最优化设计应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 了解MATLAB

前面已介绍了MATLAB的安装和查询帮助,对MATLAB环境有一定的了解。下面通过几个示例来加深对MATLAB的了解。

1.5.1 命令行编程

在命令窗口,用户可以直接调用MATLAB内部已编译好的M文件,也可直接在命令行提示符下输入命令,然后按回车键运行。

例1-1】 在命令窗口中定义两个矩阵,并对这两个矩阵进行相应的运算。

        >>clear all;        %清除空间原有变量
        >>A=magic(3)      %定义3阶魔方矩阵
        A=
            8    1    6
            3    5    7
            4    9    2
        >>B=rand(3)       %3阶随机矩阵
        B=
            0.8147   0.9134   0.2785
            0.9058   0.6324   0.5469
            0.1270   0.0975   0.9575
        >>S1=A+B,S2=A-B         %矩阵的加、减运算
        S1=
            8.8147   1.9134   6.2785
            3.9058   5.6324   7.5469
            4.1270   9.0975   2.9575
        S2=
            7.1853   0.0866   5.7215
            2.0942   4.3676   6.4531
            3.8730   8.9025   1.0425
        >>S3=A*B                %矩阵的乘运算
        S3=
            8.1855   8.5246   8.5199
            7.8620   6.5847   10.2725
          11.6650   9.5398   7.9509
        >>S4=cat(1,A,B)            %矩阵的垂直合并运算
        S4=
            8.0000   1.0000   6.0000
            3.0000   5.0000   7.0000
            4.0000   9.0000   2.0000
            0.8147   0.9134   0.2785
            0.9058   0.6324   0.5469
            0.1270   0.0975   0.9575

例1-2】 已知函数,利用 fzero 函数找出函数在x=1.2附近的零点位置。

        >> clear all;
        >> format long
        >> H1=@humps
        H1 =
    @humps
        >> x=fzero(H1,1.2)
        x=
    1.299549682584822

如果要计算它在x∈[-2,2]的面积。即实现的MATLAB代码为:

        >>x=linspace(-2,2,100);   %将-2到2间的数值进行100等分
        >> y=humps(x);
        >>format long;
        >>area=trapz(x,y)   %根据均匀间隔的抽样值列表,使用梯形分割近似估计函数面积
        area=
          20.858002731798891

1.5.2 绘图功能

利用humps函数,使用MATLAB绘图函数可方便、快捷地绘制出相应的图形,效果如图1-25所示。

图1-25 humps函数对应的图形

        >>plot(x,y,'k')      %线条颜色为黑色

MATLAB中提供了相应的二维、三维绘图函数,利用这些函数可方便地进行绘图,如:

        >>figure;         %新建一个图形界面
        [X,Y] = meshgrid(-8:.5:8);
        R = sqrt(X.^2 + Y.^2) + eps;
        Z = sin(R)./R;
        mesh(Z);
        set(gcf,'color','W')    %背景颜色为白色

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

图1-26 三维网格图

1.5.3 M文件编写函数

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

建立新的文件编辑器,即选择File菜单下的New子菜单下的Script命令,即可新建M文件编辑器。完成编写代码后,单击“保存”按钮,将文件确定一个名称保存起来即可。需要注意的是,命令文件存盘时不要忘记加上M文件的扩展名.m。当要执行时,只要在命令窗口的提示符号下输入该文件的文件名,按回车键,系统即可运行该命令文件。

函数文件一般分为定义行、帮助信息行、函数体和注释4部分。函数定义行为函数文件的第一行,功能为定义函数名、确定输入和输出参数。其格式为:

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

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

        >>clear all;
        D=[-6:0.1:6];           %创建向量D
        [x,y]=meshgrid(D);       %创建向量X、Y并赋值为D
        z=3-(x-2).^2-(y-2).^2;    %函数
        surf(x,y,z)
        axis off               %关闭坐标轴
        set(gcf,'color','w');

编写完代码后,将文件保存为li1_3.m文件,在命令窗口中输入:

        >> li1_3

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

图1-27 曲面图

例1-4】 创建一个函数,用于实现n阶Hilbert矩阵。

        >>clear all;
        %函数代码
        k=input('请输入一个数值:');
        hilbert=zeros(k,k);   % 预分配矩阵
        for m = 1:k
            for n = 1:k
              hilbert(m,n) = 1/(m+n -1);
            end
        end
        disp('显示所创建矩阵')
        hilbert

编写完代码后,将文件保存为li1_4.m文件,在命令窗口中输入:

        >> li1_4

运行程序,输出如下:

        请输入一个数值:6
        显示所创建矩阵
        hilbert =
            1.0000   0.5000   0.3333   0.2500   0.2000   0.1667
            0.5000   0.3333   0.2500   0.2000   0.1667   0.1429
            0.3333   0.2500   0.2000   0.1667   0.1429   0.1250
            0.2500   0.2000   0.1667   0.1429   0.1250   0.1111
            0.2000   0.1667   0.1429   0.1250   0.1111   0.1000
            0.1667   0.1429   0.1250   0.1111   0.1000   0.0909

例1-5】 编写一个M函数文件,用于实现向量的平均值及标准差。

        function [mean,stdev] = stat(x)
        n = length(x);
        mean = sum(x)/n;
        stdev = sqrt(sum((x-mean).^2/n));

保存文件,名为stat.m,在命令窗口中输入:

        >> [mean stdev] = stat([12.7 45.4 98.9 26.6 53/1])

运行程序,输出如下:

        mean =
          47.3200
        stdev =
          29.408

1.5.4 GUI实例

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

例1-6】 创建一个输入对话框,用于实现数据的输入。

        >>clear all;
        prompt={'输入矩阵的x^2大小:',…
              '输入colormap名称:'};
        name='输入Peaks函数';
        numlines=1;
        defaultanswer={'15','hsv'};
        answer=inputdlg(prompt,name,numlines,defaultanswer);

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

图1-28 输入对话框

1.5.5 Simulink仿真

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

例1-7】 用Simulink仿真创建两个发生器,如图1-29所示。

图1-29 仿真框图

对仿真框图进行仿真,效果如图1-30所示。

图1-30 仿真效果