MATLAB属于弱类型语言
,其变量不需要提前定义类型
❗️图中应补充逻辑型
整数类型 | 数值范围 | 转换函数 |
---|---|---|
有符号8位整数 | int8 | |
无符号8位整数 | 0~ 2 8 − 1 2^8-1 28−1 | uint8 |
有符号16位整数 | − 2 15 -2^{15} −215~ 2 15 − 1 2^{15}-1 215−1 | int 16 |
无符号16位整数 | 0~ 2 16 − 1 2^{16}-1 216−1 | uint16 |
有符号32位整数 | − 2 31 -2^{31} −231~ 2 31 − 1 2^{31}-1 231−1 | int32 |
无符号32位整数 | 0~ 2 32 − 1 2^{32}-1 232−1 | uint32 |
有符号64位整数 | − 2 63 -2^{63} −263~ 2 63 − 1 2^{63}-1 263−1 | int64 |
无符号64位整数 | 0~ 2 64 − 1 2^{64}-1 264−1 | uint 64 |
❗️ MATLAB中数值的默认存储类型时双精度浮点型,必须通过表中转换函数才能将双精度浮点型数值转换位指定的整数数值,MATLAB转换小数时,遵守四舍五入原则(向最接近的整数取整),当小数等于0.5时,按绝对值最大的方向取整整数,比如0.5取整就是1,-0.5取整就是-1
>> x = 0.5; y=0.49; z = -0.5;
>> xx = int16(x)
xx =
int16
1
>> yy = int32(y)
yy =
int32
0
>> zz = int32(z)
zz =
int32
-1
MATLAB中还有多种取整策略函数
函数 | 说明 | 举例 |
---|---|---|
round(a) | 向最接近的整数取整 小数部分是0.5时向绝对值大的方向取整 |
round(4.3) = 4 round(4.5) = 5 round(-4.5) = -5 |
fix(a) | 向0方向取整 | fix(4.3) = 4 fix(-4.9) = 4 |
floor(a) | 向不大于a的方向取整 | floor(4.3) = 4 floor(-4.3) = -5 |
ceil(a) | 向不小于a的方向取整 | ceil(4.3) = 5 ceil(-4.9) = -4 |
❗️ 在MATLAB中,整数与双精度浮点数,字符型运算的结果都是整数,且只有整数只能与相同类的整数或标量双精度值组合使用。
>> x = uint32(367.2) * uint32(20.3)
x =
uint32
7340
>> y = uint32(24.321) * 359.63
y =
uint32
8631
>> z = uint32(24.321) * uint16(359.63)
错误使用 *
整数只能与相同类的整数或标量双精度值组合使用。
>> whos
Name Size Bytes Class Attributes
x 1x1 4 uint32
y 1x1 4 uint32
浮点 类型 |
存储 位宽 |
各数据位用处 | 数值范围 | 转换 函数 |
---|---|---|---|---|
双精度 | 64 | 0~51位表示小数部 52~62表示指数部分 63位表示符号(0正,1负) |
-1.79769e+308~2.22507e-308 2.22507e-308~1.7969e+308 |
double |
单精度 | 32 | 0~22位表示小数部分 23~30表示指数部分 31位表示符号(0正,1负) |
-3.40282e+038~-1.17549e-038 1.17549e-038~3.40282e+038 |
single |
❗️单精度浮点数不能和整数型进行算术运算,双精度型与逻辑型、字符型进行运算时都返回双精度型;单精度与逻辑性字符型,和双精度运算时都返回单精度型
MATLAB中默认用字符i或j作为虚部标识,创建复数可以直接输入,或者使用complex函数
函数 | 说明 |
---|---|
real(z) | 返回复数z的实部 |
imag(z) | 返回复数z的虚部 |
abs(z) | 返回复数z的幅度 |
angle(z) | 返回复数z的幅角 |
conj(z) | 返回复数z的共轭复数 |
complex(a,b) | 以a为实部,b为虚部创建复数 |
>> a = 2 + 3i
a =
2.0000 + 3.0000i
>> x = rand(3) * 5
x =
4.0736 4.5669 1.3925
4.5290 3.1618 2.7344
0.6349 0.4877 4.7875
>> y = rand(3) * -8
y =
-7.7191 -7.6573 -1.1351
-1.2609 -3.8830 -3.3741
-7.7647 -6.4022 -7.3259
>> z = complex(x,y)
z =
4.0736 - 7.7191i 4.5669 - 7.6573i 1.3925 - 1.1351i
4.5290 - 1.2609i 3.1618 - 3.8830i 2.7344 - 3.3741i
0.6349 - 7.7647i 0.4877 - 6.4022i 4.7875 - 7.3259i
>> whos
Name Size Bytes Class Attributes
a 1x1 16 double complex
x 3x3 72 double
y 3x3 72 double
z 3x3 144 double complex
Inf
正无穷
-Inf
负无穷
NaN
非数值的值 一般源自0/0或Inf/Inf型的非正常运算
Inf :既可以通过直接输入Inf来创建无穷量,也可以通过Inf()这种函数形式创建无穷量,-Inf同理
NaN:与Inf相同
>> x = 1/0
x =
Inf
>> y = -1/0
y =
-Inf
>> z = log(0)
z =
-Inf
>> r = 0/0
r =
NaN
>> p = Inf/-Inf
p =
NaN
❗️NaN非数值量直接不相等!即NaN ~= NaN
默认情况下,MATLAB使用5位定点或浮点型显示格式
可通过Preferences(预设)对话框中的Command Window的设置修改数值显示方式
也可通过format函数进行设置
函数形式 | 说明 | 举例 |
---|---|---|
format short 或 format(‘short’) | 5位定点显示格式(默认) | 3.1416 |
format short e 或 format(‘short’,‘e’) | 5位带指数浮点显示格式 | 3.1416e+00 |
format long 或 format(‘long’) | 15位定点浮点显示格式 (单精度浮点数用7位) |
3.141592653589793 |
format long e 或 format(‘long’,‘e’) | 15位带指数浮点显示格式 (单精度浮点数用7位) |
3.141592653589793e+00 |
format bank 或 format(‘bank’) | 小数点后保留两位的显示格式 | 3.14 |
format rat 或 format(‘rat’) | 分数有理近似格式 | 355/113 |
❗️ rat全称rationa,format rat于format rational等效
>> origFormat = get(0,'format')
origFormat =
'short'
>> format('rat')
>> pi
ans =
355/113
>> format short e
>> pi
ans =
3.1416e+00
>> set(0,'format',origFormat) %使用set函数将之前保持的数值显示格式还原
>> get(0, 'format')
ans =
'short'
函数 | 用法 | 说明 |
---|---|---|
class | class(A) | 返回变量A的类型名称 |
isa | isa(A,‘class_name’) | 确定变量A是否是class_name的数据类型 |
isnumeric | isnumeric(A) | 确定A是否为数值类型 |
isinteger | isinteger(A) | 确定A是否为整数类型 |
isfloat | isfloat(A) | 确定A是否为浮点类型 |
isreal | isreal(A) | 确定A是否为实数 |
isnan | ianan(A) | 确定A是否为非数值量 |
isInf | isInf(A) | 确定A是否为无穷量 |
isfinite | isfinite(A) | 确定A是否为有限数值 |
常量符号 | 常量含义 |
---|---|
i 或 j | 虚数单位, i 2 = j 2 = − 1 i^2=j^2=-1 i2=j2=−1 |
Inf 或 inf | 正无穷大 |
NaN | 非数值量 |
pi | 圆周率的双精度表示 |
eps | 容差变量,当某量小于eps时可认定为0,即为浮点数的最小分辨率,PC上此值为 2 − 52 2^{-52} 2−52 |
Realmin | 最小浮点数,也可写作realmin,为 2 − 1022 2^{-1022} 2−1022 |
Realmax | 最大浮点数,也可写作realmax,为 2 1023 2^{1023} 21023 |
变量命名规则:
字母
,数字
,下划线
三类符号组成在MATLAB中,字符串用单引号表示,如s=‘I have a dream’
字符串实际时一个字符数组,每一个字符是字符数组的元素
>> s = 'Hello World'
s =
'Hello World'
>> whos
Name Size Bytes Class Attributes
s 1x11 22 char
算数运算符
运算符 | 名称 | 示例 | 法则或使用说明 |
---|---|---|---|
+ | 加 | C=A+B | 矩阵加法法则,即C(i,j) = A(i,j) + B(i,j) |
- | 减 | C=A-B | 矩阵减法法则,即C(i,j) = A(i,j) - B(i,j) |
* | 乘 | C=A*B | 矩阵乘法法则 |
/ | 右除 | C=A/B | 定义为线性方程组X*B=A的解,即C=A/B=A*B-1 |
\ | 左除 | C=A\B | 定义为线性方程组A*X=B的解,即C=A\B=A-1*B |
^ | 乘幂 | C=A^B | A、B其中有一个使标量时可运算 |
’ | 共轭转置 | B = A’ | B是A的共轭转置(转置后的复数时转置前复数的共轭复数) |
运算符 | 名称 | 示例 | 法则或使用说明 |
---|---|---|---|
.* | 数组乘 | C = A.*B | C(i,j) = A(i,j) * B(i,j) |
./ | 数组右除 | C = A./B | C(i,j) = A(i,j) / B(i,j) |
.\ | 数组左除 | C = A.\B | C(i,j) = A(i,j) / B(i,j) |
.^ | 数组乘幂 | C = A.^B | C(i,j) = A(i,j) ^ B(i,j) |
.’ | 转置 | B = A.’ | B是A的转置,不做复数共轭 |
数组加减于矩阵加减一致,不再列出
关系运算符
< 小于
,<= 小于等于
,> 大于
,>= 大于等于
,== 恒等于
,~= 不等于
逻辑运算符
单目逻辑运算符 ~ 非
比如~A
双目逻辑运算符 & 与
,| 或
,&& 先决与
,|| 先决非
比如A&B A&&B A|B A||B
运算符的优先级
优先次序 | 运算符 |
---|---|
最高 | ' 共轭转置 , ^ 矩阵乘幂 , .' 转置 ,.^ 数组乘幂 |
~ 逻辑非 |
|
* ,/ 矩阵右除 ,\ 矩阵左除 ,.* 数组乘 ,./ 数组右除 ,.\ 数组左除 |
|
+ , - ,: 冒号运算 |
|
关系运算符 | |
& | |
| | |
&& | |
最低 | || |
命令
通常是一个动词,一般没有括号,后可跟参数,如clear all
clc
等
很多命令也可通过函数方式调用,如clear('all')
命令有一个专门存放的函数库general
函数
不再赘述
表达式
不再赘述
语句
不再赘述
向量生成三种方法 直接输入法
,冒号表达式法
,函数法
直接输入法
>> A = [1 2 3]
>> B = [1;2;3]
>> C = [1,2,2]
A =
1 2 3
B =
1
2
3
C =
1 2 2
冒号表达式法
start_var:step:stop_var
start_var为起始值 step为步长 stop_var为终值
>> A = 1:2:10
>> B = 1:10
>> C = 10:-1:1
>> D = 10:2:4
>> E = 2:-1:10
A =
1 3 5 7 9
B =
1 2 3 4 5 6 7 8 9 10
C =
10 9 8 7 6 5 4 3 2 1
D =
空的 1×0 double 行矢量
E =
空的 1×0 double 行矢量
函数法
linespace函数
logspace(start_var, stop_var, n)产生从start_var开始,到stop_var为结束的n个元素的等差数列
logspace函数
logspace(start_var, stop_var, n) 表示产生从 1 0 s t a r t _ v a r 10^{start\_var} 10start_var 到 1 0 s t o p _ v a r 10^{stop\_var} 10stop_var包含n个元素的等比一维数组,n默认为50。
在MATLAB中,维数相同的行向量之间可以相互加减,维数相同的列向量也可以相互加减
标量数值可以与向量直接相乘除
>> A = [1 2 3 4 5]; B = 3:7; C = linspace(2,4,3);
>> AT = A'; BT = B';
>> E1 = A + B, E2 = A - B, F = AT - BT, G1 = 3 * A, G2 = B/3, H = A + C
E1 =
4 6 8 10 12
E2 =
-2 -2 -2 -2 -2
F =
-2
-2
-2
-2
-2
G1 =
3 6 9 12 15
G2 =
1.0000 1.3333 1.6667 2.0000 2.3333
矩阵维度必须一致。
% 这句是H = A+C 的报错信息
点积运算
即数量积,点积运算(A·B)的定义是参与运算的两向量各对应位置上元素相乘后,再将各乘积相加,其结果是一标量,而不是向量
dot函数
语法:dot(A,B),A和B是维数相同的两向量
>> A = 1:10; B = linspace(1,10,10); AT = A'; BT = B';
>> e = dot(A,B), f =dot(AT, BT)
e =
385
f =
385
叉积运算
即向量积又称矢量积,在数学描述中,向量A、B的叉积是一新向量C,C的方向垂直于A与B所决定的平面,用三维坐标表示:
A = A x i + A y j + A z k A = A_xi + A_yj + A_zk A=Axi+Ayj+Azk
B = B x i + B y j + B z k B = B_xi + B_yj + B_zk B=Bxi+Byj+Bzk
C = A × B = ( A y B z − A z B y ) i + ( A z B x − A x B z ) j + ( A x B y − A y B x ) k C = A × B = (A_yB_z - A_zB_y)i + (A_zB_x - A_xB_z)j + (A_xB_y - A_yB_x)k C=A×B=(AyBz−AzBy)i+(AzBx−AxBz)j+(AxBy−AyBx)k
cross 函数
语法:cross(A, B),该函数计算的是A、B叉积后各分量的元素值,且A和B只能是三维向量
>> A = 1:3, B = 3:5
A =
1 2 3
B =
3 4 5
>> E = cross(A,B)
E =
-2 4 -2
混合积运算
>> A = [1 2 3], B = [3 3 4], C = [3 2 1]
>> D = dot(C, cross(A,B))
A =
1 2 3
B =
3 3 4
C =
3 2 1
D =
4
矩阵元素是按照列的顺序存储元素的
元素的下标表示
单下标表示法
按列对元素编号,通过一个索引数字确定元素
>> A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> A(8) % 按列数第8个元素,即第三行第二列的6
ans =
6
全下标表示法
以A(i, j)的方式表示元素,i是行,j是列
>> A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> A(3,2) %与A(8)等效
ans =
6
矩阵元素的赋值
全下标赋值
>> A(1:2,1:3) = [1 1 1;1 1 1] %给数组的第一二行,第一二三列的元素赋值为1
A =
1 1 1
1 1 1
>> A(3,3) = 2 %给本不存在的元素赋值会扩充矩阵阶数,并补0
A =
1 1 1
1 1 1
0 0 2
单下标赋值
>> A(3:6) = [-1 1 1 -1] %可用一向量给单下标表示的连续多个矩阵元素赋值
A =
1 1 1
1 1 1
-1 -1 2
>> A(3) = 0; A(6) = 0
A =
1 1 1
1 1 1
0 0 2
全元素赋值
>> A(:) = 1:9 %将一向量以列优先顺序赋值给矩阵元素
A =
1 4 7
2 5 8
3 6 9
>> A(3, 4) = 16, B = [11 12 13; 14 15 16; 17 18 19; 0 0 0]
A =
1 4 7 0
2 5 8 0
3 6 9 16
B =
11 12 13
14 15 16
17 18 19
0 0 0
>> A(:) = B
A =
11 0 18 16
14 12 0 19
17 15 13 0
矩阵元素的删除
>> clear all
>> A(2:3, 2:3) = [1 1;2 2]
A =
0 0 0
0 1 1
0 2 2
>> A(2,:)=[] %删除第二行的所有列
A =
0 0 0
0 2 2
>> A(1:2) = [] %数组结构发生变化,若想保持结构,需使用A(:,1)=[]
A =
0 2 0 2
>> A = []
A =
[]
❗️若想删除某一列,又不破坏矩阵结构,要使用双下表索引删除,如删除矩阵第一列用A(:,1)=[],使用单下标索引会破坏矩阵结构,使其称为一维向量
直接输入法
>> x = 27; y = 3;
>> A = [1 2 3; 4 5 6];B = [2,3,4; 7,8,9; 12,2*6+1,14];
>> C = [3 4 5; 7 8 x/y; 10 11 12];
>> A,B,C
A =
1 2 3
4 5 6
B =
2 3 4
7 8 9
12 13 14
C =
3 4 5
7 8 9
10 11 12
抽取法
全下标抽取
>> A = [1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16]
A =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
>> B = A(1:3,2:3)
B =
2 3
6 7
10 11
>> C = A([1 3],[2 4])
C =
2 4
10 12
>> D = A(4,:) %此处冒号表示取所有列
D =
13 14 15 16
>> E = A([2 4],end) %end指这一行的最大维数
E =
8
16
单下标抽取
>> A = [1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16]
A =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
>> B = A([4:6;3 5 7;12:14])
B =
13 2 6
9 2 10
15 4 8
拼接法
行数与行数相同的小矩阵可以在列方向扩展拼接成更大的矩阵。同理,列数与列数相同的小矩阵可以在行方向扩展拼接成更大的矩阵
>> A = [1 2 3;4 5 6;7 8 9],B = [9 8;7 6;5 4], C = [4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
B =
9 8
7 6
5 4
C =
4 5 6
7 8 9
>> E = [A B;B A]
E =
1 2 3 9 8
4 5 6 7 6
7 8 9 5 4
9 8 1 2 3
7 6 4 5 6
5 4 7 8 9
>> F = [A;C]
F =
1 2 3
4 5 6
7 8 9
4 5 6
7 8 9
函数法
函数 | 功能 |
---|---|
zeros(m, n) | |
ones(m, n) | 生成m×n阶全1矩阵 |
rand(m, n) | 生成取值在0~1区间满足均匀分布的随机矩阵 |
randn(m,n) | 生成满足正态分布的随机矩阵 |
eye(m,n) | 生成m×n阶单位矩阵 |
函数 | 功能 |
---|---|
compan | Companion矩阵 |
magic | 魔方矩阵 |
gallery | Higham测试矩阵 |
pascal | 帕斯卡矩阵 |
hadamard | Hadamard矩阵 |
rosser | 经典对称特征值测试矩阵 |
hankel | Hankel矩阵 |
toeplitz | Toeplitz矩阵 |
hilb | Hilbert矩阵 |
vander | 范德蒙矩阵 |
invhilb | 反Hilbert矩阵 |
wilkinson | Wilkinson’s特征值测试矩阵 |
拼接函数和变形函数法
cat函数
repmat函数
❗️这两个函数会在第三章数组再学习(数组和矩阵本质上是一致的)
加载法
save和load的方法可将矩阵加载到文件并重新读取,具体参数后续有详解
求矩阵行列式的值
det函数
>> A = [3 2 4;1 -1 5;2 -1 3],D1 = det(A)
A =
3 2 4
1 -1 5
2 -1 3
D1 =
24
>> B = ones(3),D2 = det(B),C = pascal(4),D3=det(C)
B =
1 1 1
1 1 1
1 1 1
D2 =
0
C =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
D3 =
1
矩阵的加减、数乘与乘法
A = [ 1 3 2 − 1 ] A=\begin{bmatrix} 1&3\\ 2&-1\end{bmatrix} A=[123−1] B = [ 3 0 1 2 ] B=\begin{bmatrix} 3&0\\ 1&2\end{bmatrix} B=[3102]
求A+B,2A,2A-3B,AB
>> A = [1 3;2 -1];B=[3 0;1 2];
>> A+B
ans =
4 3
3 1
>> 2*A
ans =
2 6
4 -2
>> A*B
ans =
6 6
5 -2
求矩阵的逆矩阵
inv函数 求逆矩阵
>> A = [1 0 1;2 1 2;0 4 6]
A =
1 0 1
2 1 2
0 4 6
>> format rational
>> A1 = inv(A)
A1 =
-1/3 2/3 -1/6
-2 1 0
4/3 -2/3 1/6
矩阵的除法
{ x 1 + 4 x 2 − 7 x 3 + 5 x 4 = 0 2 x 2 + x 3 + x 4 = − 8 x 2 + x 3 + 3 x 4 = − 2 x 1 + x 3 − x 4 = 1 \begin{cases} x_1 + 4x_2 - 7x_3 + 5x_4 = 0\\ 2x_2 + x_3 + x_4 = -8\\ x_2 + x_3 + 3x_4 = -2\\ x_1 + x_3 - x_4 = 1\end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧x1+4x2−7x3+5x4=02x2+x3+x4=−8x2+x3+3x4=−2x1+x3−x4=1 求此方程组的解
>> A = [1 4 -7 6;0 2 1 1;0 1 1 3;1 0 1 -1],B = [0;-8;-2;1],x=A\B
A =
1 4 -7 6
0 2 1 1
0 1 1 3
1 0 1 -1
B =
0
-8
-2
1
x =
3.0000
-4.0000
-1.0000
1.0000
>> inv(A) * B %inv(A)*B等价于A/B 详见表2.1.11.1
ans =
3.0000
-4.0000
-1.0000
1.0000
求矩阵的秩
rank 函数 求矩阵的秩
>> A = [1 3 -9 3;0 1 -3 4;-2 -3 9 6], rb = rank(A)
A =
1 3 -9 3
0 1 -3 4
-2 -3 9 6
rb =
2
求矩阵的特征值与特征向量
eig 函数
[ X X X, λ \lambda λ] = eig(A)
eigs 函数
[ X X X, λ \lambda λ] = eigs(A),此函数采用迭代法求解,在规模上最多只能给出6个特征值和特征向量
>> A = [1 -3 3;3 -5 3;6 -6 4],[x,lambda] = eig(A)
A =
1 -3 3
3 -5 3
6 -6 4
x =
-0.4082 -0.8103 0.1933
-0.4082 -0.3185 -0.5904
-0.8165 0.4918 -0.7836
lambda =
4.0000 0 0
0 -2.0000 0
0 0 -2.0000
矩阵的乘幂与开方
sqrtm 专门用于矩阵的开方函数
>> A = [1 -3 3;3 -5 3;6 -6 4];
>> A^3
ans =
28 -36 36
36 -44 36
72 -72 64
>> sqrtm(A)
ans =
1.0000 + 0.7071i -1.0000 + 0.7071i 1.0000 - 0.7071i
1.0000 - 0.7071i -1.0000 + 2.1213i 1.0000 - 0.7071i
2.0000 - 1.4142i -2.0000 + 1.4142i 2.0000 - 0.0000i
❗️ 矩阵的乘法和开方运算都是以矩阵作为一个整体的运算,而不是针对矩阵中的每个元素施行
矩阵的指数与对数
expm 函数
矩阵指数运算,最为常用的一个。除此之外还有expm1 expm2 expm3
logm函数
矩阵对数运算
>> A = [1 -1 1;2 -4 1;1 -5 3];
>> Ae = expm(A)
Ae =
1.3719 -3.7025 4.4810
0.3987 -2.3495 2.9241
-2.5254 -7.6138 9.5555
>> Ael = logm(Ae)
Ael =
1.0000 -1.0000 1.0000
2.0000 -4.0000 1.0000
1.0000 -5.0000 3.0000
矩阵转置
transpose 非共轭转置
ctranspose 共轭转置
>> A = [1 2 3+2i; 4 5 6; 7 8 9]
>> B = A'
B =
1.0000 + 0.0000i 4.0000 + 0.0000i 7.0000 + 0.0000i
2.0000 + 0.0000i 5.0000 + 0.0000i 8.0000 + 0.0000i
3.0000 - 2.0000i 6.0000 + 0.0000i 9.0000 + 0.0000i
>> C = A.'
C =
1.0000 + 0.0000i 4.0000 + 0.0000i 7.0000 + 0.0000i
2.0000 + 0.0000i 5.0000 + 0.0000i 8.0000 + 0.0000i
3.0000 + 2.0000i 6.0000 + 0.0000i 9.0000 + 0.0000i
>> D = transpose(A)
D =
1.0000 + 0.0000i 4.0000 + 0.0000i 7.0000 + 0.0000i
2.0000 + 0.0000i 5.0000 + 0.0000i 8.0000 + 0.0000i
3.0000 + 2.0000i 6.0000 + 0.0000i 9.0000 + 0.0000i
>> E = ctranspose(A)
E =
1.0000 + 0.0000i 4.0000 + 0.0000i 7.0000 + 0.0000i
2.0000 + 0.0000i 5.0000 + 0.0000i 8.0000 + 0.0000i
3.0000 - 2
矩阵的提取与翻转
函数及语法 | 说明 |
---|---|
triu(A) | 提取矩阵上三角元素,其余补0 |
tril(A) | 提取矩阵下三角元素,其余补0 |
diag(A) | 提取矩阵对角线元素 |
fliplr(A) | 左右翻转矩阵A |
flipup(A) | 上下翻转矩阵A |
flipdim(A,k) | k指定的方向翻转矩阵 k=1相当于flipup,k=2相当于fliplr |
rot90(A,k) | 把A逆时针旋转k*90度,k不指定时默认为1 |
给字符串变量赋值
>> S1 = 'Hello World',S2 = '你好世界',S3 = 'Hello World 你好世界'
S1 =
'Hello World'
S2 =
'你好世界'
S3 =
'Hello World 你好世界'
一维字符数组的生成
>> Sa = ['I love my teacher' ',I love more' ' profounfly']
Sa =
'I love my teacher,I love more profounfly'
>> Sb = char('a':2:'r')
Sb =
'acegikmoq'
>> Sc = char(linspace('e','t',10))
Sc =
'efhjkmoprt'
求字符串的长度
length函数 与 size 函数
❗️ length()只能从各维中挑出最大维的数值大小,而size()则以一个向量的形式给出各维的数值大小,length() = max(size()),但对于一维字符数组来说,其结果相同
>> Sa = ['I love my teacher' ',I love truths more' ' profounfly'];
>> length(Sa)
ans =
47
>> size(Sa)
ans =
1 47
字符串与一维数值数组的相互转换
abs double char setstr
>> S1 = 'I am nobody';
>> As1 = abs(S1)
As1 =
73 32 97 109 32 110 111 98 111 100 121
>> As2 = double(S1)
As2 =
73 32 97 109 32 110 111 98 111 100 121
>> char(As1)
ans =
'I am nobody'
>> char(As2)
ans =
'I am nobody'
>> setstr(As2)
ans =
'I am nobody'
比较字符串
strcmp函数
语法:strcmp(S1, S2)
当S1与S2完全相同时,返回1;否则返回0
>> S1 = 'I am nobody';
>> S2 = 'I am nobody.';
>> strcmp(S1,S2)
ans =
logical
0
查找字符串
findstr 函数
语法:findstr(string, substring)
从长字符串string中查找子字符串substring,返回的结果值为子串在长串中的起始位置
>> S1 = 'Do you wanna build a snowman?';
>> S2 = 'snowman';
>> S3 = 'nothing';
>> findstr(S1,S2)
ans =
22
>>findstr(S1,S3) %找不到时,返回空数组
ans =
[]
显示字符串
display 函数 类似于python中的print,c语言中的printf
>> display('Hello World')
Hello World
>>display 'Hello World'
Hello World
>> S1 = '路修远以多艰兮,';
>> S2 = '腾众车使径侍。';
>> S3 = '路不周以左转兮,';
>> S4 = '指西海以为期!';
>> S = [S1;S2,' ';S3;S4,' '] %此方法要求字符数相同,不够要补空格
S =
4×8 char 数组
'路修远以多艰兮,'
'腾众车使径侍。 '
'路不周以左转兮,'
'指西海以为期! '
>> S = [S1;S2;S3;S4] %字符数不同,报错
错误使用 vertcat
串联的矩阵的维度不一致。
可将字符串连接成二位数组的函数有多个,主要有 char() strvcat() str2mat() 这三个函数
>> S1a = 'I''m nobody,'; S1b = ' who are you?'; % 注意句中引号的处理
>> S2 = 'Are you nobody too?';
>> S3 = 'Then there''s a pair of us.';
>> SS1 = char([S1a,S1b],S2,S3)
SS1 =
3×26 char 数组
'I'm nobody, who are you? '
'Are you nobody too? '
'Then there's a pair of us.'
>> SS2 = strvcat(strcat(S1a,S1b),S2,S3)
S2 =
3×26 char 数组
'I'm nobody, who are you? '
'Are you nobody too? '
'Then there's a pair of us.'
>> SS3 = str2mat(strcat(S1a,S1b),S2,S3)
SS3 =
3×26 char 数组
'I'm nobody, who are you? '
'Are you nobody too? '
'Then there's a pair of us.'
❗️ strcat()
是将字符串沿横向连接成更长的字符串,strvcat()
是将字符串沿纵向连接成二维字符数组