(1)对于乘法、乘方和除法等三种运算,矩阵运算与数组运算的运算符及含义不同:矩阵运算按线性变换定义,使用通常符号;数组运算按对应元素运算定义,使用点运算符;
(2)数与矩阵加减、矩阵除法在数学上是没有意义的,在MATLAB中为简便起见,定义了这两类运算,其含义见表3.
表3 矩阵运算符 运算 符号 说明 转置 A' 加与减 A+B与A-B 同数组运算 数乘矩阵 k*A或A*k 同数组运算 矩阵乘法 A*B 矩阵乘方 A^k 数与矩阵加减 k+A与k-A k+A等价于k*ones(size(A))+A 矩阵除法 左除A\\B,右除B/A 它们分别为矩阵方程AX=B和XA=B的解 >> A=[1 2;3 4];B=[4 3;2 1]; >> 100+A ans =
101 102 103 104 >> A*B,A.*B %注意矩阵运算和数组运算的区别 ans =
8 5 20 13 ans =
4 6 6 4
>> A\\B,B/A,A.\\B,B./A %注意矩阵运算和数组运算的区别 ans =
-6.0000 -5.0000 5.0000 4.0000 ans =
-3.5000 2.5000 -2.5000 1.5000 ans =
4.0000 1.5000 0.6667 0.2500 ans =
4.0000 1.5000 0.6667 0.2500 4.数学函数
数组的数学函数也是按每个元素的运算,使用通常的函数符号,常用数学函数见表4
25
函数 意义 意义 sin 正弦 向0取整 cos 余弦 模余 tan 正切 除法余数 cot 余切 绝对值(模) asin 反正弦 指数函数 acos 反余弦 自然对数 sqrt 开方 以10为底的对数 >> A=[4 -1;3 2]; >> B=exp(A) B =
54.5982 0.3679 20.0855 7.3891 >> C=fix(B) C =
54 0 20 7 >> D=sin(C) D =
-0.5588 0 0.9129 0.6570 >> E=log(D)
Warning: Log of zero. E =
-0.5820 + 3.1416i -Inf -0.0911 -0.4201 5.关系与逻辑运算
MATLAB的关系运算和逻辑运算符都是对于元素的操作,其结果是特殊的逻辑数组(logical array)表5,“真”用1表示,“假”用0表示,而逻辑运算中,所有非零元素作为1(真)处理。
表5 关系运算和逻辑运算 运算符 含义 运算符 含义 < 小于 & 与 <= 小于等于 | 或 > 大于 ~ 非 >= 大于等于 all = = 等于 any ~= 不等于 >> A=-2:4,B=4:-1:-2 A =
-2 -1 0 1 2 3 4 B =
4 3 2 1 0 -1 -2
26
表4 数学函数 函数 fix mod rem abs exp log log10 >> A>B ans =
0 0 0 0 1 1 1 >> A==B ans =
0 0 0 1 0 0 0
>> A&B %逻辑运算中,所有非零元素作为1(真)处理 ans =
1 1 0 1 0 1 1 >> A|B ans =
1 1 1 1 1 1 1 >> find(abs(A)>=2) %返回绝对值大于或等于2的元素的下标 ans =
1 5 6 7 >> any(abs(A)>5) %若存在绝对值大于5的元素,返回1 ans = 0
>> all(abs(A)>5) %若所有元素绝对值大于5,返回1 ans = 0
四、字符串、元胞和结构
除数值(double)以外,常用的数据类型还有字符(char)、元胞(cell)和结构(structure),由此进一步组成字符数组(char array)、元胞数组(cell array)和结构数组(structure array).
1.字符串
MATLAB字符串用单引号对来标识,其数据类型为字符数组。 >> a1='Hello everyone' a1 =
Hello everyone >> a2='各位好' %注意单引号,不是双引号 a2 = 各位好
>> a=[a1,'.',a2,'.'] %字符串拼接 a =
Hello everyone.各位好. >> size(a) ans =
1 19 %共19个字符 >> double(a) ans =
27
Columns 1 through 8
72 101 108 108 111 32 101 118 Columns 9 through 16
101 114 121 111 110 101 46 47351 Columns 17 through 19
52923 47811 46 %中文ASCII码很大 >> a=char(ans) a =
Hello everyone.各位好.
数字字符串与数值之间也可以用num2str和str2num转换。一个数组的元素要么都是数值,要么都是字符串,数值转换后可以与字符串出现在同一数组中。
>> a=12;b=sqrt(a);
>> ['a=',num2str(a),',a的开方=',num2str(b)] ans =
a=12,a的开方=3.4641
MATLAB命令可以定义成一个字符串,使用eval可以使该字符串所表达的MATLAB命令得到执行。
>> fun='x.^2.*sin(x)'; >> x=1;eval(fun) ans =
0.8415
>> x=1:3;eval(fun) ans =
0.8415 3.6372 1.2701 2.元胞和结构
不管是数值数组还是字符数组,其数据结构必须是整齐的。首先数值和字符不能混合,其次小数组拼接成大数组时,其尺寸(size)必须相符(agree)。例如:
>> A=['first';'second'] %错误 ??? Error using ==> vertcat
All rows in the bracketed expression must have the same number of columns.
将不同类型、不同尺寸的数组,加大括号({}),可构成一个元胞。几个元胞可以构成元胞数组。
>> Ac1={'first';1:3};Ac2={'second';[1 2;3 4]}; >> Ac=[Ac1,Ac2] Ac =
'first' 'second' [1x3 double] [2x2 double] >> size(Ac) ans =
2 2 >> Ac(2,1) %小括号,查询Ac的第二行第一列元素 ans =
[1x3 double]
28