- Matlab 语法(一)
- 一、 概述
- 1、 应用简介
- 2、 界面简介
- 3、 基本使用
- 二、 变量
- 1、 创建变量
- 2、 显示变量
- 3、 多行编译
- 4、 格式化输出
- 三、 常用命令
- 1、 管理会话
- 2、 系统命令
- 3、 输入输出
- 4、 数组矩阵
- 5、 绘图命令
- 四、 文件编程
- 1、 M 文件
- 2、 创建运行
- 五、 数据类型
- 1、 常用类型
- 2、 类型转换
- 3、 类型判断
- 六、 运算符
- 1、 算术运算符
- 2、 关系运算符
- 3、 逻辑运算符
- 4、 按位运算符
- 5、 集合运算符
- 七、 流程结构
- 1、 条件语句
- 2、 循环语句
- 八、 向量
- 1、 创建向量
- 2、 操作向量
- 3、 向量运算
- 3.1 加减
- 3.2 标量乘法
- 3.3 向量逆置
- 3.4 向量追加
- 3.5 向量大小
- 3.6 向量积
- 3.7 等距元素
- 一、 概述
MATLAB(矩阵实验室)是用于数字计算,可视化和编程的第四代高级编程语言和交互式环境。
MATLAB由MathWorks开发。
官方文档:https://ww2.mathworks.cn/help/matlab/language-fundamentals.html
它允许矩阵操作;功能和数据绘制;算法的实现;创建用户界面;与使用其他语言(包括C,C ++,Java和FORTRAN)编写的程序进行交互;分析数据;开发算法;并创建模型和应用程序。
它具有许多内置命令和数学函数,可帮助您进行数学计算,生成图和执行数值方法。
2、 界面简介 3、 基本使用MATLAB环境的行为就像一个超级复杂的计算器。您可以在>>命令提示符下输入命令。
MATLAB是一个解释型环境。换句话说,您给出了一个命令,MATLAB立即执行了该命令。
常用运算符和特殊字符
+
加; 加法运算符
-
减; 减法运算符
*
标量和矩阵乘法运算符
.*
数组乘法运算符
^
标量和矩阵求幂运算符
.^
数组求幂运算符
\
左除法运算符
/
右除法运算符
.\
数组左除法运算符
./
数组右除法运算符
:
冒号;生成规则间距的元素并表示整行或整列
()
圆括号;封闭函数参数和数组索引;重写优先级
[]
括号;附件数组元素
.
小数点
...
省略号;行连续运算符
,
逗号;分隔一行中的语句和元素
;
分号; 分隔列并抑制显示
%
百分号;指定注释并指定格式
'
引用符号和转置运算符
.'
Nonconjugated转置运算符
=
赋值运算符
特殊变量和常量
ans
最近计算的答案
eps
浮点精度
i,j
虚数单位√-1
Inf
无穷
NaN
未定义的数值结果(不是数字)
pi
π
保存文件和加载文件
save myfile % 用于将工作空间中的所有变量保存为当前目录中扩展名为.mat的文件
load myfile % 随时使用load命令重新加载文件
二、 变量
1、 创建变量
在MATLAB环境中,每个变量都是一个数组或矩阵
您可以通过简单的方式分配变量。例如,
x = 3 % 定义x并用值初始化它
% 它创建一个名为x的1乘1矩阵,并将值3存储在其元素中
sqrt(3) % 匿名创建一个 ans = 9
% MATLAB将执行上述语句并返回以下结果
% ans = 9
a = 1; b = 3; c = a + b % 多项创建变量
% 创建向量:向量是一维数字数组。MATLAB允许创建两种类型的向量,行向量和列向量
vec = [1, 2, 3, 4] % vec = [1 2 3 4]也ok,创建行向量
vec_ = [1; 2; 3; 4] % 创建列向量
r = [7 8 9 10 11];
t = [2, 3, 4, 5, 6];
res = r + t
% 创建矩阵:在MATLAB中,通过以空格或逗号分隔的元素的顺序输入每一行来创建矩阵,并用分号分隔行的结尾
temp = [1, 2, 3; 4 5 6; 7 8 9] % 创建一个 3 x 3 的矩阵
2、 显示变量注意:
- 将变量输入系统后,您以后可以参考它
- 变量在使用前必须具有值
- 当表达式返回未分配给任何变量的结果时,系统会将其分配给名为ans的变量,该变量可在以后使用
who % 显示您创建的所有的变量信息
whos % 显示创建的所有变量,以及内存空间,和数据类型
3、 多行编译
可以使用省略号(...)将长作业扩展到另一行
d = 0 ...
+ 2 + 4 ...
+ 5 % 返回的结果是 11
4、 格式化输出
format
:默认格式
format short
:5字长定点数,显示5位(scaled fixed point format with 5 digits)
format long
:15字长定点数,显示15位双精度,7位单精度(scaled fixed point)
format short e
:5字长浮点数
format long e
:15字长浮点数
format hex
:16进制
format bank
:定点货币形式
format rat
:小数分数表示
format +
:+,-,空格
format compact
:压缩空格
format loose
:括空格和空行
format long
:15字长定点数
format short e
:5字长浮点数
format long e
:15字长浮点数
format short g
:5位定点或浮点格式。
format long g
:对双精度,显示15位定点或浮点格式,对单精度,显示7位定点或浮点格式
format short
4.678 * 4.9
三、 常用命令
1、 管理会话
fscanf和fprintf命令的行为像C的scanf和printf函数。它们支持以下格式代码-
到目前为止,我们已经使用MATLAB环境作为计算器。但是,MATLAB还是一种强大的编程语言,也是一种交互式计算环境
在前面的章节中,您学习了如何从MATLAB命令提示符下输入命令。MATLAB还允许您将一系列命令写入文件并以完整的单元形式执行文件,例如编写函数和调用它
1、 M 文件MATLAB允许编写两种程序文件-
- 脚本−脚本文件是扩展名为.m的程序文件。在这些文件中,您编写了一系列要一起执行的命令。脚本不接受输入,也不返回任何输出。它们对工作区中的数据进行操作
- 函数−函数文件也是扩展名为.m的程序文件。函数可以接受输入并返回输出。内部变量是函数的局部变量
您可以使用MATLAB编辑器或任何其他文本编辑器来创建.m文件。在本节中,我们将讨论脚本文件。脚本文件包含多行MATLAB命令和函数调用。您可以通过在命令行中输入脚本名称来运行脚本
2、 创建运行要创建脚本文件,您需要使用文本编辑器。您可以通过两种方式打开MATLAB编辑器-
-
使用命令提示符
-
edit % Or edit <filename>
-
-
使用IDE
-
mkdir progs % 创建一个工作目录 chdir progs % 进入到目录中 edit prog1.m % 创建文件,并且编辑文件
-
编写脚本:
NoOfStudents = 6000;
TeachingStaff = 150;
NonTeachingStaff = 20;
Total = NoOfStudents + TeachingStaff ...
+ NonTeachingStaff;
disp(Total);
创建并保存文件后,可以通过两种方式运行它-
- 单击Run编辑器窗口上的按钮或
- 只需在命令提示符下键入文件名(不带扩展名):>> prog1
MATLAB 不需要任何类型声明或维度语句。每当 MATLAB 遇到一个新的变量名,它就创建变量并分配适当的内存空间。
如果变量已经存在,那么MATLAB将用新内容替换原始内容,并在必要时分配新的存储空间
1、 常用类型运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。MATLAB设计为主要在整个矩阵和数组上运行。因此,MATLAB中的运算符既可以处理标量数据,也可以处理非标量数据。MATLAB允许以下类型的基本运算-
- 算术运算符
- 关系运算符
- 逻辑运算符
- 按位运算符
- 集合运算符
MATLAB允许两种不同类型的算术运算-
- 矩阵算术运算
- 数组算术运算
矩阵算术运算与线性代数中定义的相同。数组操作是在一维和多维数组上逐个元素执行的。
矩阵运算符和数组运算符之间用句点(。)符号进行区分。但是,由于矩阵和数组的加法和减法运算相同,因此两种情况下的运算符均相同。下表简要介绍了运算符
+
加法或一元加号。A+B将存储在变量A和B中的值相加。A和B必须具有相同的大小,除非其中一个是标量。标量可以添加到任何大小的矩阵中。
-
减法或一元减法。A-B从A中减去B的值。A和B必须具有相同的大小,除非其中一个是标量。标量可以从任何大小的矩阵中减去。
*
矩阵乘法。C=A*B是矩阵A和B的线性代数积。更准确地说,\(C(i, j) = \sum_{k=1}^n {A(i, k)B(k, j)}\)对于非标量A和B,A的列数必须等于B的行数。标量可以与任意大小的矩阵相乘
.*
数组乘法。A.*B是数组A和B的逐元素乘积。A和B必须具有相同的大小,除非其中一个是标量
^
矩阵幂。如果p是标量,那么$X^p $是p的幂。如果p是整数,则通过重复平方计算幂。如果整数是负数,则X先倒数。对于p的其他值,计算涉及特征值和特征向量,因此如果[V,D]=eig(X),那么X^p = V*D.^ p / V
.^
数组幂。A.^B是元素A(i,j)为B(i,j)次方的矩阵。A和B必须具有相同的大小,除非其中一个是标量
\
左除法运算符,如果A是方阵,则A\B与inv(A)*B大致相同,只是计算方式不同。如果A是一个n乘n的矩阵,而B是一个包含n个分量的列向量,或者是一个包含多个这样的列的矩阵,那么X=A\B是方程AX=B的解。如果A的比例严重或几乎是单数,则会显示一条警告消息
/
右除法运算符,B/A与B*inv(A)大致相同。更准确地说, B/A = (A'\B')'.
.\
数组左除法运算符,A.\B是元素B(i,j)/A(i,j)的矩阵。A和B必须具有相同的大小,除非其中一个是标量
./
数组右除法运算符,A./B是元素A(i,j)/B(i,j)的矩阵。A和B必须具有相同的大小,除非其中一个是标量
'
矩阵转置。A'是A的线性代数转置。对于复矩阵,这是复共轭转置
.'
数组转置 a’是 a 的数组转置。对于复杂的矩阵,这不涉及共轭。
2、 关系运算符
<
小于
<=
小于等于
>
大于
>=
大于等于
==
等于
~=
不等于
3、 逻辑运算符
MATLAB提供两种类型的逻辑运算符和函数
- 元素级:这些运算符对逻辑数组的相应元素进行操作
- 短路:这些运算符对标量和逻辑表达式进行运算
逐个元素的逻辑运算符在逻辑数组上逐个元素地进行操作。符号&,|和〜是逻辑数组运算符AND,OR和NOT
短路逻辑运算符允许逻辑运算短路。符号&&和|| 是逻辑短路运算符AND和OR
4、 按位运算符bitand(a, b)
整数 a 和 b 的位与
bitcmp(a)
a的逐位补码
bitget(a,pos)
在整数数组a的指定位置获取位
bitor(a, b)
整数a和b的位或
bitset(a, pos)
将bit设置为a的特定位置pos
bitshift(a, k)
返回一个由向左移动ķ比特,相当于乘以2^ķ 。k的负值对应于右移位或除以2 | k | 并朝负无穷大四舍五入到最接近的整数。任何溢出位都将被截断。
bitxor(a, b)
整数 a 和 b 的位异或
swapbytes
整数 a 和 b 的位异或
5、 集合运算符
intersect(A, B)
设置两个数组的交集:返回A和B的公共值,返回的值按顺序排列
intersect(A, B, 'rows')
将A的每一行和B的每一列视为单个实体,并返回A和B的共用的行。返回矩阵的行按顺序排列
ismember(A, B)
返回一个与A大小相同的数组,其中包含1,其中A的元素位于B中,在其他位置,它返回0
ismember(A, B, 'rows')
将A的每一行和B的每一行视为单个实体,并返回一个包含1的向量,其中矩阵A的行也是B的行,在其他地方,它返回0
issorted(A)
如果元素按顺序排列,则返回逻辑1,否则返回逻辑0,。输入A可以是向量,也可以是单行或单列的数组,如果A和sort(A)的输出相等,则认为A被排序
issorted(A, 'rows')
如果二维矩阵A的行按顺序排列,则返回逻辑1,否则返回逻辑0,如果A和sortrows(A)的输出相等,则认为矩阵A是排序的
setdiff(A, B)
设置两个数组的差值:返回A中不在B中的值,返回数组中的值按排序顺序结构
setdiff(A, B, 'rows')
将A的每一行和B的每一列视为单个实体,并返回A中不在B中的行。返回矩阵的行按排序顺序排列。"rows"选项不支持单元格数组
setxor
两个数组异或
union
两个数组的并集
unique
数组中的唯一值
七、 流程结构
1、 条件语句
决策结构要求程序员应指定一个或多个要由程序评估或测试的条件,如果确定条件为真,则应指定要执行的一个或多个语句,如果条件为真,则可以选择要执行的其他语句。条件确定为假。
if...end
一个if...end语句有一个布尔表达式和一个或多个语句组成
if...else...end
if语句后面跟一个可选的else语句,该语句在布尔表达式为false时执行
if...elseif...elseif...else...end
if语句后面可以跟一个(或多个)可选的elseif,还有一个else语句,它对测试各种条件非常有用
if...if...end...end
可以在另一个if或else语句中使用一个if...else语句
switch
switch语句允许根据值列表测试变量是否相等
a = 10; b = 23;
% 进行条件语句的判断
if a >= 10
display "a大于10"
if b > 20
display "并且b大于20"
end
end
switch a
case 1
display "a的值为1" % 自动会进行中断循环,不需要加break
otherwise
display "a值不符合要求"
end
2、 循环语句
循环语句
for
多次执行一个语句序列,并简化管理循环变量的代码
while
在给定条件为真时重复一个语句或一组语句。 它在执行循环体之前测试条件
循环控制语句
break
终止循环语句,并在循环之后立即将执行转移到该语句
continue
使循环跳过其主体的其余部分,并在重复之前立即重新测试其状态
a = 10;
% while loop execution
while( a < 20 )
fprintf('while value of a: %d\n', a);
a = a + 1;
end
% for initval:step:endval / initval:endval / initval
for b = 0: 10: 100
fprintf("for value of b: %d\n", b)
end
% 也可以传入一个向量等
for a = [24,18,17,23,28]
disp(a)
end
八、 向量
向量是一维数字数组。MATLAB允许创建两种类型的向量-
- 行向量
- 列向量
r_h = [7 8 9 10 11]; % 创建一个行向量
r_v = [1; 2; 3; 4; 5]; % 创建一个列向量
2、 操作向量
r_h = [7 8 9 10 11]; % 创建一个行向量
r_v = [1; 2; 3; 4; 5]; % 创建一个列向量
r_h(2) % 获取第二个元素
r_v(1) % 获取第一个元素
r_h(:) % 遍历元素
% initval:step:endval / initval:endval / :
r_v(2: 5) % 获取第2到5个元素,两端都可以获取到
3、 向量运算
3.1 加减
您可以添加或减去两个向量。两个操作数向量必须具有相同的类型并具有相同数量的元素
A = [7, 11, 15, 23, 9]; % 创建向量
B = [2, 5, 13, 16, 20]; % 创建向量
C = A + B; % 进行向量运算
D = A - B;
E = A - 1;
disp(E);
disp(C);
disp(D)
3.2 标量乘法
v = [ 12 34 10 8];
m = 5 * v
3.3 向量逆置
r = [ 1 2 3 4 ]; % 行向量
tr = r'; % 进行逆置操作
v = [1;2;3;4]; % 列向量
tv = v';
disp(tr); disp(tv);
3.4 向量追加
MATLAB 允许您将向量附加到一起来创建新的向量。
如果您有两个包含n和m个元素的行向量r1和r2,则要创建一个包含n个元素和m个元素的行向量r,通过添加这些向量,您可以编写-
r = [r1,r2]
您还可以通过添加这两个向量来创建矩阵r,向量r2将是矩阵的第二行
r = [r1;r2]
但是,为此,两个向量都应具有相同数量的元素。
同样,您可以附加两个列向量c1和c2,其中n和m个元素数目。要创建由n个元素加上m个元素组成的列向量c,通过添加这些向量,您可以编写
c = [c1; c2]
您还可以通过添加这两个向量来创建矩阵c;向量c2将是矩阵的第二列
c = [c1, c2]
但是,为此,两个向量都应具有相同数量的元素。
r1 = [ 1 2 3 4 ];
r2 = [5 6 7 8 ];
r = [r1,r2]
rMat = [r1;r2]
c1 = [ 1; 2; 3; 4 ];
c2 = [5; 6; 7; 8 ];
c = [c1; c2]
cMat = [c1,c2]
3.5 向量大小
元素v1,v2,v3,…,vn的向量v的大小由以下公式给出
\[|v| = \sqrt{v_1^2 + v_2^2+ ...+v_n^2 } \]您需要采取以下步骤来计算向量的大小
-
使用array multiplication(.*)取向量与其本身的乘积。这将产生一个向量sv,其元素是向量v的元素的平方。
sv = v.* v;
-
使用sum函数获得sum向量v的元素的平方。这也称为向量v的点积。
dp = sum(sv);
-
使用sqrt函数获得总和的平方根,该平方根也是矢量v的大小。
mag = sqrt(dp);
v = [1: 2: 20]; % 快速生成向量,相当于python里面的range(1, 20, 2)
sv = v.* v; % 带元素的向量
% 作为v元素的平方
dp = sum(sv); % 平方和——点积
mag = sqrt(dp); % magnitude
disp('Magnitude:');
disp(mag);
3.6 向量积
两个向量a =(a1,a2,…,an)和b =(b1,b2,…,bn)的点积由下式给出:
\[ab=\sum_{k=1}^n{a_k\cdot b_k} \]我们使用dot(a, b);
计算点积
v1 = [2 3 4];
v2 = [1 2 3];
dp = dot(v1, v2); % 计算点积
disp('Dot Product:');
disp(dp);
3.7 等距元素
MATLAB允许您创建具有均匀间隔元素的向量。
要创建一个向量v,其中第一个元素为f,最后一个元素为l,且元素之间的差值为任意实数n,则写为:
v = [f : n : l]
实例:
v = [1: 2: 20];
sqv = v.^2;
disp(v);
disp(sqv);