matlab简单编程21个题目及答案(共22页).doc
精选优质文档-倾情为你奉上1、 设 ,把x=02间分为101点,画出以x为横坐标,y为纵坐标的曲线。第一题的matlab源程序: 考虑cos(x)为一个整体,然后乘以中括号里面的全部x=0:2*pi/100:2*pi; %x的步长以及范围从0到2*piy=cos(x).*(0.5+3*sin(x)./(1+x.2); %y的表达式plot(x,y) %画出图形图如下:考虑对整体求解cos,先求x乘以括号中的部分x=0:2*pi/100:2*pi; %x的步长以及范围从0到2*piy=cos(x.*(0.5+3*sin(x)./(1+x.2); %y的表达式plot(x,y) %画出图形图如下:2、产生8×6阶的正态分布随机数矩阵R1, 求其各列的平均值和均方差。并求该矩阵全体数的平均值和均方差。 第二题的matlab源程序如下: R1=randn(8,6) %产生正态分布随机矩阵R1 = 1.0933 -0.7697 1.5442 -0.1924 1.4193 0.2157 1.1093 0.3714 0.0859 0.8886 0.2916 -1.1658 -0.8637 -0.2256 -1.4916 -0.7648 0.1978 -1.1480 0.0774 1.1174 -0.7423 -1.4023 1.5877 0.1049 -1.2141 -1.0891 -1.0616 -1.4224 -0.8045 0.7223 -1.1135 0.0326 2.3505 0.4882 0.6966 2.5855 -0.0068 0.5525 -0.6156 -0.1774 0.8351 -0.6669 1.5326 1.1006 0.7481 -0.1961 -0.2437 0.1873aver=(sum(R1(1:end,1:end)./8 %产生各行的平均值aver =0.0768 0.1363 0.1022 -0.3473 0.4975 0.1044a=std(R1(1:end,1:end) %产生各行的均方差也就是标准差a = 1.0819 0.8093 1.3456 0.8233 0.8079 1.2150aver1=(sum(R1(:)./48 %全体数的平均值aver1 = 0.0950b=std(R1(:) %全体数的均方差即标准差b =1.01033、设x=rcost+3t,y=rsint+3,分别令r=2,3,4,画出参数t=010区间生成的xy曲线。第三题的matlab源程序如下:t=0:0.1:10; %t的取值以0.1的步长从0到10r=2; %r=2x=r*cos(t)+3*t; %x的表达式y=r*sin(t)+3; %y的表达式plot(x,y,'r-') %用红色线绘制曲线hold on %保持窗口figure窗口不关闭t=0:0.1:10;%t的取值以0.1的步长从0到10r=3;%r=3x=r*cos(t)+3*t;%x的表达式y=r*sin(t)+3; %y的表达式plot(x,y,'b-.') %用蓝色点划线绘制曲线hold on %保持窗口figure窗口不关闭 t=0:0.1:10; %t的取值以0.1的步长从0到10r=4; %r=4x=r*cos(t)+3*t; %x的表达式y=r*sin(t)+3; %y的表达式plot(x,y,'m-') %用红紫色线绘制曲线图形如下:4、设f(x)=x5- 4x4 +3x2- 2x+ 6(1) 在x=-2,8之间取100个点,画出曲线,看它有几个过零点。(提示:用polyval 函数)(2) 用roots函数求此多项式的根。(1)matalab的源程序如下:(利用的是在同一图中展现两条线,通过放大看交点)x=-2:0.1:8; %x的取值范围y=0; %y=0plot(x,y,'m') %用红紫色表示绘制出的y=0的图像hold on %保持figure窗口不关闭x=-2:0.1:8; %x的取值范围p=1,-4,0,3,-2,6; %p表示函数表达式的系数矩阵y=polyval(p,x),plot(x,y) %y=polyval表示求多项式x处的y值,绘制图像图如下:将图形进行放大(如下),发现在实数域上有3个零点。(2)matlab源程序如下:roots(p)%求函数的根ans = 3.7999 -1.2607 1.3479 0.0564 + 0.9623i 0.0564 - 0.9623i可见实数解有三个,复数解有两个。5、建立一个字符串向量,然后对该向量做如下处理:(1) 取第15个字符组成的子字符串。(2) 将字符串倒过来重新排列。(3) 统计字符串中小写字母的个数。整个题的源程序如下所示:ch='abcj245DFGK' %建立一个字符串subch=ch(1:5) %取15个字符subch =abcj2revch=ch(end:-1:1) %倒序排列revch =KGFD542jcbaa=find(ch>='a'&ch<='z'); %找到小写字母的位置length(a) %输出小写字母的个数ans = 46、设x=sint, y=sin(nt+a),(1) 若a=1,令n =1,2,3,4,在四个子图中分别画出其曲线。(2) 若n=2,取a=0,/3,/2,及,在四个子图中分别画出其曲线。(1)matlab源程序如下;t=-pi:0.1:pi; %t的取值范围a=1;n=1; %a=1,n=1x=sin(t); %x的表达式y=sin(n*t+a); %y的表达式subplot(221),plot(x,y) %在子图第一张,画出图像hold on %保持figure不关闭 t=-pi:0.1:pi;%t的取值范围a=1;n=2; %a=1,n=2x=sin(t); %x的表达式y=sin(n*t+a); %y的表达式subplot(222),plot(x,y) %在子图的第二张画出图像hold on %保持figure不关闭 t=-pi:0.1:pi; %t的取值范围a=1;n=3; %a=1,n=3x=sin(t); %x的表达式y=sin(n*t+a); %y的表达式subplot(223),plot(x,y) %在子图的第三张,画出图像hold on %保持figure不关闭 t=-pi:0.1:pi;%t的取值范围a=1;n=4; %a=1,n=4x=sin(t); %x的表达式y=sin(n*t+a); %y的表达式subplot(224),plot(x,y) %在子图的第四张上,绘制图像 图形如下所示:(2)matlab源程序如下所示:t=-pi:0.1:pi;%t的取值a=0;n=2; %a与n的取值x=sin(t); %x的表达式y=sin(n*t+a); %y的表达式subplot(221),plot(x,y) %在子图的第一张绘制图像hold on %保持figure窗口不关闭t=-pi:0.1:pi; %t的取值a=pi./3;n=2; %a与n的取值x=sin(t); %x的表达式y=sin(n*t+a); %y的表达式subplot(222),plot(x,y) %在子图的第二张绘制图像hold on %保持figure窗口不关闭 t=-pi:0.1:pi; %t的取值a=pi./2;n=2; %a与n的取值x=sin(t); %x的表达式y=sin(n*t+a); %y的表达式subplot(223),plot(x,y) %在子图的第三张绘制图像hold on %保持figure窗口不关闭 t=-pi:0.1:pi; %t的取值范围a=pi;n=2; %a与n的取值x=sin(t); %x的表达式y=sin(n*t+a); %y的表达式subplot(224),plot(x,y) %在四个字图的第四张画出图像 图形如下所示:7、绘制在定义域x=-2,2,y=-2,2内的曲面。Matlab源程序如下:x,y=meshgrid(-2:0.1:2); %此处描述x,y的范围z=x.2.*exp(-(x.2+y.2);%z的表达式surf(x,y,z) %绘制曲面图形如下所示:经过旋转之后的图形:8、,画出在上的曲线所建立的M文件如下所示:function y=A(x); %文件名为Aif x>=-3&x<-1%在-3x<-1的条件下 y=(-x.2-4*x-3)./2; %y所对应上述条件下的表达式elseif x>=-1&x<1 %-1x<1 y=-x.2+1; %y所对应的上述条件下的表达式else x>=1&x<=3 %1x3 y=(-x.2+4*x-3)./2; %y所对应的上述条件下的表达式end %结束在command windows 中输入:fplot('A',-3,3) %绘制在-3到3上的曲线所得图形如下所示:9、(1)设,求syms x %定义变量xy=x.*exp(2.*x); %y的表达式s=diff(y,x,20) %对y求x的20阶导数s =*exp(2*x) + *x*exp(2*x) (2)设,求syms x %定义变量xy=sin(x).4+cos(x).4; %y的表达式s=diff(y,x,10) %对y求x的10阶导数s =- *cos(x)4 + *cos(x)2*sin(x)2 - *sin(x)4(3)设,求 syms x y %定义自变量x,yz=y.4.*(sin(x).4)+x.4.*(cos(y).4); %z的表达式s=diff(z,x) %对z求x的偏导数s =4*x3*cos(y)4 + 4*y4*cos(x)*sin(x)3(4)syms x %定义自变量xi=int(1/(x.2+1).*(x.2+x); %不定积分表达式pretty(i) %求解不定积分 / i log(x + 1) / i log(x) + log(x + i) | - - - 1/4 | - - + log(x - i) | - - 1/4 | 4 / 2 4 /(5) syms x %定义自变量 xi=int(sqrt(9-x.2).3)./(x.6); %不定积分表达式pretty(i) %求解不定积分 / 9 2 3 1/2 | - - 1 | (- (x - 9) ) | 2 | x / - - 3 45 x(6)syms x %定义自变量xi=int(1./(x+x.3),2,1) %定积分表达式i = %定积分的解log(10(1/2)/4)(7)求级数的和: syms n %定义自变量nf=(n+2)./(2.n); %级数的表达式symsum(f,n,n-1,inf) %对级数求和ans =2*2(1 - n)*(n + 2) (8)利用函数int计算二重不定积分syms x y %定义自变量x,yi=int(int(x+y).*exp(-x.*y); %二重不定积分表达式pretty(i) %求解二重不定积分 2 y + x y + 2 - 3 y exp(x y)10、编制m文件,输入n(正整数),显示所有小于n的质数。编制的m文件如下所示:function xin10; %定义文件名为xin10clc,clear %清屏,清内存n=input('输入一个正整数:') %输入数据for i=1:1:n %i的变化范围 if isprime(i) %判断是否为质数 disp(i) %输出质数 end %结束ifend %结束forend %结束function11、从键盘输入若干个数,当输入0时结束输入,求这些数的平均值以及平方和。编制的m文件如下所示:假设输入数据结束时输入0作为结束,不考虑输入的数据中出现会结束输入的现象,则程序如下:function lin11; %定义文件名为lin11clc,clear %清屏,清内存m=input('以1*n矩阵的形式输入数据并以0结尾:') %输入数据k=size(m) %m的大小for i=1:k(2) %i的变化范围 if m(i)=0 %m=0时的每一个k值 k(2)=i-1; %另k(2)=i-1 end %结束if循环end %结束for循环M=m(1:k(2) %将若干个数输出B=sum(M)./k(2) %对若干个数求和再求平均值C=sum(M.2) %输出m的值,进行求值end %结束function12、利用rand产生10个随机数,利用for循环对其进行排序(从大到小)。编制的m文件如下所示:function lin12; %定义文件名为lin12clc,clear %清屏,清内存a=rand(10,1) %产生10个随机数,这个地方可加可不加;for i=1:length(a) %i的取值范围 for j=1:length(a)-1 %j的取值范围 if a(j)<a(j+1) %冒泡法进行排序,判断两个数的大小 t=a(j); %将小的数赋值给t a(j)=a(j+1); %将大数赋值给a(j) a(j+1)=t; %将t赋值给a(j+1) end %结束if循环 end %结束for循环end %结束for循环a %输出数据a此处一定要写上a,不然没有数据输出end %结束function 13、将一个整型数组的元素按逆序重新存放(如原序为:8,6,5,4改为:4,5,6,8)。编制的m文件如下所示:function lin13; %定义文件名为lin13clc,clear %清屏,清内存a=input('请输入数据:') %输入数据 n=length(a); %判断数据的长度for i=1:n/2 %i的变化范围 b=a(i); %将a(i)赋值给b a(i)=a(n+1-i); %将对应位置的值复制给a(i) a(n+1-i)=b; %将b值赋值给a(n+1-i)end %结束for循环fprintf(' %d',a) %这个地方%d之前有一个空格,保证输出数据时分开的end %结束function14、输入一个整数,写一程序输出它是几位数。编制的m文件如下所示:function lin14; %定义文件名为lin14clc,clear %清屏,清内存a=input('请输入数据:','s') %此处由于输入的整数是以整体的形式输入,所以sn=length(a); %计算a的长度fprintf('位数 %d',n); %输出a的位数end %结束function15、从键盘上输入a与n的值,计算sum=a+aa+aaa+aaaa+(共n项)的和。例a=2,n=4,则sum=2+22+222+2222.编制的m文件如下所示:function lin15; %定义文件名为lin15clc,clear %清屏,清内存a=input('请输入a=') %输入a的值n=input('请输入n=') %输入b的值i=1;sum=0;he=0; %定义i,sum,he的初始值while i:n %i的变化范围 he=he+a*10(i-1); %通过i值得变化得到不同的数值 sum=sum+he; %令sum为总和 i=i+1; %i的变化 end %结束whilefprintf('sum is %ld',sum); %输出总和end %结束function 16、设计一个用于计算个人所有税的程序。假设个人所得税的缴纳标准为:月收入少于等于800元者不纳税;超出800元的部分,纳税5%;超出2000元的部分,纳税10%;超出5000元的部分,纳税20%;超出10000元的部分,纳税30%;超出元的部分,纳税40%。编制的m文件如下所示:function xin16; %定义文件名为xin16clc,clear %清屏,清内存a=input('请输入月收入:') %输入a的值if a> %工资数目大于时 j=(a-)*0.4+90000*0.3+5000*0.2+3000*0.1+1200*0.5; %交税计算公式elseif a>10000 %工资数目大于10000且小于的条件下时 j=(a-10000)*0.3+5000*0.2+3000*0.1+1200*0.5; %交税计算公式elseif a>5000 %工资数目大于5000且小于10000时 j=(a-5000)*0.2+3000*0.1+1200*0.5; %交税计算公式elseif a>2000 %工资数目大于2000且小于5000时 j=(a-2000)*0.1+1200*0.05; %交税计算公式elseif a>800 %工资数目大于800且小于2000时 j=(a-800)*0.05; %交税计算公式else %工资低于800时 j=0 %不交税end %结束if循环fprintf(' %d',j) %输出交税数目end %结束fu