4. 矩阵和数组的数学函数
MATLAB中数学函数对数组的每个元素进行运算。数组的基本函数如表2.5所示。
表2.5 基本函数
函数名 abs sqrt real imag conj sin cos tan asin acos atan atan2 sinh cosh tanh 含义 绝对值或者复数模 平方根 实部 虚部 复数共轭 正弦 余弦 正切 反正弦 反余弦 反正切 第四象限反正切 双曲正弦 双曲余弦 双曲正切 函数名 rat mod round fix floor ceil sign rem exp log log10 pow2 bessel gamma 含义 有理数近似 模除求余 4舍5入到整数 向最接近0取整 向最接近-∞取整 向最接近-∞取整 符号函数 求余数留数 自然指数 自然对数 以10为底的对数 2的幂 贝赛尔函数 伽吗函数 【例2.15】使用数组的算术运算函数。
t=linspace(0,2*pi,6)
t =
0 1.2566 2.5133 3.7699 5.0265 6.2832
y=sin(t)
%计算正弦
y =
0 0.9511 0.5878 -0.5878 -0.9511 -0.0000
y1=abs(y)
%计算绝对值,将正弦曲线变成全波整流
y1 =
0 0.9511 0.5878 0.5878 0.9511 0.0000
1-exp(-t).*y
%计算按指数衰减的正弦曲线
ans =
1.0000 0.7293 0.9524 1.0136 1.0062 1.0000
S为标量,A、B为矩阵。
表2.6 矩阵和数组运算对比表
命令 A+B A-B S.*B 数组运算 含义 对应元素相加 对应元素相减 标量S分别与B元素的积 命令 A+B A-B S*B 矩阵运算 含义 与数组运算相同 与数组运算相同 与数组运算相同 A.*B S./B A./B B.\\A A.^S A.^S S.^B A.’ exp(A) log(A) sqrt(A) f(A) 数组对应元素相乘 S分别被B的元素左除 A的元素被B的对应元素除 结果一定与上行相同 A的每个元素自乘S次 S为小数时,对A各元素分别求非整数幂,得出矩阵 分别以B的元素为指数求幂值 非共轭转置,相当于conj(A’) 以自然数e为底,分别以A的元素为指数求幂 对A的各元素求对数 对A的各元素求平方根 求A各个元素的函数值 A*B S\\B A/B B\\A A^S A^S S^B A’ expm(A) logm(A) sqrtm(A) funm(A,’FUN’) 内维相同矩阵的乘积 B矩阵分别左除S 矩阵A右除B即A的逆阵与B相乘 A左除B(一般与上行不同) A矩阵为方阵时,自乘S次 S为小数时,方阵A的非整数乘方 B为方阵时,标量S的矩阵乘方 共轭转置 A的矩阵指数函数 A的矩阵对数函数 A的矩阵平方根函数 矩阵的函数运算 注意:
funm(A,’FUN’)要求A必须是方阵,“FUN”为矩阵运算的函数名。
5. 关系操作和逻辑操作 (1) 关系运算 关系操作符:
<、<=、>、>=、 = =(等于)、 ~=(不等于) 关系运算规则:
? 两个变量都是标量,则结果为真(1)或假(0)。
? 两个变量都是数组,则必须大小相同,结果也是同样大小的数组,数组的元素为0或1。
? 一个数组和一个标量,则把数组的每个元素分别与标量比较,结果为与数组大小相同的数组,数组的元素为0或1。
? <、<= 和 >、>=,仅对参加比较变量的实部进行比较, = = 和 ~= ,则同时对实部和虚部进行比较。
(2) 逻辑运算 逻辑操作符:
&(与)、|(或)、~(非)和xor(异或)。 &&(先决与)逻辑运算符是当该运算符的左边为1(真)时,才继续执行该符号右边的运算。
|| (先决或)逻辑运算符是该当运算符的左边为1(真)时,就不需要继续执行该符号右边的运算,而立即得出该逻辑运算结果为1(真);否则,就要继续执行该符号右边的运算。
逻辑运算规则:
? 在逻辑运算中,非0元素表示真(1),0元素表示假(0),逻辑运算的结果为0或1,逻辑运算法则如表2.7所示。
表2.7 逻辑运算
a 0 0 1 1 b 0 1 0 1 a & b 0 0 0 1 a | b 0 1 1 1 ~a 1 1 0 0 xor(a,b) 0 1 1 0 ? 两个变量都是标量,则结果为0、1的标量。
? 两个变量都是数组,则必须大小相同,结果也是同样大小的数组。
? 一个数组和一个标量,则把数组的每个元素分别与标量比较,结果为与数组大小相同的数组。
a=0;b=5; c=10; (a~=0)&&(b ans = 0 (a~=0)||(b ans = 1 【例2.16】数组的关系和逻辑运算,其中y1曲线如图2.3所示。 t=linspace(0,3*pi,10); y=sin(t) %计算正弦曲线 y = Columns 1 through 6 0 0.8660 0.8660 0.0000 -0.8660 -0.8660 Columns 7 through 10 -0.0000 0.8660 0.8660 0.0000 t1=(t t1 = 1 1 1 0 0 0 0 1 1 1 y1=t1.*y %得出0~π和2π~3π的半波整流 y1 = Columns 1 through 6 0 0.8660 0.8660 0 0 0 Columns 7 through 10 0 0.8660 0.8660 0.0000 (3) 函数运算 MATLAB中能得出真(1)和假(0)结果的函数有: 关系逻辑函数、工作状态判断函数、特殊数据判断函数和数据类型函数。 a = b= 1 Inf 0 1 0 2 1 0 表2.8 关系逻辑函数 函数名 all(A) 功能 判断A的列向量元素是否全非0,全非0则为1 例子 输入 all(a) 结果 ans = 0 1 any(A) 判断A的列向量元素中是否有非0元素,有则为1 判断A、B对应元素是否全相等,相等为1 判断A是否为空矩阵,为空则为1,否则为0 判断A的各元素值是否有限,是则为1 any(a) ans = 1 1 ans = 0 ans = 0 ans = 1 0 1 1 ans = 0 1 0 0 ans = 0 0 0 0 ans = 1 ans = 1 ans = 0 0 0 0 ans = 0 0 0 0 ans = 2 3 isequal(A,B) isequal(a,b) isempty(A) isempty(a) isfinite(A) isfinite(a) isinf(A) 判断A的各元素值是否无穷大,是则为1 isinf(a) isnan(A) 判断A的各元素值是否为NAN,是则为1 isnan(a) isnumeric(A) 判断数组A的元素是否全为数值型数组 判断数组A的元素是否全为实数,是则为1 判断A的各元素值是否为质数,是则为1 isnumeric(a) isreal(A) isreal(a) isprime(A) isprime(b) isspace(A) 判断A的各元素值是否为空格,是则为1 isspace(a) find(A) 寻找A数组非0元素的下标和值 find(b) 6. 运算符优先级 在MATLAB中各种运算符的优先级如下: '(矩阵转置)、^(矩阵幂)和.'(数组转置)、.^(数组幂) ? ~(逻辑非) ? *(乘)、/(左除)、\\(右除)和.*(点乘)、./(点左除)、.\\(点右除) ?+、-(加减) ?: (冒号) ?<、<=、>、>=、~= ?&(逻辑与) ? |(逻辑或) ? &&(先决与) ? ||(先决或) 2.2.5多维数组 1. 多维数组的创建 (1) 通过“全下标”元素赋值方式创建 a(:,:,2)=[1 2;3 4] b=[1 1;2 2] %创建三维数组 %先创建二维数组 b = 1 1 2 2 b(:,:,2)=5 %扩展数组 b(:,:,1) = 1 1 2 2 b(:,:,2) = 5 5 5 5 (2) 由函数ones、zeros、rand和randn直接创建 例如,用函数rand直接创建三维随机数组: rand(2,4,3) ans(:,:,1) = 0.9501 0.6068 0.8913 0.4565 0.2311 0.4860 0.7621 0.0185 ans(:,:,2) = 0.8214 0.6154 0.9218 0.1763 0.4447 0.7919 0.7382 0.4057 ans(:,:,3) = 0.9355 0.4103 0.0579 0.8132 0.9169 0.8936 0.3529 0.0099 (3) 利用函数生成数组 ? 将一系列数组沿着特定的维连接成一个多维数组 语法: cat(维,p1,p2,……) 说明:第一个参数维是指沿着第几维连接数组p1、p2等。 ? 按指定行列数放置模块数组生成多维数组 语法: repmat(p) repmat(p,行 列 页 ……) 说明:第一个输入变量p是用来放置的模块数组,后面的变量是要放在指定的各维。 ? 在总元素的数目不变的前提下重新确定数组的行列数来重组数组