《MATLAB 程序设计》实验报告一、实验目的:1、掌握矩阵和数组的表示与赋值方法2、了解字符串、结构和单元等数据类型在MATLAB 中的使用3、掌握MATLAB 中基本的数值运算,了解基本统计函数的使用4、掌握多项式基本运算以及线性方程组的求解方法二、实验内容:1、利用“:”操作符和linspace 函数生成数组a=[0,6,12,18,24,30,36,42],并将数组a 分别转化为4*2和2*4的矩阵。
2、在MATLAB 中输入矩阵3681-5722176916-121513-210A ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦,并使用MATLAB 回答以下的问题:(1) 创建一个由A 中第2列到第4列所有元素组成的4Χ3数组B ;(2) 创建一个由A 中第3行到第4行所有元素组成的2Χ4数组C ;(3) 创建一个由A 中前两行和后三列所有元素组成的2Χ3数组D ;(4) 根据A 利用单下标方法和双下标方法分别创建向量a =[-5 6 15]和向量b =[6 8 1],并利用向量a 和b 生成矩阵5668151E -⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦; (5) 利用“[]”删除矩阵A 的第二行和第三列。
3、利用ones()函数和zero()函数生成如下矩阵:0000001110013100111000000A ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦4、生成矩阵412303214A --⎡⎤⎢⎥=-⎢⎥-⎢⎥⎣⎦: (1) 取出所有大于0的元素构成一个向量a (可推广到从一个矩阵里筛选出符合条件的元素组成一个向量)。
(2) 将原矩阵中大于0的元素正常显示,而小于等于0的元素全部用0来表示(可推广到将原矩阵中不符合条件的全用0来表示,符合条件的值不变)。
5、已知⎥⎦⎤⎢⎣⎡=654321a ,⎥⎦⎤⎢⎣⎡-=531142b ,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=201c ,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=063258741d 下列运算是否合法,为什么?如合法,写出计算结果?(1) result1=a '(2) result2=a *b(3) result3=a +b(4) result4=b *d(5) result5=[b ;c ']*d(6) result6=a .*b(7) result7=a ./b(8) result8=a .*c(9) result9=a .\b(10)result10=a .^2 (11)result11=a ^2 (12) result11=2.^a6、已知134********,122438,[1,0,8,3,6,2,4,23,46,6]78276853a b c -⎡⎤⎡⎤⎢⎥⎢⎥===-⎢⎥⎢⎥-⎢⎥⎢⎥⎣⎦⎣⎦(1) 求a +b ,a *b ,a .*b ,a /b ,a ./b ,a ^2,a .^2的结果,并观察运算结果。
(2) 求c 中所有元素的平均值、最大值、中值,并将c 中元素按从小到大顺序排列。
(3) 解释b (2:3,[1,3])的含义,并将生成的数组赋值给d 。
关系运算与逻辑运算7、已知a =20,b =-2,c =0,d =1,计算下列表达式:(1) r 1=a >b(2) r 2=a >b &c >d(3) r 3=a ==b *(-10)(4) r 4=~b |c8、已知⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----=1323151122231592127A (1) 求矩阵A 的秩(rank);(2) 求矩阵A 的行列式(determinant);(3) 求矩阵A 的逆(inverse);(4) 求矩阵A 的特征值及特征向量(eigenvalue and eigenvector)。
9、已知多项式f 1(x )=2x 4-x 2+3x +2,f 2(x )=3x +2,利用MATLAB 进行如下计算:(1) 计算两多项式的乘法和除法;(2) 求多项式f 1(x )的根;(3) 分别计算多项式当x =3以及1324x ⎡⎤=⎢⎥⎣⎦时的值。
10、用两种方法求下列方程组的解,并比较两种方法执行的时间。
12345123451234512345123457 149251003 151******** 92573005 7141624002 512114500x x x x x x x x x x x x x x x x x x x x x x x x x +--+=⎧⎪----=⎪⎪---++=⎨⎪+++-=⎪-++--=⎪⎩ 11、建立一个元胞数组,要求第一个元素为4Χ4的魔术矩阵,第二个元素为18.66,第三个元素为'matlab',第四个元素为等差数列7,9,11,13…99。
计算第一个元胞第4行第2列加上第二个元胞+第三个元胞里的第二个元素+最后一个元胞的第10个元素。
12、建立一个结构体的数组,包括3个人,字段有姓名,年龄,分数,其中分数由随机函数产生一个3行10列的数据表示了有10门课程,每门课程有三个阶段的分数。
问题是:(1)如何找到第2个人的分数并显示出来;(2)如何找到第2个人的每门课程3个阶段的平均分数并显示出来;(3)所有同学的10门课程的每门课程的平均分如何计算出来?要求放到一个数组里;(4)找到这个班所有同学的姓名放到一个元胞数组里;13、完成以下操作:(1)已有str=‘decision 20 made on 10/20/10’,查找字符串中20出现的位置。
(2)有字符串s1=‘matlabexpress’,s2=‘matlabexcellent’,比较两个字符串的前8个字符是否相同,相同输出1,否则输出0。
(3)统计字符串s1=‘matlabexpress’中ex出现的次数,并替换为EX。
三、源程序和实验结果1.>> a=[0:6:42]a =0 6 12 18 24 30 36 42>> linspace(0,42,8)ans =0 6 12 18 24 30 36 42>> reshape(a,4,2)ans =0 246 3012 3618 42>> reshape(a,2,4)ans =0 12 24 366 18 30 422.>> A=[3 6 8 1;-5 7 22 17;6 9 16 -12;15 13 -21 0]A =3 6 8 1-5 7 22 176 9 16 -1215 13 -21 0(1)>> B=A(:,2:4)B =6 8 17 22 179 16 -1213 -21 0(2)>> C=A(3:4,:)C =6 9 16 -1215 13 -21 0(3)>> D=A(1:2,2:4)D =6 8 17 22 17(4)>> a=[A(2) A(5) A(4)]a =-5 6 15>> b=[A(5) A(9) A(13)]b =6 8 1>> a=[A(2,1) A(1,2) A(4,1)]a =-5 6 15>> b=[A(1,2) A(1,3) A(1,4)]b =6 8 1>> E=[a' b']E =-5 66 815 1>> A(2,:)=[]A =3 6 8 16 9 16 -1215 13 -21 0>> A(:,3)=[]A =3 6 16 9 -1215 13 03.>> A=zeros(5)A =0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0 >> A(2:4,2:4)=ones(1)A =0 0 0 0 00 1 1 1 00 1 1 1 00 1 1 1 00 0 0 0 0 >> A(3,3)=3*ones(1)A =0 0 0 0 00 1 1 1 00 1 3 1 00 1 1 1 00 0 0 0 0 4.>> A=[-4 -1 2;-3 0 3;-2 1 4]A =-4 -1 2-3 0 3-2 1 4(1)>> k=find(A>0)k =6789>> a=A(k)a =1234(2)>> m=find(A<=0)m =12345>> A(m)=0A =0 0 20 0 30 1 4 5.>> a=[1 2 3;4 5 6]a =1 2 34 5 6 >> b=[2 4 -1;1 3 5]b =2 4 -11 3 5 >> c=[1;0;-2]c =1-2>> d=[1 4 7;8 5 2;3 6 0]1 4 78 5 23 6 0(1)>> result1=a'result1 =1 42 53 6(2)不合法,两个矩阵的维数不一致>> result2=a*b??? Error using ==> mtimesInner matrix dimensions must agree.(3)>> result3=a+bresult3 =3 6 25 8 11(4)>> result4=b*dresult4 =31 22 2240 49 13(5)>> result5=[b;c']*dresult5 =31 22 2240 49 13-5 -8 7>> result6=a.*bresult6 =2 8 -34 15 30(7)>> result7=a./bresult7 =0.5000 0.5000 -3.00004.0000 1.6667 1.2000 (8)不合法,元素个数不一样>> result8=a.*c??? Error using ==> timesMatrix dimensions must agree. (9)>> result9=a.\bresult9 =2.0000 2.0000 -0.33330.2500 0.6000 0.8333 (10)>> result10=a.^2result10 =1 4 916 25 36(11)不合法,维数不一致>> result11=a^2??? Error using ==> mpower Matrix must be square.(12)>> result12=2.^aresult12 =2 4 816 32 646.>> a=[1 3 4;5 12 44;7 8 27]a =1 3 45 12 447 8 27>> b=[-7 8 4;12 24 38;68 -5 3]b =-7 8 412 24 3868 -5 3>> c=[1,0,8,3,6,2,-4,23,46,6]c =1 0 8 3 62 -4 23 46 6 (1)>> a+bans =-6 11 817 36 8275 3 30>> a*bans =301 60 1303101 108 6081883 113 413>> a.*bans =-7 24 1660 288 1672476 -40 81 >> a/bans =0.0966 0.0945 0.0080-3.6125 1.5838 -0.5778-1.9917 0.9414 -0.2682>> a./bans =-0.1429 0.3750 1.00000.4167 0.5000 1.15790.1029 -1.6000 9.0000>> a^2ans =44 71 244373 511 1736236 333 1109 >> a.^2ans =1 9 1625 144 193649 64 729 (2)>> y=mean(c,2)y =9.1000>> y=mean(c)y =9.1000>> y1=mean(c)y1 =9.1000>> y2=max(c)y2 =46>> y3=median(c)y3 =4.5000>> [Y,I]=sort(c)Y =-4 0 1 2 3 6 6 8 23 46I =7 2 1 6 4 5 10 3 8 9 (3)选出b矩阵的2到3行,1列和3列的元素>> d=b(2:3,[1,3])d =12 3868 37.>> a=20,b=-2,c=0,d=1a =20b =-2c =d =1(1)>> r1=a>br1 =1(2)>> r2=a>b&c>dr2 =(3)>> r3=a==b*(-10)r3 =1(4)>> r4=~b|cr4 =8.>> A=[7 2 1 -2;9 15 3 -2;-2 -2 11 5;1 3 2 13]A =7 2 1 -29 15 3 -2-2 -2 11 51 32 13(1)>> rank(A)ans =4(2)>> det(A)ans =12568(3)>> inv(A)ans =0.1744 -0.0303 -0.0125 0.0270-0.1050 0.0789 -0.0121 0.00060.0083 0.0173 0.0911 -0.03110.0095 -0.0185 -0.0103 0.0795(4)>> [C,D]=eig(A)C =-0.7629 0.0919 + 0.0640i 0.0919 - 0.0640i -0.02990.6223 0.6087 + 0.0276i 0.6087 - 0.0276i 0.26370.0807 -0.7474 -0.7474 0.6434 -0.1554 0.0342 - 0.2374i 0.0342 + 0.2374i 0.7180D =4.8554 0 0 00 12.6460 + 1.8333i 0 00 0 12.6460 - 1.8333i 00 0 0 15.8526 9.>> f1=[2,-1,3,2];>> f2=[3,2];(1)>> x=conv(f1,f2)x =6 17 12 4>> [y,z]=deconv(f1,f2)y =0.6667 -0.7778 1.5185z =0 -0.0000 0 -1.0370(2)x=roots(f1)x =0.5000 + 1.3229i0.5000 - 1.3229i-0.5000(3)>> x1=3;>> X2=[1 3;2 4]X2 =1 32 4>> y1=polyval(f1,x1)y1 =56>> y2=polyval(f1,X2)y2 =6 5620 126>> y3=polyval(f2,x1)y3 =11>> y4=polyval(f2,X2)y4 =5 118 1410.>> A=[7 14 -9 -2 5;3 -15 -13 -6 -4;-11 -9 -2 5 7;5 7 14 16 -2;-2 5 12 -11 -4] A =7 14 -9 -2 53 -15 -13 -6 -4-11 -9 -2 5 75 7 14 16 -2-2 5 12 -11 -4>> B=[100;200;300;400;500]B =100200300400500(1)>> x=A\Bx =370.9455-224.7276238.3333-138.1891503.6378(2)>> x=rref([A,B])x =1.0000 0 0 0 0 370.94440 1.0000 0 0 0 -224.72730 0 1.0000 0 0 238.33330 0 0 1.0000 0 -138.18920 0 0 0 1.0000 503.6364 两个方法速度差不多,肉眼不能分辨11.>> A={magic(4),18.66,'matlab',[7:2:99]}A =[4x4 double] [18.6600] 'matlab' [1x47 double] >> A{1,1}ans =16 2 3 135 11 10 89 7 6 124 14 15 1>> A{1,1}(4,2)+A{1,2}+A{1,3}(2)+A{1,4}(10)ans =154.660012.>> ='Jim';>> student.age=20;>> student.score=randint(3,10,[60,100])student =name: 'Jim'age: 20score: [3x10 double]>> student(2).name='Bob';>> student(2).age=20;>> student(2).score=randint(3,10,[60,100])>> student(2)ans =name: 'Bob'age: 20score: [3x10 double]>> student(3).name='Tim';>> student(3).age=20;>> student(3).score=randint(3,10,[60,100]);(1)>> A=student(2).scoreA =88 61 88 61 91 80 89 87 64 7361 63 73 77 92 78 90 86 80 8371 93 98 75 67 86 71 66 99 69 (2)>> Y=mean(A)Y =Columns 1 through 873.3333 72.3333 86.3333 71.0000 83.3333 81.3333 83.3333 79.6667Columns 9 through 1081.0000 75.0000(3)>> B=student(1).score+student(2).score+student(3).scoreB =271 246 241 230 283 219 266 242 248 239228 244 220 237 240 223 268 263 242 244216 255 263 244 257 253 231 246 280 219>> a=B./3a =Columns 1 through 890.3333 82.0000 80.3333 76.6667 94.3333 73.0000 88.6667 80.666776.0000 81.3333 73.3333 79.0000 80.0000 74.3333 89.3333 87.666772.0000 85.0000 87.6667 81.3333 85.6667 84.3333 77.0000 82.0000Columns 9 through 1082.6667 79.666780.6667 81.333393.3333 73.0000(4)>> a={student(1).name,student(2).name,student(3).name}a ='Jim' 'Bob' 'Tim'13.(1)>> str='decision 20 made on 10/20/10'str =decision 20 made on 10/20/10>> k=findstr(str,'20')k =10 24(2)>> s1='matlabexpress';>> s2='matlabexcellent';>> s3=s1(1:8)s3 =matlabex>> s4=s2(1:8)s4 =matlabex>> a=strcmp(s3,s4)a =1(3)>> k=findstr(s1,'ex')k =7>> g=length(k)g =1>> s1(7:8)='EX's1 =matlabEXpress。