1第一次上机练习:数值数组及其运算3.1引导【*例3.1-1】绘制函数xxey在10x时的曲线。x=0:0.1:1%定义自变量的采样点取值数组y=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)图3.1-13.2一维数组的创建和寻访3.2.1一维数组的创建3.2.2一维数组的子数组寻访和赋值【*例3.2.2-1】子数组的寻访(Address)。rand('state',0)%把均匀分布伪随机发生器置为0状态x=rand(1,5)%产生)51(的均布随机数组2x=0.95010.23110.60680.48600.8913x(3)%寻访数组x的第三个元素。ans=0.6068x([125])%寻访数组x的第一、二、五个元素组成的子数组。ans=0.95010.23110.8913x(1:3)%寻访前三个元素组成的子数组ans=0.95010.23110.6068x(3:end)%寻访除前2个元素外的全部其他元素。end是最后一个元素的下标。ans=0.60680.48600.8913x(3:-1:1)%由前三个元素倒排构成的子数组ans=0.60680.23110.9501x(find(x0.5))%由大于0.5的元素构成的子数组ans=0.95010.60680.8913x([12344321])%对元素可以重复寻访,使所得数组长度允许大于原数组。ans=Columns1through70.95010.23110.60680.48600.48600.60680.2311Column80.9501【*例3.2.2-2】子数组的赋值(Assign)。x(3)=0%把上例中的第三个元素重新赋值为0x=0.95010.231100.48600.8913x([14])=[11]%把当前x数组的第一、四个元素都赋值为1。x=1.00000.231101.00000.89133.3二维数组的创建3.3.1直接输入法【*例3.3.1-1】在MATLAB环境下,用下面三条指令创建二维数组C。a=2.7358;b=33/79;%这两条指令分别给变量a,b赋值。C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]%这指令用于创建二维数组CC=1.00005.4716+0.4177i0.69090.70714.82443.5000+1.0000i3【*例3.3.1-2】复数数组的另一种输入方式。M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16]CN=M_r+i*M_i%由实部、虚部数组构成复数数组M_r=123456M_i=111213141516CN=1.0000+11.0000i2.0000+12.0000i3.0000+13.0000i4.0000+14.0000i5.0000+15.0000i6.0000+16.0000i3.3.2利用M文件创建和保存数组【例3.3.2-1】创建和保存数组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];3.4二维数组元素的标识3.4.1“全下标”标识3.4.2“单下标”标识3.4.3“逻辑1”标识【*例3.4.3-1】找出数组5311342024A中所有绝对值大于3的元素。A=zeros(2,5);%预生成一个(2*5)全零数组A(:)=-4:5%运用“全元素”赋值法获得AL=abs(A)3%产生与A同维的“0-1”逻辑值数组islogical(L)%判断L是否逻辑值数组。输出若为1,则是。X=A(L)%把L中逻辑值1对应的A元素取出A=-4-2024-3-1135L=1000100001ans=1X=-4454【*例3.4.3-2】演示逻辑数组与一般双精度数值数组的关系和区别。(本例在例3.4.3-1基础上进行)。(1)逻辑数组与双精度数组的相同之处Num=[1,0,0,0,1;0,0,0,0,1];%产生与L数组外表完全相同的“双精度数组”N_L=Num==L%假如Num与L数值相等,则应得1。c_N=class(Num)%用class指令检查Num的类属c_L=class(L)%用class指令检查L的类属N_L=1111111111c_N=doublec_L=double(2)逻辑数组与一般双精度数组的差别islogical(Num)%检查Num是否属于逻辑数组类Y=A(Num)%试探Num能否象L一样具有标识作用ans=0???Indexintomatrixisnegativeorzero.Seereleasenotesonchangestologicalindices.3.5二维数组的子数组寻访和赋值【*例3.5-1】不同赋值方式示例。A=zeros(2,4)%创建)42(的全零数组A=00000000A(:)=1:8%全元素赋值方式A=13572468s=[235];%产生单下标数组行数组A(s)%由“单下标行数组”寻访产生A元素组成的行数组Sa=[102030]'%Sa是长度为3的“列数组”A(s)=Sa%单下标方式赋值ans=235Sa=102030A=12030710468A(:,[23])=ones(2)%双下标赋值方式:把A的第2、3列元素全赋为1A=11175101183.6执行数组运算的常用函数3.6.1执行数组运算的常用函数【*例3.6.2-1】演示pow2的数组运算性质。A=[1:4;5:8]%生成)42(数组A=12345678pow2(A)%计算][22ijaA的结果也是)42(数组ans=2481632641282563.7数组运算和矩阵运算3.7.1数组运算和矩阵运算指令对照汇总【*例3.7.1-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.0000i3.8多项式的表达方式及其操作3.8.1.1多项式行向量的创建方法【*例3.8.1.2-1】求3阶方阵A的特征多项式。A=[111213;141516;171819];PA=poly(A)%A的特征多项式PPA=poly2str(PA,'s')%以较习惯的方式显示多项式PA=61.0000-45.0000-18.0000-0.0000PPA=s^3-45s^2-18s-2.8387e-015【*例3.8.1.2-2】由给定根向量求多项式系数向量。R=[-0.5,-0.3+0.4*i,-0.3-0.4*i];%根向量P=poly(R)%R的特征多项式PR=real(P)%求PR的实部PPR=poly2str(PR,'x')P=1.00001.10000.55000.1250PR=1.00001.10000.55000.1250PPR=x^3+1.1x^2+0.55x+0.1253.8.2多项式运算函数【*例3.8.2-1】求1)1)(4)(2(32sssss的“商”及“余”多项式。p1=conv([1,0,2],conv([1,4],[1,1]));%计算分子多项式p2=[1011];%注意缺项补零[q,r]=deconv(p1,p2);cq='商多项式为';cr='余多项式为';disp([cq,poly2str(q,'s')]),disp([cr,poly2str(r,'s')])商多项式为s+5余多项式为5s^2+4s+3【*例3.8.2-2】两种多项式求值指令的差别。S=pascal(4)%生成一个4阶方阵P=poly(S);PP=poly2str(P,'s')PA=polyval(P,S)%独立变量取数组S元素时的多项式值PM=polyvalm(P,S)%独立变量取矩阵S时的多项式值S=1111123413610141020PP=s^4-29s^3+72s^2-29s+1PA=1.0e+004*0.00160.00160.00160.00160.00160.0015-0.0140-0.05630.0016-0.0140-0.2549-1.20890.0016-0.0563-1.2089-4.3779PM=1.0e-011*-0.00770.0053-0.00960.0430-0.00680.0481-0.01100.12220.00750.1400-0.00950.26080.04300.2920-0.00070.47377【*例3.8.2-3】部分分式展开。a=[1,3,4,2,7,2];%分母多项式系数向量b=[3,2,5,4,6];%分子多项式系数向量[r,s,k]=residue(b,a)r=1.1274+1.1513i1.1274-1.1513i-0.0232-0.0722i-0.0232+0.0722i0.7916s=-1.7680+1.2673i-1.7680-1.2673i0.4176+1.1130i0.4176-1.1130i-0.2991k=[]3.9标准数组生成函数和数组操作函数3.9.1标准数组生成函数【*例3.9.1-1】标准数组产生的演示。ones(1,2)%产生长度为2的全1行数组ans=11ones(2)%产生)22(的全1阵ans=1111randn('state',0)%把正态随机数发生器置0randn(2,3)%产生)32(的正态随机阵ans=-0.43260.1253-1.1465-1.66560.28771.1909D=eye(3)%产生)33(的单位阵D=100010001diag(D)%取D阵的对角元ans=111diag(diag(D))%内diag取D的对角元,外diag利用一维数组生成对角阵ans=1000100018repmat(D,1,3)%在水平方向“铺放”三个D阵ans=1001001000100100100010010013.9.2数组操作函数【*例3.9.2-1】diag与reshape的使用演示。a=-4:4%产生一维数组A=reshape(a,3,3)%把一维数组a重排成)33(的二维数组a=-4-3-2-101234A=-4-12-303-214a1=diag(A,1)%取A阵“第一上对角线”的元素a1=-13A1=