感谢大家观看
你所做的事情,也行暂时看不到成功,但不要灰心,你并不是没有成长,而是在扎根.
前情提要
本篇文章将会分多次发放(原因内容太长,导致写的是否微信卡崩了🙃), 目的在于从基础的Matlab的教程开始慢慢的深入. 如果大家看到该文章有些格式上的错误或内容上的错误, 欢迎评论指正.
Matlab基础入门
在MATLAB中使用分号;
分号;
表示结束语句
如果要
抑制
和隐藏表达式
的MATLAB输出
,请在表达式后添加
分号
添加注释
百分比符号%
用于指示注释行
9
MATLAB还可以使用块注释运算符
%{
和%}
编写 一段注释 .
常用的运算符和特殊字符
运算符 | 使用说明 |
---|---|
+ | 相加; 加法运算符 |
- | 相减; 减法运算符 |
* | 标量和矩阵乘法运算符 |
.* | 阵列乘法运算符 |
^ | 标量和矩阵求幂运算符 |
.^ | 阵列求幂运算符 |
\ | 左除法运算符 |
/ | 右除法运算符 |
.\ | 阵列左除法运算符 |
./ | 右除法运算符 |
: | 冒号; 生成规则间隔的元素,并表示整个行或列 |
( ) | 括号; 包含函数参数和数组索引; 覆盖优先级 |
[ ] | 括号; 罩住阵列元素 |
. | 小数点 |
… | 省略号; 行连续运算符 |
, | 逗号; 分隔一行中的语句和元素 |
; | 分号; 分隔列并抑制输出显示 |
% | 百分号;指定一个注释并指定格式 |
_ | 引用符号和转置运算符 |
._ | 非共轭转置运算符 |
= | 赋值运算符 |
特殊变量和常数
名称 | 含义 |
---|---|
ans | 最近的回应/回答 |
eps | 浮点精度精度 |
pi | 数字π |
Inf | ∞ |
i , j | 虚构单位√-1 |
.Nan | 未定义的数值结果,非数字 |
保存工作
save
命令用于在工作空间中保存所有变量
,它在当前目录中,以.mat
作为扩展名的文件。
save mymat
可以随时使用load
命令重新加载文件
load mymat
变量历史
who
命令显示使用过的所有变量名
>> who
您的变量为:
ans x y
whos
命令更多地显示变量
当前在内存中的变量
每个变量的类型
每个变量的内存分配
是否是复合的变量
执行结果如下
>> whos
Name Size Bytes Class Attributes
ans 1x1 8 double
x 1x1 8 double
y 1x1 8 double
清除命令
从存储器中删除所有(或指定的)变量
% it will delete x, won't display anything
长任务
长任务可以通过使用省略号
...
扩展到另一行
0;
等价于
0;
格式命令
默认情况下,MATLAB显示四位小数位数。这称为:短格式。但是,如果要更精确,则需要使用format
命令。format long
命令显示十进制后的16位数字。
>> format long
>> x = 7 + 10/3 + 5 ^ 1.2
x =
17.231981640639408
>> format long
>> x = 7 + 10/3 + 5 ^ 1.2
x =
17.2320
format bank
命令将数字舍入到小数点后两位
>> format bank
>> daily_wage = 177.45;
>> weekly_wage = daily_wage * 6
weekly_wage =
1064.70
MATLAB使用指数符号显示大数字。format short e
命令以指数形式显示四位小数加上指数。
>> format short e
>> 4.678 * 4.9
ans =
2.2922e+01
format long e
命令允许以指数形式显示十六位小数加上指数
>> format long e
>> x = pi
x =
3.141592653589793e+00
format rat
命令给出计算结果最接近的合理表达式
rat
创建向量
向量是数字的一维数组, MATLAB允许创建两种类型的向量:
行向量
列向量
行向量是通过用方括号中的元素集合来创建的,使用
空格
或逗号
分隔元素
1,
计算相加
7
列向量通过用方括号中的元素集合来创建,使用分号
;
来分隔元素
7;
创建矩阵
矩阵是数字的二维数组
在MATLAB中,通过将每行作为一系列或
,
分隔的元素输入矩阵,并以;
分隔一行。
创建一个
3x3
的矩阵:
>> m = [
管理会话的命令
命令 | 描述说明 |
---|---|
clc | 清除命令窗口 |
clear | 从内存中删除变量 |
exist | 检查文件或变量是否存在 |
global | 声明变量为全局变量 |
help | 搜索帮助主题 |
lookfor | 搜索帮助关键字的条目 |
quit | 停止MATLAB |
who | 列出当前变量 |
whos | 列出当前变量(长显示详细信息) |
使用系统命令
MATLAB提供了各种有用的命令来处理系统, 它还为其他系统相关活动提供各种命令
下表显示了一些常用的系统相关命令
命令 | 描述说明 |
---|---|
cd | 更改当前目录(进入指定目录) |
date | 显示当前日期 |
delete | 删除文件 |
diary | 打开/关闭日记文件记录 |
dir | 列出当前目录下的所有文件 |
load | 从文件加载工作区变量 |
path | 显示搜索路径 |
pwd | 显示当前目录 |
save | 将工作空间变量保存在文件中 |
type | 显示文件的内容 |
what | 列出当前目录中的所有MATLAB文件 |
wklread | 读取.wk1 电子表格文件 |
输入和输出命令
MATLAB提供以下输入和输出相关命令
命令 | 描述说明 |
---|---|
disp | 显示数组或字符串的内容 |
fscanf | 从文件读取格式化数据 |
format | 控制屏幕显示格式 |
fprintf | 对屏幕或文件执行格式化的写入 |
input | 显示提示并等待输入 |
; | 禁止打印显示 |
fscanf
和fprintf
命令的行为类似于C语言中的scanf
和printf
函数。它们支持以下格式代码
命令 | 描述说明 |
---|---|
%s | 格式化为字符串 |
%d | 格式化为字符串整数值 |
%f | 格式化为浮点值 |
%e | 格式化为科学记数法的浮点值 |
%g | 格式最紧凑的形式:%f 或%e 。 |
\n | 在输出字符串中插入一个换行 |
\t | 在输出字符串中插入制表符 |
格式化
format
函数具有以下用于数字显示的形式
命令 | 描述说明 |
---|---|
format short | 4位十进制数(默认) |
format long | 16位数字 |
format short e | 5位数加上指数 |
format long e | 16位加上指数 |
format bank | 两位十进制数字 |
format + | 正,负或零 |
format rat | 有理近似 |
format compact | 禁止一些换行符 |
format loose | 重置为较不紧凑的显示模式 |
向量,矩阵和数组命令
下表显示了用于处理数组,矩阵和向量的各种命令
命令 | 描述说明 |
---|---|
cat | 连接数组 |
find | 查找非零元素的索引 |
length | 计算元素数量 |
linspace | 创建规则间隔的向量 |
logspace | 创建对数间隔向量 |
max | 返回最大的元素 |
min | 返回最小的元素 |
prod | 产生的每列 |
reshape | 改变大小 |
size | 计算数组大小 |
sort | 对每列进行排序 |
sum | 对每列进行求和 |
eye | 创建一个单位矩阵 |
ones | 创建一个数组 |
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 | 创建茎图 |
.M文件
MATLAB允许编写两种程序文件
脚本
脚本文件是以
.m
扩展名的程序文件在这些文件中,可以编写一系列要一起执行的命令
脚本不接受输入,不返回任何输出
它们对工作空间中的数据进行操作
函数
函数文件也是扩展名为
.m
的程序文件。函数可以接受输入和返回输出内部变量是函数的局部变量
要创建脚本文件,需要使用文本编辑器。可以通过两种方式打开MATLAB编辑器:
使用命令提示符
使用IDE
如果使用命令提示符,请在命令提示符下键入
edit
并回车,这将打开编辑器可以直接键入
edit
,然后直接输入文件名(扩展名为.m
)
edit
%或者
edit newfile.m
上述命令将在默认的MATLAB目录中创建该文件。如果要将所有程序文件存储在特定文件夹
中,则必须提供整个路径
在命令行中也可以创建文件夹,如:创建一个名为worksplace
的文件夹。在命令提示符下键入以下命令>>
% create directory progs under default directory
如果使用IDE,请选择新建 -> 脚本
。 这也打开编辑器并创建一个名为Untitled的文件。在输入代码后命名并保存文件。
在编辑器中键入以下代码 -
6000;
创建并保存文件后,可以通过两种方式运行
单击编辑器窗口上的
运行
按钮只需在命令提示符下键入文件名(无扩展名)即可:>> worksplace
MATLAB数据类型
MATLAB提供15
种基本数据类型。每种数据类型存储矩阵或数组形式的数据。矩阵或数组的最小值是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类构造的对象 |
示例
'Hello World!'
数据类型转换
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 | 在工作区中列出变量,其大小和类型 |
示例
使用以下代码创建脚本文件
3
result is
3
MATLAB中的运算符
既可用于标量数据也可用于非标量数据
MATLAB允许以下类型的基本操作
算术运算符
关系运算符
逻辑运算符
按位运算符
集合运算符
算术运算符
MATLAB允许两种不同类型的算术运算
矩阵算术运算
数组算术运算
矩阵算术运算与线性代数中定义的相同
在一维和多维数组中,逐个元素执行数组运算
矩阵运算符和数组运算符由句点符号
.
区分
然而,由于对于矩阵和阵列的加减运算是相同的,因此对于这两种情况,运算符相同
运算符 | 描述说明 |
---|---|
+ | 加法或一元加法运算。A + B 表示相加存储在变量A 和B 中的值。A 和B 必须具有相同的大小,除非是标量。 标量可以添加到任何大小的矩阵。 |
- | 减法或一元减法运算。 A-B 表示从A 中减去B 的值。A 和B 必须具有相同的大小,除非是标量。可以从任何大小的矩阵中减去标量。 |
* | 矩阵乘法。 C = A * B 是矩阵A 和B 的线性代数乘积。更准确地说,执行公式:,对于非标量A 和B ,A 的列数必须等于B 的行数。标量可以乘以任何大小的矩阵。 |
.* | 阵列乘法。 A .* B 是数组A 和B 的逐个元素乘积。A 和B 必须具有相同的大小,除非它们之一是标量。 |
/ | 数组乘法。A .* B 是数组A 和B 的逐个元素乘积。A 和B 必须具有相同的大小,除非它们之一是标量。 |
./ | 数组右除。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是不规则或几乎单数,将显示警告消息。 |
.\ | 阵列左除。A .\ B 是具有元素B(i,j)/ A(i,j) 的矩阵。A 和B 必须具有相同的大小,除非它们之一是标量。 |
^ | 矩阵 X ^ p 是X 的P 次幂,如果p 是标量。 如果p 是整数,则通过重复平方来计算幂值。 如果整数为负,则X 首先倒置。 对于p 的其他值,计算涉及特征值和特征向量,使得如果[V,D] = eig(X) ,则X ^ p = V * D. ^ p / V 。 |
.^ | 阵列幂值, A ^ B 是B(i,j) 到A(i,j) 的幂矩阵。A 和B 必须具有相同的大小,除非它们之一是标量。 |
' | 矩阵转置。 ' 是A 的线性代数转置。对于复数矩阵,这是复共轭转置。 |
.' | 数组转置。.' 是A 的数组转置。对于复数矩阵,这不涉及共轭。 |
示例
以下示例显示了算术运算符对标量数据的使用。使用以下代码创建脚本文件
10;
运行文件时,会产生以下结果
c = 30
d = -10
e = 200
f = 0.50000
g = 2
z = 343
关系运算符
关系运算符也可以用于标量和非标量数据。数组的关系运算符在两个数组之间执行逐个元素的比较,并返回相同大小的逻辑数组,如果为真,则元素设置为逻辑1(true)
,如果为假,则元素设置为逻辑0(false)
。
操作符 | 函数 | 说明描述 |
---|---|---|
< | lt() | 小于 |
<= | le() | 小于或等于 |
> | gt() | 大于 |
>= | ge() | 大于或等于 |
== | eq() | 等于 |
~= | ne() | 不等于 |
100;
result is:
200
除了上述关系运算符之外,MATLAB还提供以下用于相同目的的函数
函数 | 描述 |
---|---|
eq(a, b) | 测试a 是否等于b |
ge(a, b) | 测试a 是否大于或等于b |
gt(a, b) | 测试a 是否大于b |
le(a, b) | 测试a 是否小于或等于b |
lt(a, b) | 测试a 是否小于b |
ne(a, b) | 测试a 是否不等于b |
isequal | 测试数组以获得相等性 |
isequaln | 测试数组相等,将NaN 值视为相等 |
% comparing two values
result is
200
逻辑运算符
MATLAB提供两种类型的逻辑运算符和函数:
逐元素 - 这些运算符对逻辑阵列的相应元素进行操作。
短路 - 这些运算符在标量和逻辑表达式上运行。
元素逻辑运算符在逻辑数组上运行逐个元素。符号&
,|
和〜
是逻辑数组运算符AND
,OR
和NOT
。
短路逻辑运算符允许逻辑运算短路。符号&&
和||
是逻辑短路运算符AND
和OR
5;
Line 1 - Condition is true
Line 2 - Condition is true
Line 3 - Condition is not true
Line 4 - Condition is true
位运算
按位运算符对位执行,并执行逐位运算。&
,|
和^
的真值表如下
p | q | p&q | p或q | p^q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
由于我使用的是markdown的语法写的文章,而又因为表格与|
冲突,因此用或
代替|
.
假设A = 60
和B = 13
现在以二进制格式,它们将如下所示:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
MATLAB提供了诸如按位与
和按位或
以及按位非
操作,移位操作等位操作的各种功能。
下表显示了常用的按位操作:
方法 | 目的 |
---|---|
bitand(a, b) | 整数a 和b 的位与AND 操作 |
bitcmp(a) | a 的比特补码 |
bitget(a,pos) | 在整数数组a 中,获取指定的位置pos 位字节 |
bitor(a, b) | 整数a 和b 的逐位OR 操作 |
bitset(a, pos) | 设置在指定pos 处的位字节 |
bitshift(a, k) | 返回向左移位k 字节,相当于乘以2^k 。 k 的负值对应于向右移位或除以2^k, 并舍入到最接近的整数到负无穷大。任何溢出位都被截断 |
bitxor(a, b) | 整数a 和b 的逐字节位XOR 操作 |
swapbytes | 交换字节排序 |
60;
result is
c = 12
c = 61
c = 49
c = 240
c = 15
集合操作
MATLAB为集合操作提供了各种功能,如联合,交集和集合成员的测试等。
函数 | 描述 |
---|---|
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 (真),否则返回逻辑0 (假)。输入A 可以是一个向量,也可以是N-by-1 或1-by-N 的字符串数组。 如果A 和sort(A) 的输出相等,则认为A 被排序。 |
issorted(A, ‘rows’) | 如果二维矩阵A 的行按排序顺序返回逻辑1 (真),否则返回逻辑0 (假)。 如果A 和排序(A) 的输出相等,则认为矩阵A 被排序。 |
setdiff(A,B) | 设置两个数组的差异; 返回A 中不在B 中的值。返回的数组中的值按排序顺序排列。 |
setdiff(A,B,’rows’) | 将A 的每一行和B 的每一行视为单个实体,并从不在B 中的A 返回行。返回的矩阵的行按排序顺序排列。'rows' 选项不支持单元格数组。 |
setxor | 设置两个数组的异或 |
union | 设置两个数组的并集 |
unique | 使数组中的值唯一 |
下期将会进入令人激动的基本的决策语句, 并会介绍Matlab的矩阵包括它们的用法.
References
https://www.yiibai.com/matlab/matlab_syntax.html
本人借鉴以上网站,并对每一个案例进行测试以及改正; 并且希望通过这几篇文章使查阅matlab资料不在如此麻烦,有一个统一的整理, 轻松学习matlab.希望大家喜欢🤪
欢迎关注本人的简书----用户名:Alita_dream