1第二章数值数组及其运算2.1引导【例2.1-1】绘制函数xxey在10x时的曲线(见图2.1-1)。x=0:0.1:1y=x.*exp(-x)plot(x,y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)')x=Columns1through700.10000.20000.30000.40000.50000.6000Columns8through110.70000.80000.90001.0000y=Columns1through700.09050.16370.22220.26810.30330.3293Columns8through110.34760.35950.36590.367900.20.40.60.8100.050.10.150.20.250.30.350.4xyy=x*exp(-x)图2.1-12.2一维数组的创建和寻访2.2.1一维数组的创建(1)逐个元素输入法x=[2pi/2sqrt(3)3+5i]x=2.00001.57081.732123.0000+5.0000i(2)冒号生成法(3)定数线性采样法2.2.2一维数组的子数组寻访和赋值【例2.2-1】子数组的寻访(Address)。rand('state',0)x=rand(1,5)x=0.95010.23110.60680.48600.8913x(3)ans=0.6068x([125])ans=0.95010.23110.8913x(1:3)ans=0.95010.23110.6068x(3:end)ans=0.60680.48600.8913x(3:-1:1)ans=0.60680.23110.9501x(find(x0.5))ans=0.95010.60680.8913x([12344321])ans=Columns1through730.95010.23110.60680.48600.48600.60680.2311Column80.9501【例2.2-2】子数组的赋值(Assign)。x(3)=0x=0.95010.231100.48600.8913x([14])=[11]x=1.00000.231101.00000.89132.3二维数组的创建2.3.1直接输入法【例2.3-1】在MATLAB环境下,用下面三条指令创建二维数组C。a=2.7358;b=33/79;C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]C=1.00005.4716+0.4177i0.69090.70714.82443.5000+1.0000i【例2.3-2】复数数组的另一种输入方式。M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16]CN=M_r+i*M_iM_r=123456M_i=111213141516CN=1.0000+11.0000i2.0000+12.0000i3.00004+13.0000i4.0000+14.0000i5.0000+15.0000i6.0000+16.0000i2.3.2利用M文件创建和保存数组【例2.3-3】创建和保存数组AM的MyMatrix.m文件。%MyMatrix.mCreationandpreservationofmatrixAMAM=[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,5)就表示在2维数组A的“第3行第5列”的元素。2.4.2“单下标”标识单下标标识,既是使用一个下标来指明元素在数组中的位置。一维编号方法:先设想把二维数组的所有列,按先左后右的次序,首尾连接成一长列,然后自上而下对元素进行编号。2.4.3“逻辑1”标识【例2.4-1】找出数组5311342024A中所有绝对值大于3的元素。A=zeros(2,5);%预生成一个2×5全数组A(:)=-4:5%运用全元素赋值法获得AL=abs(A)3%产生与A同维的0-1数组islogical(L)%判断L是否是逻辑数组,输出为1,5则是X=A(L)%把L中逻辑值1的对应元素取出。A=-4-2024-3-1135L=1000100001ans=1X=-4452.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以“双下标“方式,对子数组A(r,c)进行赋值:Sa的“行宽、列长”必须与A(r,c)的“行宽、列长”相等6A(:)=D(:)全元素赋值方式。结果:保持A的“行宽、列长”不变。条件:A、D两个元素的总元素数相等,但“行宽、列长”不一定相同。A(s)=Sa按“单下标”方式,对A的部分元素重新赋值。结果:保持A的“行宽、列长”不变。条件:s单下标数组的长度必须与“一维数组”Sa的长度相等,但是s,Sa不一定同是“行数组”或“列数组”【例2.5-1】不同赋值方式示例。A=zeros(2,4)A(:)=1:8A=13572468s=[235];A(s)Sa=[102030]'A(s)=Saans=235Sa=102030A=12030710468A(:,[23])=ones(2)A=11171011872.6执行数组运算的常用函数2.6.1执行数组运算的常用函数基本数学函数下表即为MATLAB常用的基本数学函数及三角函数:abs(x):纯量的绝对值或向量的长度angle(z):复数z的相角(Phaseangle)sqrt(x):开平方real(z):复数z的实部imag(z):复数z的虚部conj(z):复数z的共轭复数round(x):四舍五入至最近整数fix(x):无论正负,舍去小数至最近整数rat(x):将实数x化为分数表示rats(x):将实数x化为多项分数展开sign(x):符号函数(Signumfunction)。当x0时,sign(x)=-1;当x=0时,sign(x)=0;当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为底的对数8log10(x):以10为底的对数小整理:MATLAB常用的三角函数sin(x):正弦函数cos(x):馀弦函数tan(x):正切函数asin(x):反正弦函数acos(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的值赋给A9的每一个元素s+B标量s分别与B元素之和s-B,B-s标量s分别与B元素之差s.*A标量s分别与A元素之积s*A标量s分别与A每个元素之积s./B,B.\ss分别被B的元素除s*inv(B)B阵的逆乘sA.^nA的每个元素自乘n次A^nA阵为方阵时,自乘n次A.^p对A的各个元素分别求非整数幂A^p方阵A的非整数乘方p.^A以p为底,分别以A的元素为指数求幂值p^AA为方阵时,标量的矩阵乘方A+B对应元素相加A+B矩阵相加A-B对应元素相减A-B矩阵相减A.*B对应元素相乘A*B内维相同矩阵的乘积A./BA的元素被B的对应元素除A/BA右除BB.\A一定与上相同B\AA左除Bexp(A)以自然对数为底,分别以A的元素为指数,求幂expm(A)A的矩阵指数函数log(A)对A的各元素求对数logm(A)A的矩阵对数函数sqrt(A)对A的各元素求平方根sqrtm(A)A的矩阵平方根函数f(A)求A各元素的函数值A#BA,B阵对应元素的10关系运算。#代表关系运算符A@BA,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.0000i3.0000+3.0000i5.0000+5.0000i2.0000+2.0000i4.0000+4.0000i6.0000+6.0000iA_A=1.0000+1.0000i2.0000+2.0000i3.0000+3.0000i4.0000+4.0000i5.0000+5.0000i6.0000+6.0000iA_M=1.0000-1.0000i2.0000-2.0000i3.0000-3.0000i4.0000-4.0000i5.0000-5.0000i6.0000-6.0000i2.8标准数组生成函数和数组操作函数2.8.1标准数组生成函数指令含义指令含义diag产生对角形数组(对高维不适用)rand产生均匀分布随机数组eye产生单位数组(对高randn产生正态分布随机数11维不适用)组magic产生魔方数组(对高维不适用)zeros产生全0数组ones产生全1数组【例2.8-1】标准数组产生的演示。ones(1,2)ans=11randn('state',0)randn(2,3)ans=-0.43260.1253-1.1465-1.66560.28771.1909D=eye(3)D=100010001diag(D)ans=111diag(diag(D))ans=100010001122.8.2数组操作函数【例2.8-2】reshape的使用演示。a=-4:4A=reshape(a,3,3)a=-4-3-2-101234A=-4-12-303-214【例2.8-3】数组转置、对称交换和旋转操作后果的对照比较。AA=-4-12-303-214A.'ans=-4-3-2-101234flipud(A)ans=-214-303-4-12fliplr(A)ans=2-1-430-341-213【例2.8-4】演示Kronecker乘法不具备“可交换规律”。B=eye(2)C=reshape(1:4,2,2)B=1001C=13242.9数组构作技法综合【例2.9-1】数组的扩展。A=reshape(1:9,3,3)A=147258369A(5,5)=111A=147002580036900000000000111A(:,6)=222A=147002222580022236900222000002220000111222AA=A(:,[1:6,1:6])AA=14147002221470022225800222258002223690022236900222000002220000022200001112220000111222B=ones(2,6)B=111111111111AB_r=[A;B]AB_r=147002222580022236900222000002220000111222111111111111AB_c=[A,B(:,1:5)']AB_c=1470022211