角矩阵,其余元素补0。 flipud(X) 使矩阵X沿水平轴上下翻转 flipud(a) 1 0 0 3 4 0 5 6 9 ans = 5 6 9 3 4 0 1 2 0 ans = 0 2 1 0 4 3 9 6 5 ans = 5 6 9 3 4 0 1 2 0 rot90(a) ans = 0 0 9 2 4 6 1 3 5 fliplr(X) 使矩阵X沿垂直轴左右翻转 fliplr(a) flipdim(X,dim) 使矩阵X沿特定轴翻转。dim=1,按行维翻转; dim=2,按列维翻转。 rot90(X) 使矩阵X逆时针旋转900 flipdim(a,1) 2.2.3字符串
在MATLAB中,字符串是作为字符数组来引入的; 一个字符串由多个字符组成,用单引号(’’)来界定;
字符串是按行向量进行存储的,每一字符(包括空格)是以其ASCII码的形式存放。
clear
str1='Hello'
str1 = Hello
str2='I like ''MATLAB''' %重复单引号来输入含有单引号的字符串
str2 =
I like 'MATLAB'
str3='你好!'
%支持中文
str3 = 你好!
1. 字符串占用的字节
whos
Name Size Bytes Class
str1 1x5 10 char array str2 1x15 30 char array str3 1x3 6 char array
Grand total is 23 elements using 46 bytes
2. 字符串函数
? length:用来计算字符串的长度(即组成字符的个数)。
? double:用来查看字符串的ASCII码储存内容,包括空格(ASCII码为32)。 ? char:用来将ASCII码转换成字符串形式。
? class或ischar:用来判断某一个变量是否为字符串。class函数返回char则表示为字符串,而ischar函数返回1表示为字符串。
? strcmp(x,y):比较字符串x和y的内容是否相同。返回值如果为1则相同,为0则不同。
? findstr(x,x1):寻找在某个长字符串x中的子字符串x1,返回其起始位置。 ? deblank(x ):删除字符串尾部的空格。
由于MATLAB将字符串以其相对应的ASCII码储存成一个行向量,因此如果字符串直接进行数值运算,则其结果就变成一般数值向量的运算,而不再是字符串的运算。
length(str1)
%字符串长度
ans = 5
x1=double(str1)
%查看字符串的ASCII码
x1 =
72 101 108 108 111 x2=str1+1 %字符串的数值运算
x2 =
73 102 109 109 112
char(x1)
%将ASCII码转换成字符串形式
ans = Hello
char(x2)
ans = Ifmmp
class(str1)
%判断变量类型
ans = char
class(x1)
ans = double
ischar(str1)
ans = 1
3. 使用一个变量来储存多个字符串 (1) 多个字符串组成一个新的行向量
将多个字符串变量直接用“,”连接,构成一个行向量,就可以得到一个新字符串变量。
clear
str1='Hello';
str2='I like ''MATLAB'''; str3='你好!'
str4=[str1,'! ',str2]
%多个字符串并排成一个行向量
str4 =
Hello! I like 'MATLAB'
(2) 使用二维字符数组
将每个字符串放在一行,多个字符串可以构成一个二维字符数组,但必须先在短字符串结尾补上空格符,以确保每个字符串(即每一行)的长度一样。否则MATLAB会提示出错:
str5=[str1;str3]
??? Error using ==> vertcat
All rows in the bracketed expression must have the same number of columns.
str5=[str1;str3,' ']
%将str3添加两个空格
str5 = Hello 你好!
(3) 使用str2mat、strvcat和char函数
使用专门的str2mat、strvcat和char函数可以构造出字符串矩阵,而不必考虑每行的字符数是否相等,总是按最长的设置,不足的末尾用空格补齐。
str6=str2mat(str1,str2,str3)
str6 =
Hello I like 'MATLAB' 你好!
str7=char(str1,str2,str3)
str7 =
Hello I like 'MATLAB'
你好!
str8=strvcat(str1,str2)
str8 =
Hello I like 'MATLAB' whos
Name Size Bytes Class
str1 1x5 10 char array str2 1x15 30 char array str3 1x3 6 char array str4 1x22 44 char array str5 2x5 20 char array str6 3x15 90 char array str7 3x15 90 char array str8 2x15 60 char array
Grand total is 186 elements using 350 bytes
5. 执行字符串
如果需要直接“执行”某一字符串,可以使用eval命令,效果就如同直接在MATLAB命令窗口内输入此命令。
str9='a=2*5'
str9 = a=2*5
eval(str9)
%执行字符串
a =
10
6. 显示字符串
字符串可以直接使用disp命令显示出来,即使后面加分号(;)也显示。
disp('请输入2*2的矩阵a')
请输入2*2的矩阵a
disp(str1)
Hello
2.2.4矩阵和数组运算
矩阵运算有明确而严格的数学规则,矩阵运算规则是按照线性代数运算法则定义的; 数组运算是按数组的元素逐个进行的。
1. 矩阵运算的函数 a =
1 2 3 4 5 6 7 8 9
表2.4 常用矩阵运算函数
例子 函数名 det(X) rank(X) 功能 计算方阵行列式 求矩阵的秩,得出的行列式不为零的最大方阵边长。 求矩阵的逆阵,当方阵X的det(X)不等于零,逆阵X-1才存在。X 与X-1相乘为单位矩阵。 输入 det(a) rank(a) 结果 ans = 0 ans = 2 Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.541976e-018. ans = 1.0e+016 * -0.4504 0.9007 -0.4504 0.9007 -1.8014 0.9007 -0.4504 0.9007 -0.4504 v = -0.2320 -0.7858 0.4082 -0.5253 -0.0868 -0.8165 -0.8187 0.6123 0.4082 d = 16.1168 0 0 0 -1.1168 0 0 0 -0.0000 ans = 1 5 9 l = 0.1429 1.0000 0 0.5714 0.5000 1.0000 1.0000 0 0 u = 7.0000 8.0000 9.0000 0 0.8571 1.7143 0 0 0.0000 inv(X) inv(a ) [v,d]=eig(X) 计算矩阵特征值和特征向量。如果方程Xv=vd存在非零解,则v为特征向量,d为特征值。 [v,d]=eig(a) diag(X) 产生X矩阵的对角阵 diag(a) [l,u]=lu(X) 方阵分解为一个准下三角方阵和一个上三角方阵的乘积。l为准下三角阵,必须交换两行才能成为真的下三角阵。 [l,u]=lu(a)