MATLAB基本语法详解

MATLAB基本语法详解

下面内容 :变量、M-Files、决策、循环容易掌握

命令、数据类型、运算符不需要记住,用了再查

变量

每个MatLab变量可以是数组或者矩阵

最简单的方法指定变量

x = 3   % 定义并初始化(赋值)变量x

MATLAB上执行上述语句

image-20210814170447906

上面的例子,创建了一个1-1名为x的矩阵,并将值存在其元素中

再执行

x = sqrt(16) % 定义x,并把表达式赋给x

image-20210814170646584

MATLAB注意事项:

在使用变量之前、必须先给变量赋值(即 int a = 1;不能int a;)

不能像C语言一样,可以只定义变量而不给变量赋值(也叫初始化)

例如:

x = 7*8;

y=x*1.123

image-20210814170744501

当表达式返回一个结果,我们没有分配给任意变量,系统自动分配一个变量名ans存储这个结果

例如:

sqrt(78)

MATLAB上执行上面的语句,并返回以下结果

image-20210814170817642

变量ans还可以继续被使用

9876/ans

image-20210814170847615

键入cls 清屏

image-20210814170941713

键入clear 清除工作区中的所有变量

image-20210814171022524

MATLAB可以多个赋值

多个任务可以在同一行,例如:

a = 2; b = 7; c = a*b

image-20210814171045145

MATLAB显示以及使用的变量名

在MATLAB中使用who命令显示已经使用过的变量名

who

image-20210814171111790

whos 命令则显示多一点有关变量:

  • 当前内存中的变量
  • 每个变量的类型
  • 内存分配给每个变量
  • 无论他们是复杂的变量与否

whos

image-20210814171134226

删除内存中的使用过的变量
clear x %删除变量x
clear   %删除所有已经使用过的变量

image-20210814171235498

长任务

长任务可以用过省略号(…)延伸到另一条线路(另一行?换行输出、不执行)

a = 0; acc = 9.8; time = 20;
re = a ...
	+ acc*time

image-20210814171340647

MATLAB格式命令

默认情况下,MATLAB 四个小数位值显示数字。这就是所谓的 short format.

如果想更精确,需要使用 format 命令。

  • 长(long ) 命令格式显示小数点后16位。
format long
x = 7 + 10/3 + 5^1.2

image-20210814171421400

  • format short :
format short
x = 7 + 10/3 + 5^1.2

image-20210814171508381

  • 空格格式命令回合到小数点后两位数字。例如:
format bank
daily_wage = 177.45;
weekly_wage = daily_wage * 6

image-20210814171643799

MATLAB 显示大量使用指数表示法。

  • 短格式e命令允许以指数的形式显示小数点后四位,加上指数。
format short e
4.678 * 4.9

image-20210814171732100

  • format long e命令允许以指数的形式显示小数点后十六位,加上指数。例如:
format long e
x = pi

image-20210814171823570

format rat格式大数命令给出最接近的有理表达式,从计算所得。例如:

format rat
4.678 * 4.9

image-20210814171901899

format 格式标识符 即 数的表现形式

MATLAB创建向量

向量是一维数组中的数字。 MATLAB允许创建两种类型的矢量:

  • 行向量
  • 列向量

创建行向量括在方括号中的元素的集合,用空格或逗号分隔的元素。

例如

r = [1 2 3 4 5]
t = [1,2,3,4,5]

image-20210814171957727

res = r +t

image-20210814172020984

创建列向量通过内附组方括号中的元素,使用分号**(😉**分隔的元素。

c = [5;6;7;8;9]

image-20210814172058592

MATLAB创建矩阵

矩阵是一个二维数字阵列。

在MATLAB中,创建一个矩阵每行输入空格或逗号分隔的元素序列,最后一排被划定一个分号。

例如,下面创建了一个3×3的矩阵:

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

image-20210814172131220

命令

一些常用的MATLAB命令

需用需找:不需要特意记住,有需要再查找

MATLAB数值计算和数据可视化是一个交互式程序,在它的命令窗口中您可以在MATLAB提示符“>>”下键入命令。

MATLAB管理会话的命令

MATLAB提供管理会话的各种命令。如下表所示:

命令目的/作用
clc清除命令窗口。
clear从内存中删除变量。
exist检查存在的文件或变量。
global声明变量为全局。
help搜索帮助主题。
lookfor搜索帮助关键字条目。
quit停止MATLAB。
who列出当前变量。
whos列出当前变量(长显示)。
MATLAB的系统命令

使用MATLAB的时候有一些系统命令可以方便我们的操作,如在当前的工作区中可以使用系统命令保存为一个文件、加载文件、显示日期、列出目录中的文件和显示当前目录等。

命令目的/作用
cd改变当前目录。
date显示当前日期。
delete删除一个文件。
diary日记文件记录开/关切换。
dir列出当前目录中的所有文件。
load负载工作区从一个文件中的变量。
path显示搜索路径。
pwd显示当前目录。
save保存在一个文件中的工作区变量。
type显示一个文件的内容。
what列出所有MATLAB文件在当前目录中。
wklread读取.wk1电子表格文件。
MATLAB输入和输出命令

MATLAB提供了以下输入和输出相关的命令:

命令作用/目的
disp显示一个数组或字符串的内容。
fscanf阅读从文件格式的数据。
format控制屏幕显示的格式。
fprintf执行格式化写入到屏幕或文件。
input显示提示并等待输入。
;禁止显示网版印刷

fscanf和fprintf命令的行为像C scanf和printf函数。他们支持格式如下代码:

格式代码目的/作用
%s输出字符串
%d输出整数
%f输出浮点数
%e显示科学计数法形式
%g%f 和%e 的结合,根据数据选择适当的显示方式

用于数字显示格式的函数有以下几种形式:

Format函数最多可显示
format short四位十进制数(默认)
format long15位定点表示
format short e五位浮点表示
format long e15位浮点表示
format bank两个十进制数字
format +正,负或零
format rat有理数近似
format compact变量之间没有空行
format loose变量之间有空行
MATLAB向量、矩阵和阵列命令
命令作用/目的
cat连接数组
find查找非零元素的索引
length计算元素数量
linspace创建间隔向量
logspace创建对数间隔向量
max返回最大元素
min返回最小元素
prod计算数组元素的连乘积
reshape重新调整矩阵的行数、列数、维数
size计算数组大小
sort排序每个列
sum每列相加
eye创建一个单位矩阵
ones生成全1矩阵
zeros生成零矩阵
cross计算矩阵交叉乘积
dot计算矩阵点积
det计算数组的行列式
inv计算矩阵的逆
pinv计算矩阵的伪逆
rank计算矩阵的秩
rref将矩阵化成行最简形
cell创建单元数组
celldisp显示单元数组
cellplot显示单元数组的图形表示
num2cell将数值阵列转化为异质阵列
deal匹配输入和输出列表
iscell判断是否为元胞类型
MATLAB绘图命令
命令作用/目的
axis人工选择坐标轴尺寸
fplot智能绘图功能
grid显示网格线
plot生成XY图
print打印或绘图到文件
title把文字置于顶部
xlabel将文本标签添加到x轴
ylabel将文本标签添加到y轴
axes创建轴对象
close关闭当前的绘图
close all关闭所有绘图
figure打开一个新的图形窗口
gtext通过鼠标在指定位置放注文
hold保持当前图形
legend鼠标放置图例
refresh重新绘制当前图形窗口
set指定对象的属性,如轴
subplot在子窗口中创建图
text在图上做标记
bar创建条形图
loglog创建双对数图
polar创建极坐标图像
semilogx创建半对数图(对数横坐标)
semilogy创建半对数图(对数纵坐标)
stairs创建阶梯图
stem创建针状图
MATLAB M-Files

上面的内容把MATLAB当做是个计算器,输入–>计算–>输出

MATLAB还可以直接运行文件(脚本)

MATLAB的M文件

MATLAB允许两种程序文件:

  • 脚本 - 脚本文件 .m 扩展程序文件。在这些文件中写的一系列命令,想一起执行。脚本不接受输入和不返回任何输出。他们在工作区中的数据操作。
  • 函数 - 函数文件 .m 扩展程序文件。函数可以接受输入和返回输出。内部变量是本地的函数。

.m 文件不一定要使用 MATLAB 编辑器创建,其他任何的文本编辑器也是可以的(例如:test.txt修改后缀为testm亦可)。

MATLAB 命令和函数调用的脚本文件包含多个连续的行。

要运行一个脚本时,在命令行中键入其名称。

MATLAB创建并运行脚本文件

创建脚本文件,需要使用文本编辑器。可以打开 MATLAB 编辑器,可使用两个方法:

  • 使用命令提示符
  • 使用IDE

如果是在命令提示符下使用命令提示符下,键入编辑。这将打开编辑器。可以直接键入编辑,然后在保存文件名( .m 扩展程序文件名)

键入:edit

image-20210814172516956

ctrl +s 保存,输入文件名( .m 扩展程序文件名)

或者键入:edit 文件名

image-20210814172710519

上面俩个命令,将在默认文件夹中创建文件

如需自定义

键入:

mkdir test01 (创建文件夹 mk->make, dir->目录)

chdir test01(改变当前路径 ch->改变,dir->目录即路径)

edit test01.m (这三命令,需要把创建文件归类时使用)

当然也可直接在界面,点击图标,创建文件

image-20210814173221246

创建好文件,即可在文件中写入语句

image-20210814173411104

注意每行末尾有分号

保存后有两中方法运行这个文件

image-20210814173528401

点击图标运行

或者在命令提示符下键入文件名(不含扩展名.m):>> haha

image-20210814173729391

再来个例子

创建一个脚本文件xixi

image-20210814174001303

这里看见变量后面没有分号滴,都被输出了。输出格式为真分数,应当是之前设置的格式,现在还在沿用。

另设置一哈格式,以及只需要输出最后一个变量f

image-20210814174343624

数据类型

这里内容不需要记住,需要用到,再查找即可

默认情况下,MATLAB 存储所有数值变量为双精度浮点值。其他数据类型存储文本,整数或单精度值或单个变量中相关数据的组合。

MATLAB不需要任何类型声明或维度语句。当MATLAB遇到新的变量名称时,它将创建变量并分配适当的内存空间。

如果变量已经存在,则MATLAB将使用新内容替换原始内容,并在必要时分配新的存储空间。

total = 136

上述语句创建一个名为total1x1矩阵,并将值136存储在其中。

MATLAB数据类型

ATLAB提供15种基本数据类型,分别是8种整型数据、单精度浮点型、双精度浮点型、逻辑型、字符串型、单元数组、结构体类型和函数句柄。每种数据类型存储矩阵或数组形式的数据。矩阵或数组的最小值是00,并且是可以到任何大小的矩阵或数组。

下表显示了MATLAB中最常用的数据类型:

数据类型描述
int88位有符号整数
uint88位无符号整数
int1616位有符号整数
uint1616位无符号整数
int3232位有符号整数
uint3232位无符号整数
int6464位有符号整数
uint6464位无符号整数
single单精度数值数据
double双精度数值数据
logical逻辑值为10,分别代表truefalse
char字符数据(字符串作为字符向量存储)
单元格阵列索引单元阵列,每个都能够存储不同维数和数据类型的数组
结构体C型结构,每个结构具有能够存储不同维数和数据类型的数组的命名字段
函数处理指向一个函数的指针
用户类用户定义的类构造的对象
Java类从Java类构造的对象

示例

这里我创建了一个新的文件夹,用来保存次示例脚本

image-20210814174930234

image-20210814175023091

可见输出有些变量时,顺带输出了变量的数据类型

数据类型之间可以转换

数据类型装换

不需要记、需用需查

MATLAB提供了各种用于将一种数据类型转换为另一种数据类型的函数。 下表显示了数据类型转换函数:

函数描述说明
char转换为字符数组(字符串)
int2str将整数数据转换为字符串
mat2str将矩阵转换为字符串
num2str将数字转换为字符串
str2double将字符串转换为双精度值
str2num将字符串转换为数字
native2unicode将数字字节转换为Unicode字符
unicode2native将Unicode字符转换为数字字节
base2dec将基数N字符串转换为十进制数
bin2dec将二进制数字串转换为十进制数
dec2base将十进制转换为字符串中的N数字
dec2bin将十进制转换为字符串中的二进制数
dec2hex将十进制转换为十六进制数字
hex2dec将十六进制数字字符串转换为十进制数
hex2num将十六进制数字字符串转换为双精度数字
num2hex将单数转换为IEEE十六进制字符串
cell2mat将单元格数组转换为数组
cell2struct将单元格数组转换为结构数组
cellstr从字符数组创建字符串数组
mat2cell将数组转换为具有潜在不同大小的单元格的单元阵列
num2cell将数组转换为具有一致大小的单元格的单元阵列
struct2cell将结构转换为单元格数组

这里可以看见,数据类型做转换前,得知道被被转化的变量的当前的数据类型

数据类型确定

不需要记,需用需查

MATLAB提供了用于识别变量数据类型的各种函数。

下表提供了确定变量数据类型的函数:

函数描述说明
is检测状态
isa确定输入是否是指定类的对象
iscell确定输入是单元格数组
iscellstr确定输入是字符串的单元格数组
ischar确定项目是否是字符数组
isfield确定输入是否是结构数组字段
isfloat确定输入是否为浮点数组
ishghandle确定是否用于处理图形对象句柄
isinteger确定输入是否为整数数组
isjava确定输入是否为Java对象
islogical确定输入是否为逻辑数组
isnumeric确定输入是否是数字数组
isobject确定输入是否为MATLAB对象
isreal检查输入是否为实数数组
isscalar确定输入是否为标量
isstr确定输入是否是字符数组
isstruct确定输入是否是结构数组
isvector确定输入是否为向量
class确定对象的类
validateattributes检查数组的有效性
whos在工作区中列出变量,其大小和类型

示例

使用以下代码创建脚本文件:

x = 3
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)

x = 23.54
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)

x = [1 2 3]
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)

x = 'Hello'
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)

运行文件后,产生以下结果:

x = 3
ans = 0
ans = 1
ans = 1
ans = 1
ans = 1
x = 1177/50
ans = 0
ans = 1
ans = 1
ans = 1
ans = 1
x =

          1          2          3

ans = 0
ans = 1
ans = 1
ans = 0
x = Hello
ans = 0
ans = 0
ans = 1
ans = 0
ans = 0

这些结果(0、1)蕴含的意义先不探究,遇见再找

MATLAB运算符

这一小节,看过眼熟,用到了再查找

MATLAB 的基本运算类型:

  • 算术运算符
  • 逻辑运算符
  • 关系运算符
  • 位运算
  • 集合运算
算术运算符

MATLAB的工作是针对整个矩阵和阵列,它运行两种不同类型的算术运算

  • 矩阵算术运算
  • 阵列算术运算

矩阵的算术运算和线性代数中的定义相同。

需用需找

运算符描述
+加法或一元加号。A + B将A和B。 A和B必须具有相同的尺寸,除非一个人是一个标量。一个标量,可以被添加到任何大小的矩阵。
-减法或一元减号。A - B,减去B从A和B必须具有相同的大小,除非是一个标量。可以从任意大小的矩阵中减去一个标量。
*****矩阵乘法;是一个更精确的矩阵A和B的线性代数积,矩阵乘法对于非纯量A和B,列一个数必须等于B.标量可以乘以一个任意大小的矩阵的行数。
.*数组的乘法;A.*B是数组A和B的元素积,A和B必须具有相同的大小,除非A、B中有一个是标量。
/斜线或矩阵右除法;B/A与B * inv(A)大致相同。更确切地说: B/A = (A’B’)’
./矩阵右除法;矩阵A与矩阵B相应元素相除(A、B为同纬度的矩阵)
*.*反斜杠或矩阵左除;如果A是一个方阵,AB是大致相同的INV(A)* B,除非它是以不同的方式计算。如果A是一个n*n的矩阵,B是一个n组成的列向量,或是由若干这样的列的矩阵,则X = AB 是方程 AX = B ,如果A严重缩小或者几乎为单数,则显示警告消息。
.数组左除法;A. B是元素B(i,j)/A(i,j)的矩阵。A和B必须具有相同的大小,除非其中一个是标量。
^矩阵的幂。X^P是X到幂P,如果p是标量;如果p是一个整数,则通过重复平方计算功率。如果整数为负数,X首先反转。对P值的计算,涉及到特征值和特征向量,即如果[ D ] = V,EIG(x),那么X^P = V * D.^P / V。
.^A.^B:A的每个元素的B次幂(A、B为同纬度的矩阵)
矩阵的转置;A’是复数矩阵A的线性代数转置,这是复共轭转置。
.'数组的转置;A’是数组A的转置,对于复数矩阵,这不涉及共轭。

还有些功能运算

函数描述
uplus(a)一元加号;增加量a
plus (a,b)相加;返回 a + b
uminus(a)一元减号;减少a
minus(a, b)相减;返回 a - b
times(a, b)数组相乘;返回 a.*b
mtimes(a, b)矩阵相乘;返回 a* b
rdivide(a, b)右阵划分;返回 a ./ b
ldivide(a, b)左阵划分;返回 a. b
mrdivide(A, B)求解线性方程组xA = B for x
mldivide(A, B)求解线性方程组xA = B for x
power(a, b)数组求幂;返回 a.^b
mpower(a, b)矩阵求幂;返回 a ^ b
cumprod(A)累积乘积;返回与包含累积乘积的数组A相同大小的数组。如果A是向量,则cumprod(A)返回一个包含A的元素的累积乘积的向量。如果A是矩阵,则cumprod(A)返回一个矩阵,其中包含A的每一列的累积乘积。如果A是一个多维数组,那么cumprod(A)将沿着第一个非正整数维。
cumprod(A, dim)沿维 dim 返回返回累积乘积。
cumsum(A)累加总和;返回包含累积和的数组A如果A是向量,则cumsum(A)返回一个包含A的元素的累积和的向量。如果A是矩阵,则cumsum(A)返回一个矩阵,其中包含A的每列的累积和。如果A是一个多维数组,那么cumsum(A)将沿着第一个非整数维度起作用。
cumsum(A, dim)返回沿着dim的元素的累积和。
diff(X)差分和近似导数;计算x相邻元素之间的差异。如果X是向量,则diff(X)返回相邻元素之间的差异的向量,比X短一个元素:[X(2)-X(1)X(3)-X(2)… X(N)-X(N-1)]如果X是一个矩阵,则diff(X)返回行差的矩阵:[X(2:m,…)-X(1:m-1,😃]
diff(X,n)递归应用n次,导致第n个差异。
diff(X,n,dim)它是沿标量dim指定的维数计算的第n个差分函数。 如果order n等于或超过Dim的长度,diff将返回一个空数组。
prod(A)数组元素的乘积;返回A数组元素的乘积。如果A是向量,则prod(A)返回元素的乘积。如果A是非空矩阵,则prod(A)将A的列作为向量,并返回每列乘积的行向量。如果A是一个空的0-by-0矩阵,则prod(A)返回1。如果A是一个多维数组,那么prod(A)将沿着第一个非子集维度行为并返回一个乘积数组。 该维数的尺寸减小到1,而所有其他维数的尺寸保持不变。如果输入A为单个,则prod函数计算并返回B为单个;对于所有其他数字和逻辑数据类型,prod函数计算并返回B为double。
prod(A,dim)沿dim维度返回乘积。 例如,如果A是矩阵,则prod(A,2)是包含每一行的乘积的列向量。
prod(___,datatype)在数据类型指定的类中乘以并返回一个数组。
sum(A)数组元素的总和;返回数组的不同维度的和。如果A是浮动的,那么是双倍或单个,B是本地累加的,它与A相同,B与A具有相同的类。如果A不是浮动的,则B被累加为双,B具有类double。如果A是向量,则sum(A)返回元素的总和。如果A是矩阵,则sum(A)将A的列作为向量,返回每列的和的行向量。如果A是一个多维数组,sum(A)将沿着第一个非单例维度的值作为向量来处理,返回一个行向量的数组。
sum(A,dim)沿标量A的维度求和。
sum(…, ‘double’)sum(…, dim,‘double’)执行双精度加法,并返回double类型的答案,即使A具有数据类型单一或整型数据类型。这是整型数据类型的默认值。
sum(…, ‘native’)sum(…, dim,‘native’)在本机数据类型A中执行添加,并返回相同数据类型的答案。 这是单和双的默认值。
ceil(A)向正无穷方向舍入;将a元素舍入为大于或等于A的最近整数。
fix(A)舍入为零
floor(A)向负无穷方向舍入;将a元素舍入为小于或等于a的最近整数。
idivide(a, b)idivide(a, b,‘fix’)整数除法的舍入选项;与A./B相同,只是分数的商向零舍入到最接近的整数。
idivide(a, b, ‘round’)分数的商舍入到最近的整数。
idivide(A, B, ‘floor’)分数商向负无穷大舍入到最接近的整数。
idivide(A, B, ‘ceil’)分数商向无穷大舍入到最接近的整数。
mod (X,Y)除法后的模数;返回X - n.* Y,其中 n = floor(X./Y)。 如果Y不是整数,并且商X / Y在整数的舍入误差内,则n是整数。 输入X和Y必须是相同大小的真实数组或实数标量(提供Y〜= 0)。请注意:mod(X,0) 是 Xmod(X,X) 是 0对于 X = Y 和 Y = 0的 mod(X,Y)具有与Y相同的符号。
rem (X,Y)除法之后的余数;返回X - n.* Y,其中n = fix(X./Y)。 如果Y不是整数,并且商X / Y在整数的舍入误差内,则n是整数。 输入X和Y必须是相同大小的真实数组或实数标量(提供Y〜= 0)。请记住:rem(X,0) 是 NaNX〜= 0的rem(X,X)为0对于 X~=Y 和 Y~=0 的rem(X,Y)与X具有相同的符号。
round(X)舍入到最接近的整数; 将X的元素舍入到最接近的整数。 正数元素的小数部分为0.5,最大到最接近的正整数。 负数元素的小数部分为-0.5,向下舍入到最接近的负整数。
逻辑运算符

MATLAB逻辑运算都是针对元素的操作

运算结果是特殊的逻辑数组;在逻辑分析时,逻辑(真)用1表示,逻辑假用0表示,逻辑运算中所有的非零元素作为1处理。

MATLAB提供了两种类型的逻辑运算符和函数:

  • Element-wise -这些运算符的逻辑阵列上运行相应的元素。
  • Short-circuit -这些运算上的标量,逻辑表达式。

Element-wise 的逻辑运算符操作元素元素逻辑阵列。符号&,|和〜逻辑数组运算符AND,OR,NOT。

允许短路短路逻辑运算符,逻辑运算。符号 && 和 | | 是短路逻辑符 AND 和 OR。

例子

a = 5;
b = 20;
   if ( a && b )% //如果 a and b 为真 ,a、b非0,故都为真
        disp('Line 1 - Condition is true');  
        %//disp("输出的意思"),
   end   %//一个if结束 需要end 结尾,固定搭配
   if ( a || b )% //如果 a or b 都为真 ,a、b非0,故都为真
       disp('Line 2 - Condition is true');
   end
   % 改变a和b的值
   a = 0;
   b = 10;
   if ( a && b ) %// a=0 非真,a and b 为假,if语句不执行
       disp('Line 3 - Condition is true');
   else  %// if语句的判断条件(a&&b)为假,执行else语句
       disp('Line 3 - Condition is not true');
       
   end
   if (~(a && b))  %// ~取反,假的变成真的,故要执行if语句
   
      disp('Line 4 - Condition is true');
   end
   

运行该文件,产生如下结果

Line 1 - Condition is true
Line 2 - Condition is true
Line 3 - Condition is not true
Line 4 - Condition is true

功能运算

函数描述
and(A, B)查找数组或标量输入的逻辑和;执行所有输入数组A,B等的逻辑AND,并返回包含设置为逻辑1(真)或逻辑0(假)的元素的数组。如果所有输入数组在同一个数组位置都包含一个非零元素,那么输出数组的一个元素将被设置为1;否则,该元素设置为0。
not(A)查找数组或标量输入的逻辑NOT;执行输入数组A的逻辑NOT,并返回包含设置为逻辑1(真)或逻辑0(假)的元素的数组。如果输入数组在同一个数组位置包含一个零值元素,那么输出数组的一个元素将被设置为1;否则,该元素设置为0。
or(A, B)查找数组或标量输入的逻辑或; 执行所有输入数组A,B等的逻辑或,并返回包含设置为逻辑1(真)或逻辑0(假)的元素的数组。如果任何输入数组在同一个数组位置包含一个非零元素,则输出数组的一个元素设置为1;否则,该元素设置为0。
xor(A, B)逻辑异或; 对数组A和B的相应元素执行异或运算。如果A(i,j,…)或B(i,j)…,则所得到的元素C(i,j,…) j,…),但不是两者都是非零的。
all(A)确定数组A的所有数组元素是否为非零或真。如果A是向量,则如果所有元素都为非零,则所有(A)返回逻辑1(真),如果一个或多个元素为零,则返回逻辑0(假)。如果A是非空矩阵,则所有(A)将A的列视为向量,返回逻辑1和0的行向量。如果A是空的0x0矩阵,则全部(A)返回逻辑1(真)。如果A是一个多维数组,则所有(A)都沿着第一个非指定维度行事,并返回一个逻辑值数组。 该尺寸的尺寸减小到1,而所有其他尺寸的尺寸保持不变。这个维度的大小减少到1,而其他所有维度的尺寸保持不变。
all(A, dim)通过标量dim沿着维数A的维度进行测试。
any(A)确定数组元素是否为非零;测试数组中不同维度的元素是否为非零数字,或是逻辑1(真)。 任何函数忽略NaN(不是数字)的条目。如果A是向量,任何(A)如果A的任何元素是非零数或逻辑1(真),则返回逻辑1(真),如果所有元素为零,则返回逻辑0(假)。如果A是非空矩阵,则任何(A)将A的列视为向量,返回逻辑1和0的行向量。如果A是一个空的0x0矩阵,任何(A)返回逻辑0(假)。如果A是一个多维数组,则任何(A)都沿着第一个非整数维进行操作,并返回一个逻辑值数组。该维度的尺寸减小到1,而所有其他维度的尺寸保持不变。
any(A,dim)通过标量dim沿着维数A的维度进行测试。
false逻辑0(假)
false(n)是逻辑0的n×n矩阵
false(m, n)是逻辑0的一个m×n矩阵。
false(m, n, p, …)是由逻辑0的逐列逐列数组。
false(size(A))是与数组A大小相同的逻辑零数组。
false(…,‘like’,p)是与逻辑阵列p相同的数据类型和稀疏性的逻辑零数组。
ind = find(X)查找非零元素的索引和值;定位数组X的所有非零元素,并返回向量中这些元素的线性索引。 如果X是行向量,则返回的向量是行向量; 否则返回列向量。如果X不包含非零元素或是空数组,则返回一个空数组。
ind = find(X, k)ind = find(X, k, ‘first’)最多返回与X的非零条目相对应的前k个索引。k必须是正整数,但它可以是任何数字数据类型。
ind = find(X, k, ‘last’)最多返回与X的非零条目相对应的最后k个索引。
[row,col] = find(X, …)返回矩阵X中非零条目的行和列索引。使用稀疏矩阵时,此语法特别有用。 如果X是N>2的N维数组,col包含列的线性索引。
[row,col,v] = find(X, …)返回X中非零条目的列或行向量v,以及行和列索引。如果X是逻辑表达式,则v是逻辑数组。 输出v包含通过评估表达式X获得的逻辑数组的非零元素。
islogical(A)确定输入是否为逻辑数组;如果A是逻辑数组,返回true,否则返回false。 如果A是从逻辑类派生的类的实例,它也返回true。
logical(A)将数值转换为逻辑;返回一个可用于逻辑索引或逻辑测试的数组。
true逻辑1(真)
true(n)是一个n×n逻辑矩阵。
true(m, n)是一个mxn逻辑矩阵。
true(m, n, p, …)是由逻辑1的逐列逐列数组。
true(size(A))是与数组A大小相同的逻辑数组。
true(…,‘like’, p)是与逻辑阵列p相同的数据类型和稀疏性的逻辑阵列。
关系运算

MATLAB关系运算符对数组的元素进行设置,将元素设置为逻辑1(真)的关系是真实的和逻辑0(假),它是两个阵列,可以返回一个相同大小的逻辑阵列间的比较。

MATLAB关系运算符标和非标量数据上也能正常工作。

MATLAB关系运算符如下表:

操作符描述
<小于
<=小于等于
>大于
>=大于等于
==等于
~=不等于

例子

a = 100;
b = 200;
if (a >= b)
max = a
else
max = b
end

运行结果

max =
   200

功能函数

函数描述
eq(a, b)测试a是否等于b
ge(a, b)测试是否大于或等于B
gt(a, b)测试a是否大于b
le(a, b)测试a是否小于或等于b
lt(a, b)测试a是否小于b
ne(a, b)测试a是否不等于b
isequal测试数组以获得相等性
isequaln测试数组相等,将NaN值视为相等

例子

% 比较a和b的值
a = 100;
b = 200;
if (ge(a,b))   %测试a是否大于或等于B
max = a
else
max = b
end

a = 340;
b = 520;
if (le(a, b))  %测试a是否小于或等于b
disp(' a is either less than or equal to b')
else
disp(' a is greater than b')
end

运行结果

max =
   200
 a is either less than or equal to b
位运算

以下的表格显示了常用的按位运算:

函数目的/作用
bitand(a, b)整数a和b的逐位AND
bitcmp(a)a的位补码
bitget(a,pos)在指定位置pos中获取位,在整数数组A中
bitor(a, b)整数a和b的逐位OR
bitset(a, pos)在某一位置上设置位
bitshift(a, k)返回向左移位k位,相当于乘以2k。k的负值对应于向右移位或除以2 | k | 并舍入到最接近的整数到负无穷大。任何溢出位都被截断。
bitxor(a, b)整数a和b的逐位异或
swapbytes交换字节顺序

例子

把10进制数,转换为2进制数,再进行操作 要用到再详细找运行过程

a = 60; % 60 = 0011 1100   
b = 13; % 13 = 0000 1101 
c = bitand(a, b)      % 12 = 0000 1100  
c = bitor(a, b)       % 61 = 0011 1101 
c = bitxor(a, b)      % 49 = 0011 0001 
c = bitshift(a, 2)    % 240 = 1111 0000 */
c = bitshift(a,-2)    % 15 = 0000 1111 */

运行结果

c =
    12
c =
    61
c =
    49
c =
   240
c =
    15
集合操作

下表显示了一些常用的设置操作:

函数描述
intersect(A,B)设置两个数组的交集;返回A和B所共有的值。返回的值按排序顺序排列。
intersect(A,B,‘rows’)将A和B的每一行作为单个实体处理,并返回A和B的公共行。返回的矩阵的行按排序顺序排列。
ismember(A,B)返回与A大小相同的数组,包含1(true),其中A的元素在其他地方的B中找到,它返回0(false)。
ismember(A,B,‘rows’)将A和B的每一行作为单个实体处理,并返回一个包含1(true)的向量,其中矩阵A的行也是B的行;否则,它返回0(false)。
issorted(A)如果A的元素按排序顺序返回逻辑1(true),否则返回逻辑0(false)。输入A可以是向量,也可以是N-by-1或1-by-N的字符串数组。如果A和sort(A)的输出相等,则A被认为是排序的。
issorted(A, ‘rows’)如果二维矩阵A的行按排序顺序返回逻辑1(真),否则返回逻辑0(假)。 如果A和排序(A)的输出相等,则认为矩阵A被排序。
setdiff(A,B)设置两个数组的差值;返回不在B中的值。返回数组中的值按排序顺序排列。
setdiff(A,B,‘rows’)将每一行A和B行作为单个实体处理,并返回一个不在B中的行。返回的矩阵的行按排序顺序排列。“行”选项不支持单元格数组。
setxor设置两个数组的异或
union设置两个数组的并集
unique数组中唯一的值

例子

a = [7 23 14 15 9 12 8 24 35]
b = [ 2 5 7 8 14 16 25 35 27]
u = union(a, b)   %求 a 和 b的并集
i = intersect(a, b) %求a 和 b的交集
s = setdiff(a, b) % 求“差集” 返回集合a不在集合b中的值

运行结果

a =
     7    23    14    15     9    12     8    24    35
b =
     2     5     7     8    14    16    25    35    27
u =
  Columns 1 through 11
     2     5     7     8     9    12    14    15    16    23    24
  Columns 12 through 14
    25    27    35
i =
     7     8    14    35
s =
     9    12    15    23    24
MATLAB决策制定

大意就是:

条件A为真,则走道路1,或者不走;

否则(条件A为假),则走非道路1,或者不走

if …end
a = 2; %加了; 不输出a
if (a == 2)
disp(' a=2是真滴')  %加不加;都要输出
end

image-20210814183741579

if…else …end
a = 3; %加了; 不输出a
if (a == 2)
disp(' a=2是真滴')
else
disp(' a=2是假滴')
fprintf('a的值是 : %d',a) %参c语言中的格式化输出理解,固定格式
end

image-20210814184159806

if…elseif…elseif…else…end

使用 if… elseif…elseif…else 语句,要注意以下几点:

  • 一个 if 可以有零个或多个 else,但是它必须跟在 elseif 后面(即只有 elseif 存在才会有 else)。
  • 一个 if 可以有零个或多个 elseif ,必须出现else。
  • 一旦 elseif 匹配成功,余下的 elseif 将不会被测试。

例如以下 伪代码:

如果(if) a ==1:

​ 输出a等于1

​ 还如果(elseif)a ==2:

​ 输出a等于2

​ 还如果(elseif)a==3:

​ 输出a等于3

​ 否则(else):

​ 输出a等于1、2、3

end

当a = 4时; if(a==1)为假,进入elseif(a==2)还为假,进入esleif(a==3)还未假,进入else,输出a等于1、2、3(因为前面的if都为假,故执行else)

当a = 2时,if(a==1)为假,进入elseif(a==2)为真。然后就执行输出a等于2。结束

当a = 1时,if(a==1)为真,执行输出a等于1。结束

image-20210814185622511

image-20210814185656781

image-20210814185724463

嵌套if

有几个if就有几个end(elseif在这里不算if)

a = 8;
if(a>1)
fprint("a大于1\n")
if(a>5)
fprint("a大于5\n")
if(a>10)
fprint("a大于10\n")
end
end
end

image-20210814190449387

可见,输出了两行结果

第一个if为真,就继续执行下一个if,

第二if为真,则去判断第三个if

第三if为假,就不执行

这里和if…elseif有所区别

if为假时,再判断elseif。

这里if为真时,再去判断下一个if

注意end的个数

switch
  • 计算 switch_expression 是一个标量或字符串。
  • 计算 case_expression 是标量,标量或字符串的字符串或单元阵列。

switch 块的功能是测试每个 case ,直到被测试的其中一个 case 是 true 。

case 是 true 的情况如下:

  • 对于数字,eq(case_expression,switch_expression).
  • 对于字符串,strcmp(case_expression,switch_expression).
  • 对于对象,支持 eq 函数,eq(case_expression,switch_expression).
  • 对于单元阵列case_expression的,在单元阵列与switch_expression相匹配的元素中的至少一个,如上文所定义的数字,字符串和对象。

当上述有一个情况是 true,MATLAB 就执行与之相应的语句,然后不再执行以后的语句,直接退出 switch 块。

otherwise 块是可选的,任何情况下,只有当真正执行。

例子

grade = 'B';
   switch(grade)
   case 'A' 
      fprintf('这里是A' );
   case 'B' 
       fprintf('这里是B' );
   case 'C' 
      fprintf('这里是C' );
   case 'D'
      fprintf('这里是D' );    
   otherwise
     fprintf('A,B,C,D都不是' );
   end

image-20210814191506269

image-20210814191600459

嵌套switch

把上面的例子稍稍改造哈

image-20210814192041533

一个switch一个end对应

MATLAB循环类型

循环类型

循环类型描述
while 循环一个给定的条件为真时重复语句或语句组。测试条件才执行循环体。
for 循环执行的语句序列多次缩写管理循环变量的代码。
嵌套循环可以使用一个或多个环路内任何另一个循环。

循环控制语句

控制语句描述
break 语句终止所有循环语句
continue 语句终止本次循环语句
while循环

语法

while(条件)
语句
end
%当条件为真时,一直执行

例子

a = 10;

while( a < 20 )
  fprintf('a的值: %d\n', a);
  a = a + 1;
end

image-20210814192700114

for循环

三种语法

for a = 10:20 
  fprintf('value of a: %d\n', a);
end
%开始a=10,此时a<=20,执行fprintf,a自己加1等于11(默认步长1)
%循环:a=11 ,此时a<=20,执行fprintf,a自己加1等于12
%...
%循环,a=20,此时a<=20,执行fprintf,a自己加1等于21
%循环,a=21,此时a>20,结束循环

image-20210814192828929

image-20210814194256407

for a = 1.0: -0.1: 0.0 %开始值,步长,结束值
   disp(a)
end
%由于第二参数为-0.1,故每次要+(-0.1)
%开始a=1.0,此时 a“还没到”0.0,输出1.0,然后加(-0.1)-->a=0.9了
%循环a=0.9,此时 a“还没到”0.0,输出0.9,然后加(-0.1)-->a=0.8了
%循环a=0.8,此时 a“还没到”0.0,输出0.8,然后加(-0.1)-->a=0.7了
%......
%循环a=0.1,此时 a“还没到”0.0,输出0.1,然后加(-0.1)-->a=0.0了
%循环a=0.0,此时 a“到了”0.0,输出0.0,然后加(-0.1)-->a=-0.1了
%结束a=-0.1,此时 a“超了”0.0,结束

image-20210814192943298

for a = [24,18,17,23,28]
   disp(a)
end

image-20210814193019205

a依次等于数组[24,18,17,23,28]中的值,也叫遍历

嵌套循环

嵌套循环即循环中套着循环

for a = [1,2,3,4]
   for b = [9,8,7,6]
   	disp(a*b)
   	end
end

执行结果

	 9

     8

     7

     6

    18

    16

    14

    12

    27

    24

    21

    18

    36

    32

    28

    24

可见a数组的每个值,都单独去乘了b数组中的所有值

这就是嵌套循环

break语句

MATLAB中 break 语句用于终止 for 或 while 循环的执行,当在循环体内执行到该语句的时候,程序将会跳出(终止)循环,继续执行循环语句的下一语句。

a = 10;
 while (a < 20 )
      fprintf('a的值:%d\n', a);
      a = a+1;
      if( a > 15)
         % 当a>15时,就跳出(终止)循环
          break;
      end 
  end

image-20210814195220404

continue语句

MATLAB中 continue 语句控制跳过循环体的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所剩下的语句,继续下一次循环。

即跳过本次循环

上面的代码稍作修改

a = 10;
while a < 20
  if a == 15
      a = a + 1;
      continue;
  end
  fprintf('a的值%d\n', a);
  a = a + 1;     
end

image-20210814195940059

  • 3
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值