《matlab教程第2章.doc》由会员分享,可在线阅读,更多相关《matlab教程第2章.doc(97页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datematlab教程第2章matlab教程第2章第二章 数值数组及其运算2.1 引导【例2.1-1】绘制函数在时的曲线(见图2.1-1)。x=0:0.1:1y=x.*exp(-x)plot(x,y),xlabel(x),ylabel(y),title(y=x*exp(-x) x = Columns 1 through 7 0 0.1000 0.2000 0.3000 0.
2、4000 0.5000 0.6000 Columns 8 through 11 0.7000 0.8000 0.9000 1.0000y = Columns 1 through 7 0 0.0905 0.1637 0.2222 0.2681 0.3033 0.3293 Columns 8 through 11 0.3476 0.3595 0.3659 0.3679图2.1-12.2 一维数组的创建和寻访2.2.1 一维数组的创建(1)逐个元素输入法x=2 pi/2 sqrt(3) 3+5i x = 2.0000 1.5708 1.7321 3.0000 + 5.0000i (2)冒号生成法(3
3、)定数线性采样法2.2.2 一维数组的子数组寻访和赋值【例2.2-1】子数组的寻访(Address)。rand(state,0) x=rand(1,5) x =0.9501 0.2311 0.6068 0.4860 0.8913 x(3) ans =0.6068 x(1 2 5) ans =0.9501 0.2311 0.8913 x(1:3) ans = 0.9501 0.2311 0.6068 x(3:end) ans = 0.6068 0.4860 0.8913 x(3:-1:1) ans = 0.6068 0.2311 0.9501 x(find(x0.5) ans =0.9501 0
4、.6068 0.8913 x(1 2 3 4 4 3 2 1) ans = Columns 1 through 7 0.9501 0.2311 0.6068 0.4860 0.4860 0.6068 0.2311 Column 8 0.9501 【例2.2-2】子数组的赋值(Assign)。x(3) = 0 x = 0.9501 0.2311 0 0.4860 0.8913 x(1 4)=1 1 x = 1.0000 0.2311 0 1.0000 0.8913 2.3 二维数组的创建2.3.1 直接输入法【例2.3-1】在MATLAB环境下,用下面三条指令创建二维数组C。a=2.7358;
5、b=33/79;C=1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i C = 1.0000 5.4716 + 0.4177i 0.6909 0.7071 4.8244 3.5000 + 1.0000i 【例2.3-2】复数数组的另一种输入方式。M_r=1,2,3;4,5,6,M_i=11,12,13;14,15,16CN=M_r+i*M_i M_r = 1 2 3 4 5 6M_i = 11 12 13 14 15 16CN = 1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i 4.0000 +14.0000
6、i 5.0000 +15.0000i 6.0000 +16.0000i 2.3.2 利用M文件创建和保存数组【例2.3-3】创建和保存数组 AM的 MyMatrix.m 文件。% MyMatrix.mCreation and preservation of matrix AMAM=101,102,103,104,105,106,107,108,109;. 201,202,203,204,205,206,207,208,209;. 301,302,303,304,305,306,307,308,309;2.4 二维数组元素的标识2.4.1 “全下标”标识由2个下标表示,行下标,列下标。如A(3,
7、5)就表示在2维数组A的“第3行第5列”的元素。2.4.2 “单下标”标识 单下标标识,既是使用一个下标来指明元素在数组中的位置。一维编号方法:先设想把二维数组的所有列,按先左后右的次序,首尾连接成一长列,然后自上而下对元素进行编号。2.4.3 “逻辑1”标识【例2.4-1】找出数组中所有绝对值大于3的元素。A=zeros(2,5);%预生成一个25全数组A(:)=-4:5运用全元素赋值法获得AL=abs(A)3产生与A同维的01数组islogical(L)判断L是否是逻辑数组,输出为1,则是X=A(L) 把L中逻辑值1的对应元素取出。A = -4 -2 0 2 4 -3 -1 1 3 5L
8、= 1 0 0 0 1 0 0 0 0 1ans = 1X = -4 4 5 2.5 二维数组的子数组寻访和赋值子数组寻访和赋值使用说明A(r,c)A的第r行第c列的元素A(r,:)A的第r行全部列的元素A(:,c)A的全部行第c列的元素A(:)单下标寻访,它由A的各列按自左到右的次序,首尾相连接而成“一维长列”A(s)单下标寻访,生成“s指定的”一维数组,。s若是“行数组”或“列数组”),则A(s)就是长度相同的“行数组”或“列数组”A(L)“逻辑1”寻访。生成“一维”列数组:由与A同样大小的“逻辑数组”L中的“1”元素选出A的对应元素;按“单下标”次序排列成长列组成A(r,c)Sa以“双下
9、标“方式,对子数组A(r,c)进行赋值:Sa的“行宽、列长”必须与A(r,c)的“行宽、列长”相等A(:)=D(:)全元素赋值方式。结果:保持A的“行宽、列长”不变。条件:A、D两个元素的总元素数相等,但“行宽、列长”不一定相同。A(s)=Sa按“单下标”方式,对A的部分元素重新赋值。结果:保持A的“行宽、列长”不变。条件:s单下标数组的长度必须与“一维数组”Sa的长度相等,但是s,Sa不一定同是“行数组”或“列数组”【例2.5-1】不同赋值方式示例。A=zeros(2,4) A(:)=1:8 A = 1 3 5 7 2 4 6 8 s=2 3 5;A(s)Sa=10 20 30A(s)=Sa
10、 ans = 2 3 5Sa = 10 20 30A = 1 20 30 7 10 4 6 8 A(:,2 3)=ones(2) A = 1 1 1 7 10 1 1 8 2.6 执行数组运算的常用函数2.6.1 执行数组运算的常用函数基本数学函数下表即为MATLAB常用的基本数学函数及三角函数: abs(x):纯量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle) sqrt(x):开平方 real(z):复数z的实部 imag(z):复数z的虚部 conj(z):复数z的共轭复数 round(x):四舍五入至最近整数 fix(x):无论正负,舍去小数至最近整数 r
11、at(x):将实数x化为分数表示 rats(x):将实数x化为多项分数展开 sign(x):符号函数 (Signum function)。 当x0时,sign(x)=1。 rem(x,y):求x除以y的余数 gcd(x,y):整数x和y的最大公因数 lcm(x,y):整数x和y的最小公倍数 exp(x):自然指数 pow2(x):2的指数 log(x):以e为底的对数,即自然对数或 log2(x):以2为底的对数 log10(x):以10为底的对数 小整理:MATLAB常用的三角函数 sin(x):正弦函数 cos(x):馀弦函数 tan(x):正切函数 asin(x):反正弦函数 acos(
12、x):反馀弦函数 atan(x):反正切函数 atan2(x,y):四象限的反正切函数 sinh(x):超越正弦函数 cosh(x):超越馀弦函数 tanh(x):超越正切函数 asinh(x):反超越正弦函数 acosh(x):反超越馀弦函数 atanh(x):反超越正切函数 2.7 数组运算和矩阵运算2.7.1 数组运算和矩阵运算指令对照汇总数组运算矩阵运算指令含义指令含义A.非共轭转置,相当于conj(A)A共轭转置A=s把标量s的值赋给A的每一个元素s+B标量s分别与B元素之和s-B,B-s标量s分别与B元素之差s.*A标量s分别与A元素之积s*A标量s分别与A每个元素之积s./B,
13、B.ss分别被B的元素除s*inv(B)B阵的逆乘sA.nA的每个元素自乘n次AnA阵为方阵时,自乘n次A.p对A的各个元素分别求非整数幂Ap方阵A的非整数乘方p.A以p为底,分别以A的元素为指数求幂值pAA为方阵时,标量的矩阵乘方A+B对应元素相加A+B矩阵相加A-B对应元素相减A-B矩阵相减A.*B对应元素相乘A*B内维相同矩阵的乘积A./BA的元素被B的对应元素除A/BA右除BB.A一定与上相同BAA左除Bexp(A)以自然对数为底,分别以A的元素为指数,求幂expm(A)A的矩阵指数函数log(A)对A的各元素求对数logm(A)A的矩阵对数函数sqrt(A)对A的各元素求平方根sqr
14、tm(A)A的矩阵平方根函数f(A)求A各元素的函数值A#BA, B阵对应元素的关系运算。#代表关系运算符ABA, B阵对应元素的逻辑运算。代表逻辑运算符【例 2.7-1】两种不同转置的比较clear;A=zeros(2,3);A(:)=1:6;A=A*(1+i)A_A=A.A_M=A A = 1.0000 + 1.0000i 3.0000 + 3.0000i 5.0000 + 5.0000i 2.0000 + 2.0000i 4.0000 + 4.0000i 6.0000 + 6.0000iA_A = 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.
15、0000i 4.0000 + 4.0000i 5.0000 + 5.0000i 6.0000 + 6.0000iA_M = 1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i 4.0000 - 4.0000i 5.0000 - 5.0000i 6.0000 - 6.0000i 2.8 标准数组生成函数和数组操作函数2.8.1 标准数组生成函数指令含义指令含义diag产生对角形数组(对高维不适用)rand产生均匀分布随机数组eye产生单位数组(对高维不适用)randn产生正态分布随机数组magic产生魔方数组(对高维不适用)zeros产生全0数组
16、ones产生全1数组【例2.8-1】标准数组产生的演示。ones(1,2) ans = 1 1 randn(state,0)randn(2,3) ans = -0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909 D=eye(3) D = 1 0 0 0 1 0 0 0 1 diag(D) ans = 1 1 1 diag(diag(D) ans = 1 0 0 0 1 0 0 0 1 2.8.2 数组操作函数【例 2.8-2】reshape的使用演示。a=-4:4A=reshape(a,3,3) a = -4 -3 -2 -1 0 1 2 3 4A = -4
17、 -1 2 -3 0 3 -2 1 4 【例2.8-3】数组转置、对称交换和旋转操作后果的对照比较。A A = -4 -1 2 -3 0 3 -2 1 4 A. ans = -4 -3 -2 -1 0 1 2 3 4 flipud(A) ans = -2 1 4 -3 0 3 -4 -1 2 fliplr(A) ans = 2 -1 -4 3 0 -3 4 1 -2 【例2.8-4】演示Kronecker乘法不具备“可交换规律”。B=eye(2)C=reshape(1:4,2,2) B = 1 0 0 1C = 1 3 2 4 2.9 数组构作技法综合【例2.9-1】数组的扩展。A=resha
18、pe(1:9,3,3) A = 1 4 7 2 5 8 3 6 9 A(5,5)=111 A = 1 4 7 0 0 2 5 8 0 0 3 6 9 0 0 0 0 0 0 0 0 0 0 0 111 A(:,6)=222 A = 1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 AA=A(:,1:6,1:6) AA = 1 4 7 0 0 222 1 4 7 0 0 222 2 5 8 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 3 6 9 0 0 222 0 0 0 0
19、 0 222 0 0 0 0 0 222 0 0 0 0 111 222 0 0 0 0 111 222 B=ones(2,6) B = 1 1 1 1 1 1 1 1 1 1 1 1 AB_r=A;B AB_r = 1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 1 1 1 1 1 1 1 1 1 1 1 1 AB_c=A,B(:,1:5) AB_c = 1 4 7 0 0 222 1 1 2 5 8 0 0 222 1 1 3 6 9 0 0 222 1 1 0 0 0 0 0 222 1 1
20、0 0 0 0 111 222 1 1 【例2.9-2】单下标寻访和reshape指令演示。clearA=reshape(1:16,2,8) A = 1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16 reshape(A,4,4) ans = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 s=1 3 6 8 9 11 14 16;A(s)=0 A = 0 0 5 7 0 0 13 15 2 4 0 0 10 12 0 0 【例2.9-3】逻辑函数的运用示例。randn(state,1),R=randn(3,6) R = 0.8644 0
21、.8735 -1.1027 0.1684 -0.5523 -0.6149 0.0942 -0.4380 0.3962 -1.9654 -0.8197 -0.2546 -0.8519 -0.4297 -0.9649 -0.7443 1.1091 -0.2698 L=abs(R)1.5 L = 0 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 R(L)=0 R = 0.8644 0.8735 -1.1027 0 -0.5523 -0.6149 0 0 0 0 -0.8197 0 -0.8519 0 -0.9649 -0.7443 1.1091 0 s=(find(R=0) s
22、 = 2 5 6 8 10 11 17 18 R(s)=111 R = 0.8644 0.8735 -1.1027 111.0000 -0.5523 -0.6149 111.0000 111.0000 111.0000 111.0000 -0.8197 111.0000 -0.8519 111.0000 -0.9649 -0.7443 1.1091 111.0000 ii,jj=find(R=111);disp(ii),disp(jj) 2 2 3 2 1 2 2 3 1 2 2 3 4 4 6 6 2.10 “非数”和“空”数组2.10.1 非数NaN【例2.11-1】非数的产生和性质演示。
23、a=0/0,b=0*log(0),c=inf-inf Warning: Divide by zero.a = NaNWarning: Log of zero.b = NaNc = NaN 0*a,sin(a) ans = NaNans = NaN class(a)isnan(a) ans =doubleans = 1 【例2.11-2】非数元素的寻访rand(state,0)R=rand(2,5);R(1,5)=NaN;R(2,3)=NaN R = 0.9501 0.6068 0.8913 0.4565 NaN 0.2311 0.4860 NaN 0.0185 0.4447 isnan(R)
24、ans = 0 0 0 0 1 0 0 1 0 0 Linear_index=find(isnan(R)r_index,c_index=ind2sub(size(R),Linear_index);disp(r_index c_index),disp(r_index c_index) Linear_index = 6 9r_index c_index 2 3 1 5 2.10.2 “空”数组【例2.11-3】关于“空”数组的算例。a=,b=ones(2,0),c=zeros(2,0),d=eye(2,0),f=rand(2,3,0,4) a = b = Empty matrix: 2-by-0c
25、 = Empty matrix: 2-by-0d = Empty matrix: 2-by-0f = Empty array: 2-by-3-by-0-by-4 class(a)isnumeric(a)isempty(a) ans =doubleans = 1ans = 1 which a ndims(a)size(a) a is a variable.ans = 2ans = 0 0 A=reshape(-4:5,2,5) A = -4 -2 0 2 4 -3 -1 1 3 5 A(:,2,4)= A = -4 0 4 -3 1 5 2.11 关系操作和逻辑操作2.11.1 关系操作 MAT
26、LAB关系操作符包括所有常用的比较。关系操作符说明小于大于 =大于或等于= =等于 =不等于MATLAB关系操作符能用来比较两个同样大小的数组,或用来比较一个数组和一个标量。在后一种情况,标量和数组中的每一个元素相比较,结果与数组大小一样。下面给出几个示例: A=1:9, B=9-AA = 1 2 3 4 5 6 7 8 9B = 8 7 6 5 4 3 2 1 0 tf=A4tf = 0 0 0 0 1 1 1 1 1 找出A中大于4的元素。0出现在A4的地方。 tf=(A= =B)tf = 0 0 0 0 0 0 0 0 0 找出A中的元素等于B中的元素。注意,=和= =意味着两种不同的事
27、:= = 比较两个变量,当它们相等时返回1,当它们不相等时返回0;在另一方面, = 被用来将运算的结果赋给一个变量。【例2.12-1】关系运算示例。A=1:9,B=10-A,r0=(A4tf = 0 0 0 0 1 1 1 1 1找出A大于4。 tf=(A4)tf = 1 1 1 1 0 0 0 0 0对上面的结果取非,也就是1替换0,0替换1。 tf=(A2)&(A5)L2=(A3)&(A7) A = 1 2 3 4 5 6 7 8 9L1 = 1 1 1 1 1 0 0 0 0L2 = 0 0 0 1 1 1 0 0 0 【例2.12-4】逻辑操作应用之一:逐段解析函数的计算和表现。本例演示削顶整流正弦半波的计算和图形绘制。(见图2.12-2)t=linspace(0,3*pi,500);y=sin(t); z1=(t2*pi).*y;w=(tpi/3&t7*pi/3&t8*pi/3);w_n=w;z2=w*sin(pi/3)+w_n.*z1;subplot(1,3,1),plot(t,y,:r),ylabel(y)subplot(1,3,2),plot(t,z1,:r),axis(0 10 -1 1)subplot(1,3,3),plot(t,z2,-b),axis(0 10 -1 1) 图 2.12-2 逐段解析函数的产生-
限制150内