Matlab R2017a快速入门

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

程序界面

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

数据类型

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

矩阵和数组

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

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

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

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

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

% 创建矩阵
m0 = zeros(3,3)
m1 = ones(3,3)
m2 = rand(3,3)
m3 = randn(3,3)
  • 1
  • 2
  • 3
  • 4
  • 5

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

% 转置矩阵
m = m'
  • 1
  • 2

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

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

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

% 矩阵运算
a
a*3
a+a
a*a
a.*a
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果如下。

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

索引运算

有时候可能需要对数组或矩阵中某些值进行计算,这时候可以利用索引运算进行。如果尝试访问矩阵中不存在的元素,会导致错误。不过如果是对不存在的元素赋值,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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

如果需要访问多行或多列,使用冒号运算符。下面分别获取了矩阵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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

m = [0:10:100]

m =
     0    10    20    30    40    50    60    70    80    90   100
  • 1
  • 2
  • 3
  • 4

矩阵计算

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

sum(m,2)

ans =
     6
    15
    24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

diag(m)

ans =
     1
     5
     9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

diag(fliplr(m))

ans =
     3
     5
     7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

% 幻方
disp('----------幻方------------')
m = magic(3)
disp('各行的和:')
sum(m,2)
disp('各列的和:')
sum(m)
disp('对角线的和:')
sum(diag(m))
sum(diag(fliplr(m)))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

文本和字符

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

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

text =
    'This is a 'special' date'
  • 1
  • 2
  • 3
  • 4
  • 5

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

% 查看变量类型
whos text

  Name      Size            Bytes  Class    Attributes
  text      1x24               48  char  
  • 1
  • 2
  • 3
  • 4
  • 5

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

% 连接字符串
hello = 'How are you ?'
[text, '. ', hello]

ans =
    'This is a 'special' date. How are you ?'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

% 字符与数字转换
c = '1'
n = 1
num2str(n)
str2num(c)
  • 1
  • 2
  • 3
  • 4
  • 5

编程

条件语句

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

% 条件语句
N = 0.5
n = rand
if n < N
    disp('n < .5')
elseif n < .3
    disp('n <.3')
else
    disp('other')
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

然后是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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

循环语句

首先是for循环。

% for循环
for i = 1:5
    disp(i)
end
  • 1
  • 2
  • 3
  • 4

然后是while循环。

% while循环
n = 1
while n < 10
    n = n + 1
end
  • 1
  • 2
  • 3
  • 4
  • 5

格式化

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

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

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

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

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

绘图

二维图

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

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

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

正弦图像

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

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

图形注释

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

% 图像都画在一张图上
hold on 

y = cos(x)
plot(x,y,'g--')
  • 1
  • 2
  • 3
  • 4
  • 5

绿色虚线绘图

三维图

三维图形的绘制也是类似的,首先用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绘图')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

三维图形

帮助

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.
...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

函数文档

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

阅读更多
换一批

没有更多推荐了,返回首页