初识MATLAB

1. MATLAB是什么?

初识MATLAB

MATLAB,是“matrix laboratory”的缩写形式,意思是矩阵实验室。MATLAB是在1984年由一个大学生把数学课的教学课件重新编程设计出来的一个产品,很多人都把MATLAB看做是一个计算机软件,是一种用于算法开发、数据分析、可视化和数值计算的编程环境。MATLAB一个重要优势就是封装了大量数学相关的算法函数,工程师和科学家可以很方便的调用而不必重新编写。MATLAB同时也是一种非常受欢迎的编程语言,简称M语言,工程师可以用它来编写各种科学技术程序,甚至可以将编写的程序发布成独立的APP供他人使用。

MATLAB的应用非常广泛,可以说涉及到工业和科学领域的方方面面,在航空、航天、汽车、电子、能源、金融、大数据和人工智能等各个行业中,MATLAB都被工程师和科学家广泛应用。究其原因,我想还是MATLAB与生俱来的数学基因使它可以在各个工业和科学领域发挥作用,毕竟无论你是研究天体物理学,还是开发一个机器人,最终还是会落到数学的解算上来。

2. MATLAB软件界面

如果把MATLAB看做是一个计算机软件,那就要了解下MATLAB的界面。启动MATLAB时,会打开MATLAB主界面,默认布局下包括下列面板:

当前文件夹:MATLAB中的文件浏览器,定位在当前工作的文件夹。命令行窗口:是输入MATLAB命令的区域,命令前面以提示符 (>>) 表示。工作区:Workspace,创建或者导入的数据都以变量的形式存显示在工作区。
初识MATLAB

3. MATLAB语言初探

矩阵和数组

MATLAB作为一种编程语言,M语言,和C语言或者其它语言相比,有一个最大的不同,那就是所有 MATLAB 变量都是多维数组,与数据类型无关。这也是很多熟悉了C语言编程的工程师很难转变的一种编程习惯。MATLAB 主要用于处理整个的矩阵和数组,而其他编程语言大多逐个处理数值。矩阵作为MATLAB变量的一种常见形式,是指通常用来进行线性代数运算的二维数组。

创建数组

试着创建第一个数组,包含四个元素,可以使用逗号(,)或者空格分开。

a = [1 2 3 4]

a = 1×4

1 2 3 4

这种数组叫做行向量。

如果要创建包含多行的矩阵,则用分号(;)来分割各行。

a = [1 2 3; 4 5 6; 7 8 10]

a = 3×3

1 2 3

4 5 6

7 8 10

创建矩阵还可以使用一些内置函数(ones、zeros 或 rand 等函数)来自动创建。例如,创建一个由随机整数组成的 5×1 列向量。

b = randi(100,5,1)

b = 5×1

62

59

55

87

27

数组索引

MATLAB的每个变量都是可以包含多个数字的数组,要访问数组中的元素,需要使用数组索引。

使用内置魔方矩阵函数创建一个 4×4 的矩阵。

A = magic(4)

A = 4×4

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

对于数组而言,其中的每个元素都有一个唯一的索引,可以理解为地图上某个位置点的坐标。有两种方式引用数组中的特定元素,最常使用的方法是指定行和列的下标。

A(3,2)
ans = 7

另一种方法不太常用,就是使用单一下标按顺序向下遍历每一列。使用单一下标引用数组中特定元素的方法称为线性索引。

A(11)
ans = 6

比较下面两行代码看看有何不同。

B = A(4,5) %Index in position 2 exceeds array bounds (must not exceed 4). A(4,5) = 17

A = 4×5

16 2 3 13 0

5 11 10 8 0

9 7 6 12 0

4 14 15 1 17

如果将数组外的元素赋值给某个变量,MATLAB会引发错误。如果将某个常数赋值给数组外的元素,则数组的大小会自动增大,用来容纳新增的元素。能理解下面的代码吗?

C(4,3) = 6

C = 4×3

0 0 0

0 0 0

0 0 0

0 0 6

如果要引用数组的多个元素,可以使用冒号(:)运算符,用来指定格式为(起始值:结束值)的范围。例如:列出数组A前三行第二列的所有元素:

A(1:3,2)

ans = 3×1

2

11

7

单独的冒号(没有起始值或结束值)则可以指定该维中的所有元素。例如,列出数组A 第三行中的所有列:

A(3,:)

ans = 1×5

9 7 6 12 0

此外,冒号运算符还可以使用较通用的格式 start:step:end 创建等距向量值。如果省略step参数,则默认步长为1。

B = 0:10:100

B = 1×11

0 10 20 30 40 50 60 70 80 90 100

数组运算

MATLAB的变量都是以数组形式存在的,在MATLAB中可以使用一个数学运算符或者函数来处理矩阵中的所有元素。

a + 10 %对矩阵a中每个元素加10

ans = 3×3

11 12 13

14 15 16

17 18 20
sin(a) %计算矩阵a中每个元素的正弦值

ans = 3×3

0.8415 0.9093 0.1411

-0.7568 -0.9589 -0.2794

0.6570 0.9894 -0.5440
a %求矩阵a的转置矩阵

ans = 3×3

1 4 7

2 5 8

3 6 10

因为MATLAB中的变量都是矩阵,所以变量间的运算都是矩阵运算,那么矩阵乘除就必须符合[a,b]*[b,a]的格式。

m = rand(2,3)

m = 2×3

0.3181 0.9398 0.4795

0.1192 0.6456 0.6393
n = rand(3,2)

n = 3×2

0.5447 0.7210

0.6473 0.5225

0.5439 0.9937
m * n

ans = 2×2

1.0424 1.1968

0.8305 1.0585

如果两个矩阵的具有相同行列数,那么两个矩阵相加的结果则是矩阵中对应位置的元素分别相加后得到新矩阵。如果希望两个矩阵对应位置上的元素分别相乘或相除得到一个新矩阵,该如何计算呢?这就要引出MATLAB中一个独有的点运算符,如(.*)。乘法、除法和幂的矩阵运算符都可以使用点运算符。

a.*a

ans = 3×3

1 4 9

16 25 36

49 64 100
a./a

ans = 3×3

1 1 1

1 1 1

1 1 1
a.^2

ans = 3×3

1 4 9

16 25 36

49 64 100

数组串联

串联是连接数组以便形成更大数组的过程。实际上,第一个数组是通过将其各个元素串联起来而构成的。成对的方括号[] 即为串联运算符。

A = [a, a]

A = 3×6

1 2 3 1 2 3

4 5 6 4 5 6

7 8 10 7 8 10

使用逗号将彼此相邻的数组串联起来称为水平串联。每个数组必须具有相同的行数。同样,如果各数组具有相同的列数,则可以使用分号垂直串联。

A = [a; a]

A = 6×3

1 2 3

4 5 6

7 8 10

1 2 3

4 5 6

7 8 10

文本和字符

字符串数组中的文本

MATLAB中可以将字符序列加上双引号赋值给变量。

t = “Hello, world”
t = “Hello, world”

如果文本中本身就包含双引号,在定义的时候使用两个双引号。

q = “MATLAB is a good engineering “”Knife”””
q = “MATLAB is a good engineering “Knife””

MATLAB中所有的变量都是数组,所以t和q也都是数组,数据类型是string。使用命令whos可以查看变量的信息。

whos t
Name Size Bytes Class Attributes t 1×1 166 string

要将文本添加到字符串的末尾,请使用加号运算符 +。

f = 71; c = (f-32)/1.8; tempText = “Temperature is ” + c + “C”
tempText = “Temperature is 21.6667C”

与数值数组类似,字符串数组可以有多个元素。使用 strlength 函数可以求数组中每个字符串的长度。

A = [“a”,”bb”,”ccc”; “dddd”,”eeeeee”,”fffffff”]

A = 2×3 string array

“a” “bb” “ccc”

“dddd” “eeeeee” “fffffff”
strlength(A)

ans = 2×3

1 2 3

4 6 7

字符数组中的数据

有时,字符表示的数据并不一定对应到文本,例如 DNA 序列。此类数据可以存储在数据类型为 char 的字符数组中。字符数组使用单引号,数组的每个元素都包含单个字符。

seq = GCTAGAATCC; whos seq
Name Size Bytes Class Attributes seq 1×10 20 char
seq(4)
ans = A

使用方括号串联字符数组,就像串联数值数组一样。

seq2 = [seq ATTAGAAACC]
seq2 = GCTAGAATCCATTAGAAACC

4. MATLAB科学绘图

二维图:线图

MATLAB中最常用的绘图函数是plot。例如,绘制从0到2π之间的正弦函数值。

x = 0:pi/100:2*pi; y = sin(x); plot(x,y)
初识MATLAB

MATLAB的绘图功能非常强大,可以标记坐标轴并添加标题。

plot(x,y) xlabel(x) ylabel(sin(x)) title(正弦函数制图)
初识MATLAB

通过向 plot 函数添加第三个输入参数,您可以使用红色虚线绘制相同的变量。

plot(x,y,r–)
初识MATLAB

r– 为plot函数的参数,设定线条的颜色和线型。plot的参数设定可以包含表示线条颜色、线型和标记的字符。标记是在绘制的每个数据点上显示的符号,例如,+、o 或 *。例如,g:* 表示绘制使用 * 标记的绿色点线。

默认情况下,每次调用绘图函数、重置坐标区及其他元素以准备新绘图时,MATLAB都会清空绘图窗。要将绘图添加到当前图窗中,可以使用 hold on命令,在使用 hold off 或关闭窗口之前,所绘制的新图形都会显示在当前图窗中。

x = 0:pi/100:2*pi; y = sin(x); plot(x,y)hold ony2 = cos(x); plot(x,y2,:) legend(sin,cos)hold off
初识MATLAB

三维图:曲面

三维图通常显示一个由带两个变量的函数(即 z = f (x,y))定义的曲面图。要计算 z,可以先使用 meshgrid 在此函数的域中创建一组 (x,y) 点,然后绘制曲面图。

[X,Y] = meshgrid(-2:.2:2); Z = X .* exp(-X.^2 – Y.^2); surf(X,Y,Z)
初识MATLAB

函数surf 和 mesh都是以三维形式显示曲面图。surf 使用不同颜色绘制曲面图的连接线和面。mesh 仅以颜色绘制线框曲面图连接线。

[X,Y] = meshgrid(-2:.2:2); Z = X .* exp(-X.^2 – Y.^2); mesh(X,Y,Z)
初识MATLAB

子图

使用 subplot 函数可以在同一窗口的不同子区域显示多个绘图。subplot 的前两个输入表示每行和每列中的绘图数,第三个输入指定绘图是否处于活动状态。例如,在图窗窗口的 2×2 网格中创建四个绘图。

t = 0:pi/10:2*pi; [X,Y,Z] = cylinder(4*cos(t)); subplot(2,2,1); mesh(X); title(X); subplot(2,2,2); mesh(Y); title(Y); subplot(2,2,3); mesh(Z); title(Z); subplot(2,2,4); surf(X,Y,Z); title(X,Y,Z);
初识MATLAB

5. MATLAB帮助文档

如果要学好用好MATLAB,那就一定要熟练使用MATLAB的帮助文档,也许这是我见过的最详细的技术帮助文档了。所有 MATLAB函数都有辅助文档,这些文档包含一些示例,并介绍函数输入、输出和调用语法。从命令行访问此信息有多种方法:

使用 doc 命令在单独的窗口中打开函数文档。
doc mean
在键入函数输入参数的左括号之后暂停,此时命令行窗口中会显示相应函数的提示(函数文档的语法部分)。
mean(
使用 help 命令可在命令行窗口中查看相应函数的简明文档。
help mean
mean – 数组的均值 此 MATLAB 函数 返回 A 沿大小不等于 1 的第一个数组维度的元素的均值。 M = mean(A) M = mean(A,all) M = mean(A,dim) M = mean(A,vecdim) M = mean(___,outtype) M = mean(___,nanflag) See also median, mode, std, sum, var Documentation for mean Other functions named mean

马上点击帮助图标,开始奇妙的MATLAB旅程吧!

免责声明:文章内容来自互联网,本站仅提供信息存储空间服务,真实性请自行鉴别,本站不承担任何责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:初识MATLAB https://www.zentong.com/a/p/69955.html

(0)
上一篇 2023-05-20 13:16:42
下一篇 2023-05-20 13:18:29

猜你喜欢

联系我们

在线咨询: QQ交谈

邮件:362039258#qq.com(把#换成@)

工作时间:周一至周五,10:30-16:30,节假日休息。