核科学技术学院实验报告实验项目名称MATLAB数值计算所属课程名称MATLAB及应用实验类型上机实验实验日期指导教师班级学号姓名成绩一、实验名称MATLAB数值计算二、实验目的(1)掌握MATLAB变量的使用(2)掌握MATLAB数组的创建(3)掌握MATLAB数组和矩阵的运算(4)熟悉MATLAB多项式的运用三、实验原理1. 矩阵分析矩阵转置:单引号(’)矩阵的旋转:rot90(A,k),功能是将矩阵A逆时针旋转90度的k倍,缺省值是1矩阵的左右翻转:fliplr(A)矩阵的上下翻转:flipud(A)矩阵的逆:inv(A),与A^(-1)等价矩阵的行列式:det(A)矩阵的秩:rank(A)矩阵的迹:trace(A)将矩阵化为最简式:rref(A)矩阵的特征值与特征向量:(1) E = eig(A);矩阵A的所有特征值构成向量E;(2) [V,D]=eig(A);A的所有特征值构成对角阵D,A的特征向量构成V的列向量;2. 多项式多项式的建立:若多的项的全部根构成的向量为X,则以X为根的多项式为poly(X)多项式的根:roots(p)计算以向量p为系数的多项式的根,包括重根,复根多项式求值:polyval(p,x),p是多项式的系数,x可以是一个数也可以是一个矩阵多项式求拟合次数:polyfit(x,y,n),x可以是一个数也可以是一个矩阵,y 是x对应的数或矩阵多项式的四则运算:(1)P1+P2;(2)P1-P2;(3)conv(P1,P2), (4)deconv(P1,P2)四、实验容1. 已知矩阵11 12 13 1421 22 23 24A= 31 32 33 3441 42 43 44(1) 如何输出A的第1列?(2) 如何输出A的第2行?(3) 如何输出A的第2列和第3列?(4) 要得到22233233⎛⎫⎪⎝⎭,怎么办?(5) 如何输出A的第1列和第3列?(6) 如何将21和31按一列输出?(7) 如何将A所有元素按从最左列至最右列新排列为一列输出?(8) 如何将A原阵输出?(9) 如何输出2阶全1阵?(10) 如何输出2阶单位阵?(11) 试用分块矩阵的方法生成阵11 12 13 14 1 121 22 23 24 1 131 32 33 34 1 041 42 43 44 0 1(12) 求A的主对角线(13) 求除去A阵第1列后新阵的主对角线(14) 求除去A阵第1行后新阵的主对角线(15) 求除去A 阵从左到右前2列后新阵的主对角线(16) 要分别单独输出A 阵元素11、22、33、44,怎么办?(17) 如何将11、31、12、32、13、33、14、34按顺序一行输出?2. 已知 2354127354217623A -⎡⎤⎢⎥--⎢⎥=⎢⎥-⎢⎥--⎣⎦.求(1)A 的逆;(2)A 的行列式;(3)A 的迹; (4)A 的所有特征向量和特征值。
3. A=magic(3),B=7*rand(3),计算数组A 、B 乘积,计算A&B ,A|B ,~A ,A==B ,A>B 如何生成一个三阶幻方、3阶随机阵、1行2列全零阵、3行4列全一阵、3阶单位阵?4. 生成一个4阶Hilbert 矩阵H ,(1)求H 的转置;(2)将H 旋转90度;(3)对H 实行左右翻转;(4)对H 实行上下翻转。
5 输入如下矩阵A0 π/3A = π/6 π/2(1) 求矩阵B1, B1中每一元素为对应矩阵A中每一元素的正弦函数(2) 求矩阵B2, B2中每一元素为对应矩阵A中每一元素的余弦函数(3) 求 B 12+B 22(4) 求矩阵A的特征值与特征矢量:称特征矢量为M,而特征值矩阵为L(5) 求Msin(L)M -1(6) 使用funm 命令求矩阵A 的正弦函数(结果应该与(5)同)(7) 求cosA(8) 证明 sin 2A+cos 2A=I I 是全1阵6 某专业有三名研究生,本学期选修了四门课程,若这些研究生的,学号,性别,出生年月,课程名称,考试成绩可任意假定,(1)分别用结构型变量和细胞型变量表示以上信息;(2)举例说明查阅以上任何一条信息的方法;(3)求每一个研究生的平均成绩.7. 已知多项式32()3279p x x x x =-++,试求:(1)p(x)的根;(2)由其根生成一个多项式q(x)并与p(x)比较;(3)计算p(1.5),p(-2),p(5)的值。
8 已知矩阵A=[1.2 3 5 0.9;5 1.7 5 6;3 9 0 1;1 2 3 4],求(1)A的特征多项式(2)特征多项式中未知数为20 时的值(3)特征多项式的根(4)特征多项式的导数9. 在实验中测得如下10组数据:X 1 2 3 4 5 6 10 12 15 16 Y 7 15 19 30 38 37 23 69 39 28 (1)求最多能拟合多项式的次数是多少?并求出各项系数。
(2)将数据点和拟合曲线在同一图中绘出。
五、实验过程及结果(含源代码)1、在MA TLAB中新建.m文件,输入实验代码如下并保存:clc,clearA=[11 12 13 14;21 22 23 24;31 32 33 34;41 42 43 44];A1=A(:,1)A2=A(2,:)A3=A(:,2:3)A4=A(2:3,2:3)A5=A(:,1:2:3)A6=A(2:3)A7=A(:)A8=A(:,:)A9=ones(2,2)A10=eye(2)A11=[A,[ones(2,2);eye(2)]]A12=diag(A)A13=diag(A,1)A14=diag(A,-1)A15=diag(A,2)点击“run”运行得到结果如下:A1 =11213141A2 =21 22 23 24A3 =12 1322 2332 3342 43A4 =22 2332 3311 1321 2331 3341 43 A6 =21 31 A7 =112131411222324213233343142444A8 =11 12 13 1421 22 23 2431 32 33 3441 42 43 44A9 =1 11 1A10 =1 00 1A11 =11 12 13 14 1 121 22 23 24 1 131 32 33 34 1 041 42 43 44 0 1 A12 =112233A13 =122334A14 =213243A15 =13242、在命令窗口输入代码如下:A=[2 3 -5 4;-1 2 7 -3;5 -4 2 1;7 6 -2 -3];inv(A)ans =0.0198 0.0010 0.1069 0.06100.1199 0.1116 -0.0636 0.02710.0709 0.1616 0.0667 -0.04480.2388 0.1178 0.0777 -0.1069 det(A)-1918trace(A)ans =3E=eig(A)E =-5.65454.68881.9828 + 8.2711i1.9828 - 8.2711i[V,D]=eig(A)V =0.3850 0.4655 -0.0889 + 0.4794i -0.0889 - 0.4794i-0.1196 0.4083 -0.1447 - 0.5624i -0.1447 + 0.5624i-0.1972 0.4872 0.5903 0.5903-0.8936 0.6157 -0.1444 + 0.2359i -0.1444 - 0.2359iD =-5.6545 0 0 00 4.6888 0 00 0 1.9828 + 8.2711i 00 0 01.9828 - 8.2711i3、在命令窗口键入实验代码如下:>> A=magic(3),B=7*rand(3)A =8 1 63 5 74 9 2B =6.6509 3.4019 3.19531.6180 6.2391 0.12954.24795.3347 5.7499>> A*Bans =80.3126 65.4622 60.190857.7778 78.7438 50.482449.6611 80.4287 25.4465 >> A&Bans =1 1 11 1 11 1 1>> A|Bans =1 1 11 1 11 1 1>> ~Aans =0 0 00 0 00 0 0>> A==Bans =0 0 00 0 00 0 0>> A>Bans =1 0 11 0 10 1 0>> A=magic(3)A =8 1 63 5 74 9 2>> B=rand(3)B =0.9501 0.4860 0.45650.2311 0.8913 0.01850.6068 0.7621 0.8214 >> C=zeros(1,2)C =0 0>> D=ones(3,4)D =1 1 1 11 1 1 11 1 1 1>> E=eye(3)E =1 0 00 1 00 0 14、在命令窗口键入实验代码及运行结果如下:>> H=hilb(4)H =1.0000 0.5000 0.3333 0.25000.5000 0.3333 0.2500 0.20000.3333 0.2500 0.2000 0.16670.2500 0.2000 0.1667 0.1429 >> H'ans =1.0000 0.5000 0.3333 0.25000.5000 0.3333 0.2500 0.20000.3333 0.2500 0.2000 0.16670.2500 0.2000 0.1667 0.1429 >> rot90(H)ans =0.2500 0.2000 0.1667 0.14290.3333 0.2500 0.2000 0.16670.5000 0.3333 0.2500 0.20001.0000 0.5000 0.3333 0.2500 >> fliplr(H)ans =0.2500 0.3333 0.5000 1.00000.2000 0.2500 0.3333 0.50000.1667 0.2000 0.2500 0.33330.1429 0.1667 0.2000 0.2500>> flipud(H)ans =0.2500 0.2000 0.1667 0.14290.3333 0.2500 0.2000 0.16670.5000 0.3333 0.2500 0.20001.0000 0.5000 0.3333 0.2500 5、在命令窗口键入实验代码及运行结果如下:>> A=[0 pi/3;pi/6 pi/2]A =0 1.04720.5236 1.5708>> B1=sin(A)B1 =0 0.86600.5000 1.0000>> B2=cos(A)B2 =1.0000 0.50000.8660 0.0000>> B1^2+B2^2ans =1.8660 1.3660>> [M,L]=eig(A)M =-0.9628 -0.48960.2703 -0.8719L =-0.2940 00 1.8648>> M*sin(L)*inv(M)ans =-0.1200 0.60480.3024 0.7873>> funm(A,sin)ans =-0.1200 0.60480.3024 0.7873>> funm(A,cos)ans =0.7873 -0.6048-0.3024 -0.1200>> (funm(A,sin))^2+(funm(A,cos))^2 ans =-0.0000 1.00006、实验代码及运行结果如下:(1) 分别用细胞型变量和结构型变量表示题示信息如下:% 细胞型变量A1={'明',20130001,'男',19890214,'MATLAB',99,'ENGLISH',88,'Matrix',96,'Math',94};A2={'远',20130006,'男',19900425,'MATLAB',98,'ENGLISH',80,'Matrix',90,'Math',96};A3={'王云',20130009,'女',19901001,'MATLAB',97,'ENGLISH',89,'Matrix',88,'Math',90};% 结构型变量B1=struct('Name','明','StuNumber',20130001,'Sex','男','Birth',19890214,...'MATLAB',99,'ENGLISH',88,'Matrix',96,'Math',94);B2=struct('Name','远','StuNumber', 20130006,'Sex','男','Birth', 19900425,...'MATLAB',98,'ENGLISH',80,'Matrix',90,'Math',96);B3=struct('Name','王云','StuNumber', 20130009,'Sex','女','Birth', 19901001,...'MATLAB',97,'ENGLISH',90,'Matrix',88,'Math',90);C=[B1 B2 B3];(2) 查询信息,如查询明的学号,实验代码如下:name='明'information='StuNumber';for i=1:3if strcmp(C(i).Name,name)==1disp(information);getfield(C(i),information)break;endend运行结果如下:name =明StuNumberans =20130001(3)求每位研究生的平均成绩:for i=1:3Average(i)=(C(i).MATLAB+C(i).ENGLISH+C(i).Matrix+C(i).Math)/4; endAverage结果如下:Average =94.2500 91.0000 91.25007、在命令窗口键入实验代码及运行结果如下:>> p=[3 -2 7 9];>> x=roots(p)x =0.7513 + 1.7392i0.7513 - 1.7392i-0.8358>> q=poly(x)q =1.0000 -0.66672.33333.0000>> b=[1.5 -2 5];>> polyval(p,b)ans =25.1250 -37.0000 369.00008、在命令窗口键入实验代码及运行结果如下:>> A=[1.2 3 5 0.9;5 1.7 5 6;3 9 0 1;1 2 3 4];>> p=poly(A);>> poly2sym(p)ans =x^4 - (69*x^3)/10 - (3863*x^2)/50 - (8613*x)/100 + 12091/20>> polyval(p,20)ans =7.2778e+04>> roots(p)ans =13.0527-4.1671 + 1.9663i-4.1671 - 1.9663i2.1815>> Dp=polyder(p);>> poly2sym(Dp)ans =4*x^3 - (207*x^2)/10 - (3863*x)/25 - 8613/1009、因题目给出的实验数据是10组,可以看做是10个多项式方程组,仅当多项式的次数小于方程组的个数时,方程组为超定方程,此时才可以进行最小二乘多项式拟合,因此,最多拟合次数为9次,实验代码及运行结果如下:X=[1 2 3 4 5 6 10 12 15 16];Y=[7 15 19 30 38 37 23 69 39 28];a=polyfit(X,Y,9);x2=1:0.1:16;y2=polyval(a,x2);plot(X,Y,'r*',x2,y2,'b-')legend('原数据点','拟合曲线')拟合多项式系数如下:a =Columns 1 through 70.0000 -0.0005 0.0150 -0.2693 2.9713 -20.5126 85.9563Columns 8 through 10-204.4409 250.3796 -107.0989实验图形如下所示:(此处按题号顺序写上所写的程序语句容以及matlab中出现的程序运行结果)六、实验总结。