习题一
1、 与其他高级语言相比,MATLAB有哪些显著特点
答:与其他高级语言相比,MATLAB简单易学,编程效率高。有以下显著特点:
(1) 可靠的数值计算和符号计算功能;
(2) 强大的绘图功能;
(3) 简单易学的语言体系;
(4) 为数众多的应用工具箱。
2、 怎样理解MATLAB的开放性?试结合自己的专业领域,为MATLAB设计一个工具箱(例如,为一个桥梁设计一个MATLAB桥梁设计工具箱)
答:MATLAB具有很强的开放性。除内部函数外,所有MATLAB基本文件和各工具箱文件都是可读、可改的源文件,用户可通过对源文件的修改或加入自己编写的文件去构成新的专用工具箱。比如,通信信号处理工具箱Communication Signal Processing Toolbox,电路设计工具箱Circuit Design Toolbox,等等。
3、 先建立自己的工作目录,再将自己的工作目录设置到MATLAB搜索路径下,用help命令能查询到自己的工作目录吗?
答:能
4、 李明同学设计了一个程序文件myprogram.m并将其保存到了f:\\ ppp中,但在命令窗口中输入文件名
< ??Undefined function or variable‘myprogram’. 试分析产生错误的原因并给出解决的办法。 答:错误原因:myprogram.m不在MATLAB的搜索路径中。 解决办法:将f:\\cpp添加到搜索路径列表中。 5、 利用MATLAB的帮助能分别查询到inv、plot、max、round等函数的功能及用法 答:查询命令help inv (plot/max/round) inv_A=inv(A); %求方阵A的逆 plot(x,y); %画以x,y为横纵坐标变量的二维曲线图 max_A=max(A); %求矩阵A中每一列的最大元素 round(x); %将变量x四舍五入取整 6、 访问MathWork公司的主页,查询有关MATLAB的产品信息。 答:MathWorks主页:http://www.mathworks.com MathWorks中国主页:http://www.mathworks.cn/index.html 习题二 1. 如何理解“矩阵是MATLAB最基本的数据对象”? 答:MATLAB的数据类型有:数值型、字符型、结构体、单元、多维矩阵、稀疏矩阵等。以上各种数据类型都以矩阵形式存在,所以矩阵是MATLAB最基本的数据对象。 2. 设A 和B 是两个同维同大小的矩阵,问: (1) A*B和A.*B的值是否相等? (2) A./B和B.\\A的值是否相等? (3) A/B和B\\A的值是否相等? (4) A/B和B\\A所代表的数学含义是什么? 答:(1) 不相等;(2) 不相等;(3) 不相等;(4) A/B=A*inv(B); B\\A=inv(B)*A; 3. 写出完成下列操作的命令。 (1) 将矩阵A 第2~5行中第1,3,5列元素赋给矩阵B 。 (2) 删除矩阵A 的第7号元素。 (3) 将矩阵A 的每个元素值加30。 (4) 求矩阵A 的大小和维数。 (5) 将向量t 的0 元素用机器零来代替。 (6) 将含有12个元素的向量 转换成34 矩阵。 (7) 求一个字符串的ASCII码。 (8) 求一个ASCII码所对应的字符。 答:假设A=rand(5,5) %或者假设 A=[1,2,3,4,5; 6,7,8,9,10; 11,12,13,14,15; 16,17,18,19,20; 21,22,23,24,25] (1)B=A(2:5,[1,3,5]) %或者 B=A(2:5, 1:2:5) (2) A(7)=[] (3) A+30 (4) size(A), ndims(A) (5) t=0:0.1:1, t(find(t==0))=eps (6) x=1:12, reshape(x,3,4) (7) abs('b') %或者double('b') (8) char(98) %或者setstr(98) 4. 下列命令执行后,L1,L2,L3,L4的值分别是多少? A1:9;B10A;L1AB;L2A5;L3A3&A7; L4 find(A3&A7); 答: L1 L2 L3 L4 L1 = 0 0 0 0 1 0 0 0 0 L2 = 1 1 1 1 1 0 0 0 0 L3 = 0 0 0 1 1 1 0 0 0 L4 = 4 5 6 23100.7784145655. 已知:325069.5454完成下列操作: 05323.14 (1)取出A 的前3行构成矩阵B ,前两列构成矩阵C ,右下角32 子矩阵构成矩阵D ,B 与C 的乘积构成矩阵E。 (2)分别求E 答:程序设计: clear all; close all; clc; A=[23,10,-0.778,0; 41,-45,65,5; 32,5,0,32; 6,-9.54,54,3.14]; B=A(1:3,:) C=A(:,1:2) D=A(end-2:end, end-1:end) %或者D=A(2:end, 3:end) E=B*C B = 23.0000 10.0000 -0.7780 0 41.0000 -45.0000 65.0000 5.0000 32.0000 5.0000 0 32.0000 C = 23.0000 10.0000 41.0000 -45.0000 32.0000 5.0000 6.0000 -9.5400 D = 65.0000 5.0000 0 32.0000 54.0000 3.1400 E = 1.0e+003 * 0.9141 -0.2239 1.2080 2.7123 1.1330 -0.2103 6、当A=[34,NAN,Inf,-Inf,-pi,esp,0]时,分析下列函数的执行结果:all(A),any(A),isnan(A),isinf(A),isfinite(A)。 答: A=[34,NaN,Inf,-Inf,-pi,eps,0] A = 34.0000 NaN Inf -Inf -3.1416 0.0000 0 all(A) ans = 0 any(A) ans = 1 isnan(A) ans = 0 1 0 0 0 0 0 isinf(A) ans = 0 0 1 1 0 0 0 isfinite(A) ans = 1 0 0 0 1 1 1 7、用结构体矩阵来存储5名学生的基本情况数据,每名学生的数据包括学号、姓名专业和6门课程的成绩。 答:程序设计: student(1).number=101; student(1).name='wang'; student(1).specialty='computer'; student(1).grade=[86 85 90 93 97 95]; student(2).number=102; student(2).name='zhang'; student(2).specialty='computer'; student(2).grade=[87 88 86 90 83 92]; student(3).number=103; student(3).name='zhao'; student(3).specialty='computer'; student(3).grade=[70 68 80 78 92 85]; student(4).number=104; student(4).name='liu'; student(4).specialty='computer'; student(4).grade=[88 78 90 82 95 77]; student(5).number=105; student(5).name='duan'; student(5).specialty='comp uter'; student(5).grade=[87 68 90 80 75 91]; student student = 1x5 struct array with fields: number name specialty grade 8、建立单元矩阵B并回答有关问题。 B{1,1}=1; B{1,2}=’Brenden’; B{2,1}=reshape(1:9,3,3); B{2,2}={12,34,34,2;54,21,3;4,23,67}; (1) size(B)和ndims(B)分别是多少? (2) B(2)和B(4)的值分别是多少? (3) B(3)=[]和B[3]=[]执行后,B的值分别是多少? 答: B={1,'Brenden';reshape(1:9,3,3),{12,34,2;54,21,3;4,23,67}} B= [ 1] 'Brenden' [3x3 double] {3x3 cell} size(B) ans = 2 2 ndims(B) ans = 2 B(2) ans = [3x3 double] B(4) ans = {3x3 cell} B(3)=[] B = [1] [3x3 double] {3x3 cell} B{3}=[] B = [1] [3x3 double] [] B(2) ans = [3x3 double] B{2} ans = 1 4 7 2 5 8 3 6 9 习题三 1. 写出完成下列操作的命令。 (1) 建立3阶单位矩阵A。 (2) 建立5×6随机矩阵A,其元素为[100,200]范围内的随机数。 (3) 产生均值为1,方差为0.2的500个正态分布的随机数。 (4) 产生和A同样大小的幺矩阵。 (5) 将矩阵A的对角线元素加30。 (6) 从矩阵A提取主对角线元素,并以这些元素构成对角阵B。 答:程序设计: (1)A=eye(3) A = 1 0 0 0 1 0 0 0 1 (2)A=round(100+100*rand(5,6)) A = 102 142 184 150 119 170 175 185 102 171 168 138 145 153 168 143 130 186 193 120 138 130 154 185 147 167 183 119 115 159 (3) 1+ sqrt(0.2)*randn(1,500) (4) ones(size(A)) ans = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (5)C=30*diag(ones(1,6)), C(1:5,:)+A C = 30 0 0 0 0 0 0 30 0 0 0 0 0 0 30 0 0 0 0 0 0 30 0 0 0 0 0 0 30 0 0 0 0 0 0 30 ans = 132 142 184 150 119 170 175 215 102 171 168 138 145 153 198 143 130 186 193 120 138 160 154 185 147 167 183 119 145 159 (6)a=diag(A), B=diag(a) a = 102 185 168 130 115 B = 102 0 0 0 0 0 185 0 0 0 0 0 168 0 0 0 0 0 130 0 0 0 0 0 115 2. 使用函数,实现方阵左旋90°或右旋90°的功能。例如,原矩阵为A,A左旋后得到B,右旋后得到C。 10111232114710789654,B,CA2581145698736912123121110 答:程序设计: clear all; close all; clc; A=[1,4,7,10; 2,5,8,11; 3,6,9,12]; B=rot90(A,1) B = 10 11 12 7 8 9 4 5 6 1 2 3 C=rot90(A,3) C = 3 2 1 6 5 4 9 8 7 12 11 10 3. 建立一个方阵A,求A的逆矩阵和A的行列式的值,并检验A与A是互逆的。 1答:程序设计: clear all; close all; clc; A=rand(3); B=inv(A) B = -3.1874 -0.2083 3.3715 2.5029 4.0495 -5.9473 2.8322 -7.3343 6.3202 det(A) ans = -0.0275 A*B ans = 1.0000 -0.0000 0.0000 -0.0000 1.0000 0.0000 -0.0000 0 1.0000 B*A ans = 1.0000 0 0 0.0000 1.0000 0.0000 0 -0.0000 1.0000 4. 求下面线性方程组的解。 答:程序设计: 4122323122310121328 clear all; close all; clc; A=[4,2,-1; 3,-1,2; 12,3,0]; b=[2 10 8]'; x=A\\b x = -6.0000 26.6667 27.3333 或者用 x=inv(A)*b x = -6.0000 26.6667 27.3333 5. 求下列矩阵的主对角线元素、上三角阵、下三角阵、秩、范数、条件数和迹。 1123(1)A51423052111509答: (1) 程序设计: clear all; close all; clc; A=[1,-1,2,3; 5,1,-4,2; 3,0,5,2; 11,15,0,9] A = 1 -1 2 3 5 1 -4 2 3 0 5 2 11 15 0 9 (2)B0.438.9432421 diag(A) ans = 1 1 5 9 triu(A) ans = 1 -1 2 3 0 1 -4 2 0 0 5 2 0 0 0 9 tril(A) ans = 1 0 0 0 5 1 0 0 3 0 5 0 11 15 0 9 rank(A) ans = 4 norm(A) ans = 21.3005 norm(A,1) ans = 20 norm(A,inf) ans = 35 cond(A) ans = 11.1739 cond(A,1) ans = 14.4531 cond(A,inf) ans = 22.0938 trace(A) ans = 16 (2) 程序设计: clear all; close all; clc; B=[0.43,43,2; -8.9,4,21] B = 0.4300 43.0000 2.0000 -8.9000 4.0000 21.0000 diag(B) ans = 0.4300 4.0000 triu(B) ans = 0.4300 43.0000 2.0000 0 4.0000 21.0000 tril(B) ans = 0.4300 0 -8.9000 4.0000 0 rank(B) ans = 2 norm(B) ans = 43.4271 0 norm(B,1) ans = 47 norm(B,inf) ans = 45.4300 cond(B) ans = 1.9354 trace(B) ans = 4.4300 6. 求矩阵A的特征值和相应的特征向量。 10.51A110.250.50.252 答:程序设计: clear all; close all; clc; A=[1,1,0.5; 1,1,0.25; 0.5,0.25,2] A = 1.0000 1.0000 0.5000 1.0000 1.0000 0.2500 0.5000 0.2500 2.0000 [V,D]=eig(A) V = 0.7212 0.4443 0.5315 -0.6863 0.5621 0.4615 -0.0937 -0.6976 0.7103 D = -0.0166 0 0 0 1.4801 0 0 0 2.5365 习题四 1、从键盘输入一个4位整数,按如下规格加密后输出。加密规则:没位数字都加上7,然后用和除以10的余数取代该数字;再把第一位与第三位交换,第二与第四交换。 答:程序设计: clear all; close all; clc; a=input('请输入一个4位整数:'); while (a<1000|a>9999) a=input('输入错误,不是一个4位整数,请输入一个4位整数:'); end b=fix(a/1000); %千位数字(第四位数字) c=rem(fix(a/100),10); %百位数字(第三位数字) d=rem(fix(a/10),10); %十位数字(第二位数字) e=rem(a,10); %个位数字(第一位数字) b=rem(b+7,10); %该位数字加7,然后用和除以10的余数取代该数字 c=rem(c+7,10); %该位数字加7,然后用和除以10的余数取代该数字 d=rem(d+7,10); %该位数字加7,然后用和除以10的余数取代该数字 e=rem(e+7,10); %该位数字加7,然后用和除以10的余数取代该数字 g=c;c=e;e=g; %将第一位和第三位交换 g=b;b=d;d=g; %将第二位和第四位交换 a=1000*b+100*c+10*d+e; %a为加密后的整数 disp(['加密后:', num2str(a)]) 2、分别用if语句和switch语句实现以下计算,其中a、b、c的值从键盘输入。 2axbxc0.5x1.5cyasinbx1.5x3.5c3.5x5.5lnbx 答:程序设计: (1)用if语句来实现: clear all; close all; clc; a=input('请输入a: '); b=input('请输入b: '); c=input('请输入c: '); for x=0.5:1:5.5 if x>=0.5 & x<1.5 y=a.*(x.^2)+b.*x+c elseif x>=1.5 & x<3.5 y=a*(sin(b)^c)+x elseif x>=3.5 & x<5.5 y=log(abs(b+c./x)) end end (2)用switch语句来实现: clear all; close all; clc; a=input('请输入a: '); b=input('请输入b: '); c=input('请输入c: '); for x=0.5:1:5.5 switch floor(x/0.5) case {1,2} y=a.*(x.^2)+b.*x+c; case {3,4,5,6} y=a*(sin(b)^c)+x; case {7,8,9,10} y=log(abs(b+c./x)); end disp(y) End (3)用逻辑表达式来实现: clear all; close all; clc; a=input('请输入a: '); b=input('请输入b: '); c=input('请输入c: '); x=0.5:1:5.5; x1=(x>=0.5&x<1.5); x2=(x>=1.5&x<3.5); x3=(x>=3.5&x<5.5); y1=a.*(x.^2)+b.*x+c; y2=a*(sin(b)^c)+x; y3=log(abs(b+c./x)); y=y1.*x1+y2.*x2+y3.*x3; disp(y) 3、产生20个俩位随整数,输入其中小于平均值的偶数 答:程序设计: clear all; close all; clc; x=fix(rand(1,20)*89)+10; disp(['20个两位随机数是:', num2str(x)]); x1=mean(x); disp(['平均值为:', num2str(x1)]); n=find(rem(x,2)==0 & x 4、输入20个数,求其中的最大数与最小数。要求分别用循环结构和调用matlab的max函数、min函数来实现。 答:程序设计: (1)用循环结构来实现: clear all; close all; clc; A=input('请输入20个数的一个行向量(用[]括起来):'); a=A(1); b=A(1); for m=A if a>=m a=m; elseif b<=m b=m; end end disp(['最小数是:', num2str(a)]) disp(['最大数是:', num2str(b)]) (2)调用MATLAB的max函数、min函数来实现: clear all; close all; clc; A=input('请输入20个数的一个行向量(用[]括起来):'); maxval=max(A) %maxval为其中最大数 minval=min(A) %minval为其中最小数 5、已知: s122223263 分别用循环结构和调用matlab的sum函数求s的值。 答:程序设计: (1)用循环结构: clear all; close all; clc; s=0; for a=0:63 c=2^a; s=s+c; end disp(['2的0次方到63次方的和是:', num2str(s)]) (2)调用MATLAB的sum函数: clear all; close all; clc; k=0:63; n=2.^k; s=sum(n); disp(['2的0次方到63次方的和是:', num2str(s)]) 6.当n分别取100、1000、1000时,求下列各式的值 1111(1)1 -2+3-4+…(-1)n+1n+…(=㏑2) 111(2)1 -3+5-7+…(=4) 11111n(3)4+16+64+…+4+…(=3) 24466571335(4) 2n2n2n12n1(=2) 需要分别用循环结构和向量运算(使用sum或prod函数)来实现。 答: (1) 程序设计: clear all; close all; clc; sum1=0; %当n取100时 for n=1:100 x=(-1)^(n+1)*(1/n); sum1=sum1+x; end disp(['当n取100时: sum=', num2str(sum1)]) sum2=0; %当n取1000时 for n=1:1000 x=(-1)^(n+1)*(1/n); sum2=sum2+x; end disp(['当n取1000时: sum=', num2str(sum2)]) sum3=0; %当n取10000时 for n=1:10000 x=(-1)^(n+1)*(1/n); sum3=sum3+x; end disp(['当n取10000时:sum=', num2str(sum3)]) (2) 程序设计: clear all; close all; clc; sum1=0; %当n取100时 n1=0; for n=1:2:100 x=(-1)^n1*(1/n); sum1=sum1+x; n1=n1+1; end disp(['当n取100时: sum=', num2str(sum1)]) sum2=0; %当n取1000时 n2=0; for n=1:2:1000 x=(-1)^n2*(1/n); sum2=sum2+x; n2=n2+1; end disp(['当n取1000时: sum=', num2str(sum2)]) sum3=0; %当n取10000时 n3=0; for n=1:2:10000 x=(-1)^n3*(1/n); sum3=sum3+x; n3=n3+1; end disp(['当n取10000时:sum=', num2str(sum3)]) 7.编写一个函数文件,求小于任意自然数n的斐波那契(Fibnacci)数列各项。斐波那契数列定义如下: f11,n1f21,n2fffn2n1n2,n 答:程序设计: 函数文件func_fibnacci.m: function f=func_fibnacci(n) % FIBNACCI 斐波那契(Fibnacci)数列 % f=func_fibnacci(n),n为项数,f为Fibnacci数列 % Written by WangChengyou @ Shandong University at Weihai, 2011 if n==1 | n==2 f=1; else f=func_fibnacci(n-1)+func_fibnacci(n-2); end 命令文件ex0407.m: clear all; close all; clc; sequence=[]; n=input('请输入一个自然数n:'); for k=1:n sequence=[sequence func_fibnacci(k)]; end disp('Fibnacci数列为:') disp(sequence) 8.编写一个函数文件,用于求两个矩阵的乘积和点乘,然后在命令文件中调用该函数。 答:程序设计: 函数文件func_MatrixProd.m: function [f1,f2]=func_MatrixProd(x1,x2) % MATRIXPROD 矩阵乘法:包括矩阵乘积和矩阵点积 % [f1,f2]=func_MatrixProd(x1,x2),x1、x2为输入的两矩阵; % f1为两矩阵做乘积运算的结果,f2为两矩阵做点乘运算的结果 % Written by WangChengyou @ Shandong University at Weihai, 2011 f1=x1*x2; %f1为两矩阵做乘积运算的结果 f2=x1.*x2; %f2为两矩阵做点积运算的结果 命令文件ex0408.m: clear all; close all; clc; a=input('请输入一个矩阵:'); b=input('请再输入一个矩阵:(注意:两矩阵要可以做矩阵相乘运算)'); [f1,f2]=func_MatrixProd(a,b); disp('两矩阵乘积运算的结果为:') disp(f1) disp('两矩阵点积运算的结果为:') disp(f2) nm9.先用函数的递归调用定义一个函数文件求 ii11005010kk21k1+ k1+ k1kn 答:程序设计: 函数文件func_SigmaSum.m: function sum=func_SigmaSum(n,m) % SIGMASUM 西格玛求和 然后调用该文件求 , % sum=func_SigmaSum(n,m),实现i.^m(i=1~n)求和,sum为求和结果 % Written by WangChengyou @ Shandong University at Weihai, 2011 if n<=1 sum=0; else sum=n^m+func_SigmaSum(n-1,m); end 命令文件ex0409.m: clear all; close all; clc; y=func_SigmaSum(100,1)+func_SigmaSum(50,2)+func_SigmaSum(10,-1); disp(y) 10.写出下列程序的输出结果 ①s=0 a=[12,13,14;15,16,17;18,19,20,21,22,23]; for k =a for j =1;4 if rem (k(j),2)~=0 s=s+k(j); end end end s ②命令文件exe.m; global x x =1;2;5;y=2;2;6; exsub(y); x y 函数文件 sub.m; function fun=sub(z) global x z=3*x x=x+z; 答: ① s = 108 ② x = 4 12 20 y = 2 4 6 因篇幅问题不能全部显示,请点此查看更多更全内容