美文网首页野生技术宅协会
Matlab R2017b快速入门

Matlab R2017b快速入门

作者: 乐百川 | 来源:发表于2018-01-06 00:01 被阅读118次

    久闻Matlab的大名,可惜一直没有好好学学。现在正好装了个最新的版本,就来学习一下Matlab,了解一下它的强大的功能。

    程序界面

    打开Matlab会看到类似的程序界面,上边是菜单栏,包含了各种工具。左边是文件视图,列出了项目中的所有文件。中间是代码和命令行窗口。右边则是工作区窗口,每次在代码中输入的变量都会作为工作区变量保存在工作区中。


    程序界面

    数据类型

    Matlab中其实所有变量都是矩阵,不过如果你只指定了一个值的话,那么它其实就是一个1X1的矩阵。

    矩阵和数组

    数组使用方括号声明,数组元素使用空格或者逗号分隔开。这样的数组又叫做行矢量。

    % 数组
    array1 = [1,2,3,4,5]
    array2 = [1 3 5 9 7]
    

    要创建矩阵,使用分号分隔的多行数据。

    m = [1,2,3; 4,5,6; 7,8,9]
    

    另外还有几个方法用于创建初始值为0、1、均匀随机、正态分布随机的矩阵,它们的参数分别是行和列的个数。

    % 创建矩阵
    m0 = zeros(3,3)
    m1 = ones(3,3)
    m2 = rand(3,3)
    m3 = randn(3,3)
    

    如果要转置矩阵,使用单引号。

    % 转置矩阵
    m = m'
    

    两个某一维度相同的矩阵可以串联,逗号分隔为水平串联,分号分隔为垂直串联。下面[m,n]结果是3X6的矩阵,而[m;n]是6X3的矩阵。

    % 水平串联和垂直串联
    n = zeros(3,3)
    [m,n]
    [m;n]
    

    矩阵与一个数运算,结果会应用到矩阵所有元素上。如果矩阵和矩阵运算,结果遵循矩阵计算法则。如果希望将两个矩阵对应元素进行计算,需要使用.运算符的语法。

    % 矩阵运算
    a
    a*3
    a+a
    a*a
    a.*a
    

    结果如下。

    a =
         1     2
         3     4
    
    ans =
         3     6
         9    12
    
    ans =
         2     4
         6     8
    
    ans =
         7    10
        15    22
    
    ans =
         1     4
         9    16
    

    索引运算

    有时候可能需要对数组或矩阵中某些值进行计算,这时候可以利用索引运算进行。如果尝试访问矩阵中不存在的元素,会导致错误。不过如果是对不存在的元素赋值,Matlab会自动扩展矩阵,新创建的元素都为0.

    a = [1,2,3; 4,5,6; 7,7,8]
    
    >> a(1,1)
    ans =
         1
    
    >> a(4,4)=2
    a =
         1     2     3     0
         4     5     6     0
         7     7     8     0
         0     0     0     2
    

    如果需要访问多行或多列,使用冒号运算符。下面分别获取了矩阵2-4行与1-3列的元素,以及第三行的所有元素。

    >> a(2:4,1:3)
    ans =
         4     5     6
         7     7     8
         0     0     0
    
    >> a(3,:)
    ans =
         7     7     8     0
    

    冒号运算符还可以用于创建等距离矢量,语法是[起始:步长:结束],其中步长可以省略,默认是1。

    m = [0:10:100]
    
    m =
         0    10    20    30    40    50    60    70    80    90   100
    

    矩阵计算

    Matlab的英文全名即Matrix Laboratory(矩阵实验室),可见矩阵在Matlab中的重要地位。前面已经介绍了一些矩阵的知识,下面继续介绍一些矩阵的方法。

    首先是矩阵求和,默认情况下对于矩阵执行sum函数会得到各列的和。

    m = [1,2,3; 4,5,6; 7,8,9]
    
    m =
         1     2     3
         4     5     6
         7     8     9
    % 矩阵求和
    sum(m)
    
    ans =
        12    15    18
    

    如果希望得到各行的和,需要在sum函数上指定第二个参数。

    sum(m,2)
    
    ans =
         6
        15
        24
    

    如果要获取对角线的和,可以使用diag函数先得到对角线矢量。

    diag(m)
    
    ans =
         1
         5
         9
    

    如果要得到反对角线,Matlab没有提供直接方法。不过我们可以利用fliplr函数先对矩阵进行左右翻转,然后再求对角线。

    diag(fliplr(m))
    
    ans =
         3
         5
         7
    

    有一种特殊的矩阵叫做幻方,这种矩阵各行、各列、以及两条对角线的和都是相同的。Matlab内置了函数magic,可以生成指定维度的幻方。

    % 幻方
    disp('----------幻方------------')
    m = magic(3)
    disp('各行的和:')
    sum(m,2)
    disp('各列的和:')
    sum(m)
    disp('对角线的和:')
    sum(diag(m))
    sum(diag(fliplr(m)))
    

    文本和字符

    字符串使用单引号包括,如果字符串内部也有单引号,使用两个连续的单引号。

    % 文本和字符
    text = 'This is a ''special'' date'
    
    text =
        'This is a 'special' date'
    

    如果要查看变量类型的话,可以使用whos命令。

    % 查看变量类型
    whos text
    
      Name      Size            Bytes  Class    Attributes
      text      1x24               48  char  
    

    连接字符串使用方括号将要连接的字符串括在一起。

    % 连接字符串
    hello = 'How are you ?'
    [text, '. ', hello]
    
    ans =
        'This is a 'special' date. How are you ?'
    

    字符和数字之间也可以互相转换。

    % 字符与数字转换
    c = '1'
    n = 1
    num2str(n)
    str2num(c)
    

    编程

    条件语句

    下面是Matlab中if语句的例子,生成一个随机数并判断在哪个区间中。

    % 条件语句
    N = 0.5
    n = rand
    if n < N
        disp('n < .5')
    elseif n < .3
        disp('n <.3')
    else
        disp('other')
    end
    

    然后是switch语句的例子。

    % switch语句
    n = 3
    switch(n)
        case {1,2}
            disp('n = 1 or 2')
        case {3,4,5}
            disp('n is 3,4,5')
        otherwise
            disp('other case')
    end
    

    循环语句

    首先是for循环。

    % for循环
    for i = 1:5
        disp(i)
    end
    

    然后是while循环。

    % while循环
    n = 1
    while n < 10
        n = n + 1
    end
    

    格式化

    format函数可以控制数据如何在Matlab中显示。

    % 格式化
    a = [1/3 .1111]
    
    format short
    a
    format long
    a
    format bank 
    a
    format short e
    a
    format rat
    a
    format hex
    a
    
    a =
        0.3333    0.1111
    
    a =
       0.333333333333333   0.111100000000000
    
    a =
              0.33          0.11
    
    a =
       3.3333e-01   1.1110e-01
    
    a =
           1/3         1111/10000 
    
    a =
       3fd5555555555555   3fbc710cb295e9e2
    

    每行Matlab代码在执行的时候都会在命令窗口中显示输出,在大型程序中会导致代码输出很乱。我们可以通过在代码后面添加分号来提示Matlab不要输出。

    % 取消输出
    longMatrix = [0:1000];
    

    如果代码太长,可以将代码分成几行来编写,在需要分行的代码末尾添加三个点号即可。

    % 长语句
    longStatement = 1+2+3+4 ...
        +5+6+7+8+9
    

    绘图

    二维图

    绘制二维图很简单,只要提供x和y的数值即可。下面是绘制-2π到2π的正弦图像的例子。

    % 二维图
    x = [-2*pi:pi/100:2*pi]
    y = sin(x)
    plot(x,y)
    

    会弹出下图所示的图形窗口。

    正弦图像

    为提高可读性还可以添加一些注释。

    % 添加注释
    xlabel('x')
    ylabel('sin(x)')
    title('-2π到2π间的正弦图像')
    
    图形注释

    每次调用plot函数都会重新绘图,如果想在已有的图表上画新图形,需要使用hold on命令。在调用hold off命令之前,所有图表都会添加到已有的图形上。plot函数的第三个参数可以指定画图线条的颜色和形状,颜色使用RGB等字母指定,形状会使用所给定的字符绘制线条。

    % 图像都画在一张图上
    hold on 
    
    y = cos(x)
    plot(x,y,'g--')
    
    绿色虚线绘图

    三维图

    三维图形的绘制也是类似的,首先用meshgrid函数生成一个区域的点集,然后指定z与xy的关系。绘制三维图有两个函数,surf函数会用颜色填充三维图形的面。而mesh函数只会填充线条。这里为了方便显示使用subplot函数绘制子图,该函数前两个参数指定子图的行数和列数,第三个参数指定要画的子图顺序。调用该函数之后,可以调用实际绘图函数来绘图。

    % -------------三维图-------------
    
    % 生成x,y点集
    [x,y] = meshgrid(-10:.5:10)
    % 指定函数
    z = x.^2 + y
    
    % 绘制三维图
    subplot(2,1,1)
    surf(x,y,z)
    title('surf绘图')
    
    subplot(2,1,2)
    mesh(x,y,z)
    title('mesh绘图')
    

    上面的代码会显示类似下面的图像。

    三维图形

    帮助

    Matlab有比较完善的中文帮助,按F1即可打开帮助。

    帮助文档

    如果想了解某个App的功能,可以直接在命令窗口中输入help appname来获得相关函数信息。

    >> help stats
      Statistics and Machine Learning Toolbox
      Version 11.2 (R2017b) 24-Jul-2017
     
      Distributions.
       Parameter estimation.
        betafit     - Beta parameter estimation.
        binofit     - Binomial parameter estimation.
        distributionFitter - Distribution fitting app.
        evfit       - Extreme value parameter estimation.
        expfit      - Exponential parameter estimation.
    ...
    

    如果希望了解某个函数的详细信息,可以用doc 函数名来查阅文档,例如doc max就会列出max函数的详细文档。

    函数文档

    以上就是Matlab的一点知识了,希望可以让没有使用过Matlab的同学对它有一个大致了解。当然这里列出的功能仅仅是Matlab的冰山一角。在安装Matlab的时候我们可以看到它有非常丰富的组件,每一个组件都包含了专业领域大量的函数和功能,只有深入了解之后才会体会到Matlab的强大之处。有兴趣的同学可以深入了解。

    相关文章

      网友评论

        本文标题:Matlab R2017b快速入门

        本文链接:https://www.haomeiwen.com/subject/dqgrgxtx.html