Matlab R2017b快速入门

久闻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的强大之处。有兴趣的同学可以深入了解。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • 显示中文帮助的方法 预设→常规→帮助→在mathworks.com网站上(需要Internet连接)→语言(简体中...
    VeyronC阅读 2,458评论 0 34
  • 来源:NumPy Tutorial - TutorialsPoint 译者:飞龙 协议:CC BY-NC-SA 4...
    布客飞龙阅读 32,743评论 6 96
  • MATLAB基本数据类型 双精度/单精度/整形 数据的范围 务必注意溢出的问题。 函数 类型检查 class is...
    hainingwyx阅读 5,662评论 0 6
  • 看了标题,很多人都会迷茫,这篇是什么,这是一篇游记,对,你没有听错,这是一篇游记、游记、记,重要的事情说三遍。...
    阿Joyo阅读 386评论 2 1
  • 饮尽这杯浊酒 我将告别这里 那里 不再寻找你的身影 踏上七月的霞光 信马随风流浪 北方的麦地打出一口深井 只是苦涩...
    带路阅读 249评论 1 3