2014 第一轮上机练习题答案matlab程序设计练习解析.doc_第1页
2014 第一轮上机练习题答案matlab程序设计练习解析.doc_第2页
2014 第一轮上机练习题答案matlab程序设计练习解析.doc_第3页
2014 第一轮上机练习题答案matlab程序设计练习解析.doc_第4页
2014 第一轮上机练习题答案matlab程序设计练习解析.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

练习1 基础练习一、矩阵及数组操作:1利用基本矩阵产生33和158的单位矩阵、全1矩阵、全0矩阵、均匀分布随机矩阵(-1,1之间)、正态分布矩阵(均值为1,方差为4)。解eye(3) eye(15,8) ones(3) ones(15,8) zeros(3) zeros(15,8) X1=(1+(1-(-1)*rand(3) X2=(1+(1-(-1)*rand(15,8) Y1=1+sqrt(4)*randn(3)Y2=1+sqrt(4)*randn(15,8)2利用fix及rand函数生成0,10上的均匀分布的1010的整数随机矩阵a,然后统计a中大于等于5的元素个数。解:a=fix(10-0+1)*rand(10)+0) x=5 i=find(a=x) n=length(i)3在给定的矩阵中删除含有整行内容全为0的行,删除整列内容全为0的列。解:A=1 2 2 3 4;0 0 0 0 0;4 5 6 2 3;0 0 0 0 0;;A(2,4,:)=B=A;B(:,2,4)=二、绘图:4在同一图形窗口画出下列两条曲线图像: y1=2x+5; y2=x2-3x+1,并且用legend标注。解:x=0:0.01:10;y1=2*x+5;y2=x.2-3*x+1;plot(x,y1,x,y2)legend(y1, y2)5画出下列函数的曲面及等高线:z=x2+y2+sin(xy)解:x,y=meshgrid(0:0.25:4*pi);z=x.2+y.2+sin(x.*y);contour3(x,y,z);meshc(x,y,z)三、程序设计:6编写程序计算(x在-3,3,间隔0.01)解:x=input(x:);if x=-3&x=-1&x=1&x=3y=(-x.2+4*x-3)/2;else y=errorendy7有一列分数序列:求前15项的和。解:a=1;b=2;sum=0;for k=1:15 c=b/a; sum=sum+c; t=b; b=a+b; a=t;endsum8用至少三种方法编写函数实现求任意整数n的阶乘。解:法一:s=factorial(n)法二:gamma(n) 求出的是(n-1)!法三:n=input(please input n:);x=1:n; prod(x) 9将任意大于6的偶数m写成两个素数p1、p2的和(试着写出所有的m=p1+p2的可能形式)。解:function y=f(n);n=input(n:);if mod(n,2); error(n.)elseif n=6; error(n6.)else for m=1:n; for k=m:n; if (isprime(m)&(isprime(k)&(m+k=n); disp(num2str(n),=,num2str(m),+,num2str(k); break; end; end; end;end;10是否任意3的倍数m可以写成两个素数p1、p2、p3的和(试着写出所有的m=p1+p2+p3的可能形式)?解:function y=fg(n);n=input(请输入n的值:);if mod(n,3); error(n不是3的倍数.请重新运行.)elseif n6; error(n必须不小于6.)else for m=1:n; for k=m:n; for p=k:n if(isprime(m)&(isprime(k)&(isprime(p)&(m+k+p=n); disp(num2str(n),=,num2str(m),+,num2str(k),+,num2str(p); break; end; end; end; end;end;四、数据处理与拟合初步:11通过测量得到一组数据:t12345678910y4.8424.3623.7543.3683.1693.0383.0343.0163.0123.005分别采用y=c1+c2e(-t)和y=d1+d2te(-t)进行拟合,并画出拟合曲线进行对比。解:t=1:10;y=4.842,4.362,3.754,3.368, 3.169,3.038,3.034,3.016,3.012,3.005; x1=exp(-t);x2=t.*exp(-t);y1=polyfit(x1,y,1)可以写出:y1=5.2165*exp(-t)+3.1564y2=polyfit(x2,y,1)可以写出:y2=5.0273*t.*exp(-t) +2.9973plot(t,y,t,y1,r-,t,y2,gx)另:此题也可以采用工具箱直接进行运算。12计算下列定积分:方法有很多种:解:(1)1建立被积函数文件function f=jifen1(t)f=exp(-2*t);2.在命令窗口输入:z1,n=quad(jifen1,0,2)得到结果:z1=0.4908 n =25(2)x=0:0.01:2;z2=exp(2*x);trapz(x,z2)得到结果:ans =26.8000(3)z=quadl(inline(x.2-3*x+0.5),-1,1)得到结果:z =1.666713微分方程组当t=0时,x1(0)=1,x2(0)=-0.5,求微分方程t在0,25上的解,并画出相空间轨道图像。解:t=0:0.01:25;x,y=dsolve(Dx=0.5-x,Dy=x-4*y,x(0)=1,y(0)=-0.5,t)x =1/2+1/2*exp(-t)y =1/8+1/6*exp(-t)-19/24*exp(-4*t)plot(t,x,t,y)图像:t=0:0.01:25;x=1/2+1/2*exp(-t);y =1/8+1/6*exp(-t)-19/24*exp(-4*t);plot(t,x,t,y)14设通过测量得到时间t与变量y的数据: t=0 0.3 0.8 1.1 1.6 2.3;y=0.5 0.82 1.14 1.25 1.35 1.41;分别采用多项式: y=a0+a1t+a2t2和指数函数 y=b0+b1et+b2tet进行拟合,并计算均方误差、画出拟合效果图进行比较。解:此题可用工具箱来求解:可在commend window中输入cftool,调出工具箱。选择date;之后选择fitting,建立new fit,选择自定义,定义所需函数即可。详细过程略。15观察函数: y=ex-1.5cos(2*pi*x)在区间-1,1上的函数图像,完成下列两题:(1)用函数fzero求解上述函数在-1,1的所有根,验证你的结果;(2)用函数fminbnd求解上述函数在-1,1上的极小、极大、最小和最大值,在函数图像上标出你求得的最小值点作出验证。注:可以用help fzero命令查看fzero的调用格式,fzero典型的调用方法是:fzero(myfun,x0) %返回函数myfun在x0附近的根;fminbnd典型的调用方法是:fminbnd(myfun,x1,x2) %返回函数myfun在区间x1,x2上的最小值。解:(1)x=-1:0.01:1;y=exp(x)-1.5*cos(2*pi*x);plot(x,y,g)hold on y0=0;plot(x,y0,k) z=fzero(f,-0.8)z = -0.7985 z=fzero(f,-0.1)z = -0.1531z=fzero(f,0.1)z = 0.1154(2)f.mfunction y=f(x);y=exp(x)-1.5*cos(2*pi*x);x=fminsearch(f,-0.2,0.2)x = -0.0166x=fminsearch(f,-1,1)x = -1.0062f1.mfunction y=f(x);y=-exp(x)+1.5*cos(2*pi*x);x=fminsearch(f1,0.4,0.6)x =0.5288x=fminsearch(f1,-0.6,-0.4)x = -0.4897x1=-1.0062 ;y1=exp(x1)-1.5*cos(2*pi*x1)y1 = -1.1333 plot(x1,y1,*) 练习2 编程练习1. 题目:判断101-200之间有多少个素数,并输出所有素数。编写以fun1为名的脚本文件。程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 =t=1;for i=101:200 for j=1:i if (round(i/j)=(i/j)&j=1&j=i) break end end if j=i s(t)=i; t=t+1; endenddisp(:,num2str(s)length(s)2题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方5的三次方3的三次方。编写以fun2为名的脚本文件。程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。for i=100:999 n1=fix(i/100); n2=fix(i-n1*100)/10); n3=i-n1*100-n2*10; if (n13+n23+n33=i) disp(i) endend3. 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。编写以fun3为名的函数文件。程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 n=input(:);A=factor(n);str=sprintf(%d%s%d,n,=,A(1,1); s,d=size(A); for i=2:d str=sprintf(%s%s%d,str,*,A(1,i); end str4. 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。编写以fun4为名的函数文件。=str = input(s,s)len=length(str);sz=0;zm=0;kg=0;qt=0;for i=1:lenif str(i)=0&str(i)=A&str(i)=a&str(i)=z)zm=zm+1;elseif str(i)= kg=kg+1;elseqt=qt+1;endenddisp(:,num2str(zm);disp(:,num2str(sz);disp(:,num2str(kg);disp(:,num2str(qt);5. 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=123.编程找出1000以内的所有完数。编写以fun5为名的脚本文件。=for n = 1:1000 s=0;for i=1:n/2 if rem(n,i)=0 s=s+i; end; end;if n=s disp(n);endend6. 题目:企业发放的奖金根据利润提成。利润x低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润x,求应发放奖金总数?编写以fun6为名的函数文件。n=input(n=)if n=10 i=0.1*nelse if 10n&n=20 i=10*0.1+(n-10)*0.075 else if 20n&n=40 i=10*0.1+10*0.075+(n-20)*0.05 else if 40n&n=60 i=10*0.1+10*0.075+20*0.05+(n-40)*0.03 else if 60n&n100 i=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(n-100)*0.01 end end end end end7. 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?编写以fun7为名的脚本文件。程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方,如果开方后的结果满足如下条件,即是结果。=for i = 1:10000 x = fix(sqrt(i+100); y = fix(sqrt(i+268); if(x*x=i+100&y*y=i+268) i endend 8. 题目:输入三个整数x,y,z,请把这三个数由小到大输出。编写以fun15为名的函数文件。程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。=x = input(x:);y = input(y:);z = input(z:);if x=y&y=zt=z;m=y;n=x;elseif x=z&z=yt=y;m=z;n=x;elseif y=x&x=zt=z;m=x;n=y;elseif y=z&z=xt=x;m=z;n=y;elseif z=x&x=yt=y;m=x;n=z;elseif z=y&y=xt=x;m=y;n=z;enddisp(,num2str(t),num2str(m),num2str(n)9. 题目:输出9*9口诀。编写以fun9为名的脚本文件。程序分析:分行与列考虑,共9行9列,i控制行,j控制列。=for i=1:9 for j=1:i k=i*j; fprintf(num2str(j),*,num2str(i),=,num2str(k),t) end fprintf(n)end10. 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前n项之和。输入n,输出和s。编写以fun10为名的函数文件。程序分析:请抓住分子与分母的变化规律。 =i=input(i=)a=2,b=1,s=0;for n=1:is=s+a/b;t=a;a=a+b;b=t;endfprintf(sum is:, num2str(s)11. 题目:编写以fun11为名的函数文件。将所输入的5个字符,以相反顺序打印出来。=b=3 4 5 4 7for i= 1:5if a(5)a(i) m=a(i); a(i)=a(5); a(5)=m; elseif a(4)a(2) n=a(2) a(2)=a(4) a(4)=nendendb另:可用Fliplr(4 5 7 8 9)A=bgf89B=A(end:-1:1)12. 题目:对n个数进行排序。即输入n个数,输出结果为由大到小的顺序。编写以fun12为名的函数文件。程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。 =A=1,9,7,8,5Sort(A)13. 题目:编写一个函数,输入n为偶数时,求1/2+1/4+.+1/n,当输入n为奇数时,求1/1+1/3+.+1/n。编写以fun13为名的函数文件。n=input(n=)if (rem(n,2)=0) s=0;for i=2:2:ns=s+1/i;endelse s=0; for i=1:2:n s=s+1/i; endends另:此题可以把他们看成级数,只需:S=symsum(1/(2*n),1,n)S=symsum(1/(2*n-1),1,n)14. 题目:输入数字a,按以下规则进行。每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。编写以fun14为名的函数文件。=x1=input()a1=fix(x1/1000);a2=fix(x1-a1*1000)/100);a3=fix(x1-a1*1000-a2*100)/10);a4=fix(x1-a1*1000-a2*100-a3*10);a=rem(a4+5),10);b=rem(a3+5),10);c=rem(a2+5),10);d=rem(a1+5),10);x=a*1000+b*100+c*10+d15. 题目:求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。输入m,输出a,n。编写以fun15为名的函数文件。m=input(m=);n=0;for i=1:1:m if rem(i,7)=0|rem(i,11)=0 n=n+1; i endendn16. 题目:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。S=1+1/(1+2)+1/(1+2+3)+1/(1+2+3+n)。编写以fun16为名的函数文件。 n=input(n=)s=0;m=0;for i=1:1:nm=m+i;s=s+1/m;ends练习3 优化问题练习1、线性规划规划问题不等式约束默认是,所有不等式约束都要变成的形式。函数原型:X=linprog(f,A,b,Aeq,beq,LB,UB,X0,OPTIONS)f:目标函数的系数列向量A:不等式约束条件的系数矩阵b:不等式约束条件的Aeq:等式约束条件的系数矩阵beq:等式约束条件的lb

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论