概述
MATLAB基本语法详解
下面内容 :变量、M-Files、决策、循环容易掌握
命令、数据类型、运算符不需要记住,用了再查
变量
每个MatLab变量可以是数组或者矩阵
最简单的方法指定变量
x = 3 % 定义并初始化(赋值)变量x
MATLAB上执行上述语句
上面的例子,创建了一个1-1名为x的矩阵,并将值存在其元素中
再执行
x = sqrt(16) % 定义x,并把表达式赋给x
MATLAB注意事项:
在使用变量之前、必须先给变量赋值(即 int a = 1;不能int a;)
不能像C语言一样,可以只定义变量而不给变量赋值(也叫初始化)
例如:
x = 7*8;
y=x*1.123
当表达式返回一个结果,我们没有分配给任意变量,系统自动分配一个变量名ans存储这个结果
例如:
sqrt(78)
MATLAB上执行上面的语句,并返回以下结果
变量ans还可以继续被使用
9876/ans
键入cls 清屏
键入clear 清除工作区中的所有变量
MATLAB可以多个赋值
多个任务可以在同一行,例如:
a = 2; b = 7; c = a*b
MATLAB显示以及使用的变量名
在MATLAB中使用who命令显示已经使用过的变量名
who
whos 命令则显示多一点有关变量:
- 当前内存中的变量
- 每个变量的类型
- 内存分配给每个变量
- 无论他们是复杂的变量与否
whos
删除内存中的使用过的变量
clear x %删除变量x
clear %删除所有已经使用过的变量
长任务
长任务可以用过省略号(…)延伸到另一条线路(另一行?换行输出、不执行)
a = 0; acc = 9.8; time = 20;
re = a ...
+ acc*time
MATLAB格式命令
默认情况下,MATLAB 四个小数位值显示数字。这就是所谓的 short format.
如果想更精确,需要使用 format 命令。
- 长(long ) 命令格式显示小数点后16位。
format long
x = 7 + 10/3 + 5^1.2
- format short :
format short
x = 7 + 10/3 + 5^1.2
- 空格格式命令回合到小数点后两位数字。例如:
format bank
daily_wage = 177.45;
weekly_wage = daily_wage * 6
MATLAB 显示大量使用指数表示法。
- 短格式e命令允许以指数的形式显示小数点后四位,加上指数。
format short e
4.678 * 4.9
- format long e命令允许以指数的形式显示小数点后十六位,加上指数。例如:
format long e
x = pi
format rat格式大数命令给出最接近的有理表达式,从计算所得。例如:
format rat
4.678 * 4.9
format 格式标识符 即 数的表现形式
MATLAB创建向量
向量是一维数组中的数字。 MATLAB允许创建两种类型的矢量:
- 行向量
- 列向量
创建行向量括在方括号中的元素的集合,用空格或逗号分隔的元素。
例如
r = [1 2 3 4 5]
t = [1,2,3,4,5]
res = r +t
创建列向量通过内附组方括号中的元素,使用分号**(????**分隔的元素。
c = [5;6;7;8;9]
MATLAB创建矩阵
矩阵是一个二维数字阵列。
在MATLAB中,创建一个矩阵每行输入空格或逗号分隔的元素序列,最后一排被划定一个分号。
例如,下面创建了一个3×3的矩阵:
m = [1 2 3; 4 5 6; 7 8 9]
命令
一些常用的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 long | 15位定点表示 |
format short e | 五位浮点表示 |
format long e | 15位浮点表示 |
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图 |
打印或绘图到文件 | |
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
ctrl +s 保存,输入文件名( .m 扩展程序文件名)
或者键入:edit 文件名
上面俩个命令,将在默认文件夹中创建文件
如需自定义
键入:
mkdir test01 (创建文件夹 mk->make, dir->目录)
chdir test01(改变当前路径 ch->改变,dir->目录即路径)
edit test01.m (这三命令,需要把创建文件归类时使用)
当然也可直接在界面,点击图标,创建文件
创建好文件,即可在文件中写入语句
注意每行末尾有分号
保存后有两中方法运行这个文件
点击图标运行
或者在命令提示符下键入文件名(不含扩展名.m):>> haha
再来个例子
创建一个脚本文件xixi
这里看见变量后面没有分号滴,都被输出了。输出格式为真分数,应当是之前设置的格式,现在还在沿用。
另设置一哈格式,以及只需要输出最后一个变量f
数据类型
这里内容不需要记住,需要用到,再查找即可
默认情况下,MATLAB 存储所有数值变量为双精度浮点值。其他数据类型存储文本,整数或单精度值或单个变量中相关数据的组合。
MATLAB不需要任何类型声明或维度语句。当MATLAB遇到新的变量名称时,它将创建变量并分配适当的内存空间。
如果变量已经存在,则MATLAB将使用新内容替换原始内容,并在必要时分配新的存储空间。
total = 136
上述语句创建一个名为total
的1x1
矩阵,并将值136
存储在其中。
MATLAB数据类型
ATLAB提供15
种基本数据类型,分别是8种整型数据、单精度浮点型、双精度浮点型、逻辑型、字符串型、单元数组、结构体类型和函数句柄。每种数据类型存储矩阵或数组形式的数据。矩阵或数组的最小值是0
到0
,并且是可以到任何大小的矩阵或数组。
下表显示了MATLAB中最常用的数据类型:
数据类型 | 描述 |
---|---|
int8 | 8 位有符号整数 |
uint8 | 8 位无符号整数 |
int16 | 16 位有符号整数 |
uint16 | 16 位无符号整数 |
int32 | 32 位有符号整数 |
uint32 | 32 位无符号整数 |
int64 | 64 位有符号整数 |
uint64 | 64 位无符号整数 |
single | 单精度数值数据 |
double | 双精度数值数据 |
logical | 逻辑值为1 或0 ,分别代表true 和false |
char | 字符数据(字符串作为字符向量存储) |
单元格阵列 | 索引单元阵列,每个都能够存储不同维数和数据类型的数组 |
结构体 | C型结构,每个结构具有能够存储不同维数和数据类型的数组的命名字段 |
函数处理 | 指向一个函数的指针 |
用户类 | 用户定义的类构造的对象 |
Java类 | 从Java类构造的对象 |
示例
这里我创建了一个新的文件夹,用来保存次示例脚本
可见输出有些变量时,顺带输出了变量的数据类型
数据类型之间可以转换
数据类型装换
不需要记、需用需查
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
if…else …end
a = 3; %加了; 不输出a
if (a == 2)
disp(' a=2是真滴')
else
disp(' a=2是假滴')
fprintf('a的值是 : %d',a) %参c语言中的格式化输出理解,固定格式
end
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。结束
嵌套if
有几个if就有几个end(elseif在这里不算if)
a = 8;
if(a>1)
fprint("a大于1n")
if(a>5)
fprint("a大于5n")
if(a>10)
fprint("a大于10n")
end
end
end
可见,输出了两行结果
第一个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
嵌套switch
把上面的例子稍稍改造哈
一个switch一个end对应
MATLAB循环类型
循环类型
循环类型 | 描述 |
---|---|
while 循环 | 一个给定的条件为真时重复语句或语句组。测试条件才执行循环体。 |
for 循环 | 执行的语句序列多次缩写管理循环变量的代码。 |
嵌套循环 | 可以使用一个或多个环路内任何另一个循环。 |
循环控制语句
控制语句 | 描述 |
---|---|
break 语句 | 终止所有循环语句 |
continue 语句 | 终止本次循环语句 |
while循环
语法
while(条件)
语句
end
%当条件为真时,一直执行
例子
a = 10;
while( a < 20 )
fprintf('a的值: %dn', a);
a = a + 1;
end
for循环
三种语法
for a = 10:20
fprintf('value of a: %dn', 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,结束循环
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,结束
for a = [24,18,17,23,28]
disp(a)
end
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的值:%dn', a);
a = a+1;
if( a > 15)
% 当a>15时,就跳出(终止)循环
break;
end
end
continue语句
MATLAB中 continue 语句控制跳过循环体的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所剩下的语句,继续下一次循环。
即跳过本次循环
上面的代码稍作修改
a = 10;
while a < 20
if a == 15
a = a + 1;
continue;
end
fprintf('a的值%dn', a);
a = a + 1;
end
最后
以上就是秀丽便当为你收集整理的MATLAB基本语法详解的全部内容,希望文章能够帮你解决MATLAB基本语法详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复