前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab R2017b快速入门

Matlab R2017b快速入门

作者头像
乐百川
发布2019-05-27 11:11:46
1.3K0
发布2019-05-27 11:11:46
举报
文章被收录于专栏:乐百川的学习频道

版权声明:本文为博主原创文章,转载请注明出处。 https://cloud.tencent.com/developer/article/1436502

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

程序界面

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

数据类型

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

矩阵和数组

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

代码语言:javascript
复制
% 数组
array1 = [1,2,3,4,5]
array2 = [1 3 5 9 7]

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

代码语言:javascript
复制
m = [1,2,3; 4,5,6; 7,8,9]

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

代码语言:javascript
复制
% 创建矩阵
m0 = zeros(3,3)
m1 = ones(3,3)
m2 = rand(3,3)
m3 = randn(3,3)

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

代码语言:javascript
复制
% 转置矩阵
m = m'

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

代码语言:javascript
复制
% 水平串联和垂直串联
n = zeros(3,3)
[m,n]
[m;n]

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

代码语言:javascript
复制
% 矩阵运算
a
a*3
a+a
a*a
a.*a

结果如下。

代码语言:javascript
复制
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.

代码语言:javascript
复制
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列的元素,以及第三行的所有元素。

代码语言:javascript
复制
>> a(2:4,1:3)
ans =
     4     5     6
     7     7     8
     0     0     0

>> a(3,:)
ans =
     7     7     8     0

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

代码语言:javascript
复制
m = [0:10:100]

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

矩阵计算

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

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

代码语言:javascript
复制
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函数上指定第二个参数。

代码语言:javascript
复制
sum(m,2)

ans =
     6
    15
    24

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

代码语言:javascript
复制
diag(m)

ans =
     1
     5
     9

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

代码语言:javascript
复制
diag(fliplr(m))

ans =
     3
     5
     7

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

代码语言:javascript
复制
% 幻方
disp('----------幻方------------')
m = magic(3)
disp('各行的和:')
sum(m,2)
disp('各列的和:')
sum(m)
disp('对角线的和:')
sum(diag(m))
sum(diag(fliplr(m)))

文本和字符

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

代码语言:javascript
复制
% 文本和字符
text = 'This is a ''special'' date'

text =
    'This is a 'special' date'

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

代码语言:javascript
复制
% 查看变量类型
whos text

  Name      Size            Bytes  Class    Attributes
  text      1x24               48  char  

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

代码语言:javascript
复制
% 连接字符串
hello = 'How are you ?'
[text, '. ', hello]

ans =
    'This is a 'special' date. How are you ?'

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

代码语言:javascript
复制
% 字符与数字转换
c = '1'
n = 1
num2str(n)
str2num(c)

编程

条件语句

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

代码语言:javascript
复制
% 条件语句
N = 0.5
n = rand
if n < N
    disp('n < .5')
elseif n < .3
    disp('n <.3')
else
    disp('other')
end

然后是switch语句的例子。

代码语言:javascript
复制
% 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循环。

代码语言:javascript
复制
% for循环
for i = 1:5
    disp(i)
end

然后是while循环。

代码语言:javascript
复制
% while循环
n = 1
while n < 10
    n = n + 1
end

格式化

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

代码语言:javascript
复制
% 格式化
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不要输出。

代码语言:javascript
复制
% 取消输出
longMatrix = [0:1000];

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

代码语言:javascript
复制
% 长语句
longStatement = 1+2+3+4 ...
    +5+6+7+8+9

绘图

二维图

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

代码语言:javascript
复制
% 二维图
x = [-2*pi:pi/100:2*pi]
y = sin(x)
plot(x,y)

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

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

代码语言:javascript
复制
% 添加注释
xlabel('x')
ylabel('sin(x)')
title('-2π到2π间的正弦图像')

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

代码语言:javascript
复制
% 图像都画在一张图上
hold on 

y = cos(x)
plot(x,y,'g--')

三维图

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

代码语言:javascript
复制
% -------------三维图-------------

% 生成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来获得相关函数信息。

代码语言:javascript
复制
>> 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的强大之处。有兴趣的同学可以深入了解。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年01月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 程序界面
  • 数据类型
    • 矩阵和数组
      • 索引运算
        • 矩阵计算
          • 文本和字符
          • 编程
            • 条件语句
              • 循环语句
                • 格式化
                • 绘图
                  • 二维图
                    • 三维图
                    • 帮助
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档