2.1.2 其他常用函数
函数 fix
功能 朝零方向取整
格式 B = fix(A) %对A的每一个元素朝零的方向取整数部分,返回与A同维的数组。对于复数参量A,则返回一复数,其分量的实数与虚数部分分别取原复数的、朝零方向的整数部分。
例2-14
>>A = [-1.9, -0.2, 3.1415926, 5.6, 7.0, 2.4+3.6i];
>>B = fix(A)
计算结果为:
B =
Columns 1 through 4
-1.0000 0 3.0000 5.0000
Columns 5 through 6
7.0000 2.0000 + 3.0000i
函数 roud
功能 朝最近的方向取整。
格式 Y = round(X) %对X的每一个元素朝最近的方向取整数部分,返回与X同维的数组。对于复数参量X,则返回一复数,其分量的实数与虚数部分分别取原复数的、朝最近方向的整数部分。
例2-15
>>A = [-1.9, -0.2, 3.1415926, 5.6, 7.0, 2.4+3.6i];
>>Y = round(A)
计算结果为:
Y =
Columns 1 through 4
-2.0000 0 3.0000 6.0000
Columns 5 through 6
7.0000 2.0000 + 4.0000i
函数 floor
功能 朝负无穷大方向取整
格式 B = floor(A) %对A的每一个元素朝负无穷大的方向取整数部分,返回与A同维的数组。对于复数参量A,则返回一复数,其分量的实数与虚数部分分别取原复数的、朝负无穷大方向的整数部分。
例2-16
>>A = [-1.9, -0.2, 3.1415926, 5.6, 7.0, 2.4+3.6i];
>>F = floor(A)
计算结果为:
F =
Columns 1 through 4
-2.0000 -1.0000 3.0000 5.0000
Columns 5 through 6
7.0000 2.0000 + 3.0000i
函数 rem
功能 求作除法后的剩余数
格式 R = rem(X,Y) %返回结果X - fix(X./Y).*Y,其中X、Y应为正数。若X、Y为浮点数,由于计算机对浮点数的表示的不精确性,则结果将可能是不可意料的。fix(X./Y)为商数X./Y朝零方向取的整数部分。若X与Y为同符号的,则rem(X,Y)返回的结果与mod(X,Y)相同,不然,若X为正数,则rem(-X,Y) = mod(-X,Y) - Y。该命令返回的结果在区间[0,sign(X)*abs(Y)],若Y中有零分量,则相应地返回NaN。
例2-17
>>X = [12 23 34 45];
>>Y = [3 7 2 6];
>>R = rem(X,Y)
计算结果为:
R =
0 2 0 3
函数 ceil
功能 朝正无穷大方向取整
格式 B = floor(A) % 对A的每一个元素朝正无穷大的方向取整数部分,返回与A同维的数组。对于复数参量A,则返回一复数,其分量的实数与虚数部分分别取原复数的、朝正无穷大方向的整数部分。
例2-18
>>A = [-1.9, -0.2, 3.1415926, 5.6, 7.0, 2.4+3.6i];
>>B = ceil(A)
计算结果为:
B =
Columns 1 through 4
-1.0000 0 4.0000 6.0000
Columns 5 through 6
7.0000 3.0000 + 4.0000i
函数 exp
功能 以e为底数的指数函数
格式 Y = exp(X) %对参量X的每一分量,求以e为底数的指数函数Y。X中的分量可以为复数。对于复数分量如,z = x +i*y,则相应地计算:e^z = e^x*(cos(y) + i*sin(y))。
例2-19
>>A = [-1.9, -0.2, 3.1415926, 5.6, 7.0, 2.4+3.6i];
>>Y = exp(A)
计算结果为:
Y =
1.0e+003 *
Columns 1 through 4
0.0001 0.0008 0.0231 0.2704
Columns 5 through 6
1.0966 -0.0099 - 0.0049i
函数 expm
功能 求矩阵的以e为底数的指数函数
格式 Y = expm(X) %计算以e为底数、x的每一个元素为指数的指数函数值。若矩阵x有小于等于零的特征值,则返回复数的结果。
说明 该函数为一内建函数,它有三种计算算法:
(1)使用文件expm1.m中的用比例法与二次幂算法得到的Pad近似值;
(2)使用Taylor级数近似展开式计算,这种计算在文件expm2.m中。但这种一般计算方法是不可取的,通常计算是缓慢且不精确的;
(3)在文件expm3.m中,先是将矩阵对角线化,再把函数计算出相应的的特征向量,最后转换过来。但当输入的矩阵没有与矩阵阶数相同的特征向量个数时,就会出现错误。
例2-20
>>A=hilb(4);
>>Y = expm(A)
计算结果为:
Y =
3.2506 1.2068 0.8355 0.6417
1.2068 1.7403 0.5417 0.4288
0.8355 0.5417 1.4100 0.3318
0.6417 0.4288 0.3318 1.2729
函数 log
功能 自然对数,即以e为底数的对数。
格式 Y = log(X) %对参量X中的每一个元素计算自然对数。其中X中的元素可以是复数与负数,但由此可能得到意想不到的结果。若z = x + i*y,则log对复数的计算如下:log (z) = log (abs (z)) + i*atan2(y,x)
例2-21 下面的语句可以得到无理数π的近似值:
>>Pi = abs(log(-1))
计算结果为:
Pi =
3.1416
函数 log10
功能 常用对数,即以10为底数的对数。
格式 Y = log10(X) %计算X中的每一个元素的常用对数,若X中出现复数,则可能得到意想不到的结果。
例2-22
>>L1 = log10(realmax) % 由此可得特殊变量realmax的近似值
>>L2 = log10(eps) % 由此可得特殊变量eps的近似值
>>M = magic(4);
>>L3 = log10(M)
计算结果为:
L1 =
308.2547
L2 =
-15.6536
L3 =
1.2041 0.3010 0.4771 1.1139
0.6990 1.0414 1.0000 0.9031
0.9542 0.8451 0.7782 1.0792
0.6021 1.1461 1.1761 0
函数 sort
功能 把输入参量中的元素按从小到大的方向重新排列
格式 B = sort(A) %沿着输入参量A的不同维的方向、从小到大重新排列A中的元素。A可以是字符串的、实数的、复数的单元数组。对于A中完全相同的元素,则按它们在A中的先后位置排列在一块;若A为复数的,则按元素幅值的从小到大排列,若有幅值相同的复数元素,则再按它们在区间[-π,π]的幅角从小到大排列;若A中有元素为NaN,则将它们排到最后。若A为向量,则返回从小到大的向量,若A为二维矩阵,则按列的方向进行排列;若A为多维数组,sort(A)把沿着第一非单元集的元素象向量一样进行处理。
B = sort(A,dim) %沿着矩阵A(向量的、矩阵的或多维的)中指定维数dim方向重新排列A中的元素。
[B,INDEX] = sort(A,…) %输出参量B的结果如同上面的情形,输出INDEX是一等于size(A)的数组,它的每一列是与A中列向量的元素相对应的置换向量。若A中有重复出现的相同的值,则返回保存原来相对位置的索引。
例2-23
>>A = [-1.9, -0.2, 3.1415926, 5.6, 7.0, 2.4+3.6i];
>>[B1,INDEX] = sort(A)
>>M = magic(4);
>>B2 = sort(M)
计算结果为:
B1 =
Columns 1 through 4
-0.2000 -1.9000 3.1416 2.4000 + 3.6000i
Columns 5 through 6
5.6000 7.0000
INDEX =
2 1 3 6 4 5
B2 =
4 2 3 1
5 7 6 8
9 11 10 12
16 14 15 13
函数 abs
功能 数值的绝对值与复数的幅值
格式 Y = abs(X) %返回参量X的每一个分量的绝对值;若X为复数的,则返回每一分量的幅值:abs(X) = sqrt(real(X).^2+imag(X).^2)。
例2-24
>>A = [-1.9, -0.2, 3.1415926, 5.6, 7.0, 2.4+3.6i];
>>Y = abs(A)
计算结果为:
Y =
1.9000 0.2000 3.1416 5.6000 7.0000 4.3267
函数 conj
功能 复数的共轭值
格式 ZC = conj(Z) %返回参量Z的每一个分量的共轭复数:
conj(Z) = real(Z) - i*imag(Z)
函数 imag
功能 复数的虚数部分
格式 Y = imag(Z) %返回输入参量Z的每一个分量的虚数部分。
例2-25
>>imag(2+3i)
计算结果为:
ans =
3
函数 real
功能 复数的实数部分。
格式 Y = real(Z) %返回输入参量Z的每一个分量的实数部分。
例2-26
>>real(2+3i)
计算结果为:
ans =
2
函数 angle
功能 复数的相角
格式 P = angle(Z) %返回输入参量Z的每一复数元素的、单位为弧度的相角,其值在区间[-π,π]上。
说明 angle(z) = imag (log(z)) = atan2 (imag(z),real(z))
例2-27
>>Z =[1-i, 2+i, 3-i, 4+i;
>>1+2i,2-2i,3+2i,4-2i;
>>1-3i,2+3i,3-3i,4+3i;
>>1+4i,2-4i,3+4i,4-4i];
>>P = angle(Z)
计算结果为:
P =
-0.7854 0.4636 -0.3218 0.2450
1.1071 -0.7854 0.5880 -0.4636
-1.2490 0.9828 -0.7854 0.6435
1.3258 -1.1071 0.9273 -0.7854
函数 complex
功能 用实数与虚数部分创建复数
格式 c = complex(a,b) %用两个实数a,b创建复数c=a+bi。输出参量c与a、b同型(同为向量、矩阵、或多维阵列)。该命令比下列形式的复数输入更有用:a + i*b 或a + j*b因为i和j可能被用做其他的变量(不等于sqrt(-1)),或者a和b不是双精度的。
c = complex(a) %输入参量a作为输出复数c的实部,其虚部为0:c = a+0*i。
例2-28
>>a = uint8([1;2;3;4]);
>>b = uint8([4;3;2;1]);
>>c = complex(a,b)
计算结果为:
c =
1.0000 + 4.0000i
2.0000 + 3.0000i
3.0000 + 2.0000i
4.0000 + 1.0000i
函数 mod
功能 模数(带符号的除法余数)
用法 M = mod(X,Y) %输入参量X、Y应为整数,此时返回余数X -Y.*floor(X./Y),若Y≠0,或者是X。若运算数x与y有相同的符号,则mod(X,Y)等于rem(X,Y)。总之,对于整数x,y,有:mod(-x,y) = rem(-x,y)+y。若输入为实数或复数,由于浮点数在计算机上的不精确表示,该操作将导致不可预测的结果。
例2-29
>>M1 = mod(13,5)
>>M2 = mod([1:5],3)
>>M3 = mod(magic(3),3)
计算结果为:
M1 =
3
M2 =
1 2 0 1 2
M3 =
2 1 0
0 2 1
1 0 2
函数 nchoosek
功能 二项式系数或所有的组合数。该命令只有对n<15时有用。
函数 C = nchoosek(n,k) %参量n,k为非负整数,返回n! / ( (n-k)! k!),即一次从n个物体中取出k个的组合数。
C = nchoosek(v,k) %参量v为n维向量,返回一矩阵,其行向量的分量为一次性从v个物体中取k个物体的组合数。矩阵 C包含=n! / ( (n-k)! k!)行与k列。
例2-30
>>C = nchoosek(2:2:10,4)
计算结果为:
C =
2 4 6 8
2 4 6 10
2 4 8 10
2 6 8 10
4 6 8 10
函数 rand
功能 生成元素均匀分布于(0,1)上的数值与阵列
用法 Y = rand(n) %返回n*n阶的方阵Y,其元素均匀分布于区间(0,1)。若n不是一标量,在显示一出错信息。
Y = rand(m,n)、Y = rand([m n]) %返回阶数为m*n的,元素均匀分布于区间(0,1)上矩阵Y。
Y = rand(m,n,p,…)、Y = rand([m n p…]) %生成阶数m*n*p*…的,元素服从均匀分布的多维随机阵列Y。
Y = rand(size(A)) %生成一与阵列A同型的随机均匀阵列Y
rand %该命令在每次单独使用时,都返回一随机数(服从均匀分布)。
s = rand('state') %返回一有35元素的列向量s,其中包含均匀分布生成器的当前状态。该改变生成器的当前的状态,见表2-1。
表2-1
命 令 |
含 义 |
Rand(’state’,s) |
设置状态为s |
Rand(’state’,0) |
设置生成器为初始状态 |
Rand(’state’,k) |
设置生成器第k个状态(k为整数) |
Rand(’state’,sum(100*clock)) |
设置生成器在每次使用时的状态都不同(因为clock每次都不同) |
例:
>>R1 = rand(4,5)
>>a = 10; b = 50;
>>R2 = a + (b-a) * rand(5) % 生成元素均匀分布于(10,50)上的矩阵
计算结果可能为:
R1 =
0.6655 0.0563 0.2656 0.5371 0.6797
0.3278 0.4402 0.9293 0.5457 0.6129
0.6325 0.4412 0.9343 0.9394 0.3940
0.5395 0.6501 0.5648 0.7084 0.2206
R2 =
33.6835 19.8216 36.9436 49.6289 46.4679
18.5164 34.2597 15.3663 31.0549 49.0377
19.0026 37.1006 33.6046 39.5361 13.9336
12.4641 12.9804 35.5420 23.2916 46.8304
28.5238 48.7418 49.0843 13.0512 10.9265
函数 randn
功能 生成元素服从正态分布(N(0,1))的数值与阵列
格式 Y = randn(n) %返回n*n阶的方阵Y,其元素服从正态分布N(0,1)。若n不是一标量,则显示一出错信息。
Y = randn(m,n)、Y = randn([m n]) %返回阶数为m*n的,元素均匀分布于区间(0,1)上矩阵Y。
Y = randn(m,n,p,…)、Y = randn([m n p…]) %生成阶数m*n*p*…的,元素服从正态分布的多维随机阵列Y。
Y = randn(size(A)) %生成一与阵列A同型的随机正态阵列Y
randn %该命令在每次单独使用时,都返回一随机数(服从正态分布)。
s = randn('state') %返回一有2元素的向量s,其中包含正态分布生成器的当前状态。该改变生成器的当前状态,见表2-2。
表2-2
命 令 |
含 义 |
randn(’state’,s) |
设置状态为s |
randn(’state’,0) |
设置生成器为初始状态 |
rand(’state’,k) |
设置生成器第k个状态(k为整数) |
rand(’state’,sum(100*clock)) |
设置生成器在每次使用时的状态都不同(因为clock每次都不同) |
例:
>>R1 = rand(4,5)
>>R2 = 0.6 + sqrt(0.1) * randn(5)
计算结果可能为:
R1 =
0.2778 0.2681 0.5552 0.5167 0.8821
0.2745 0.3710 0.1916 0.3385 0.5823
0.9124 0.5129 0.4164 0.2993 0.0550
0.4125 0.2697 0.1508 0.9370 0.5878
R2 =
0.4632 0.9766 0.5410 0.6360 0.6931
0.0733 0.9760 0.8295 0.9373 0.1775
0.6396 0.5881 0.4140 0.6187 0.8259
0.6910 0.7035 1.2904 0.5698 1.1134
0.2375 0.6552 0.5569 0.3368 0.3812