实验三MATLAB的基本语法二.docx
《实验三MATLAB的基本语法二.docx》由会员分享,可在线阅读,更多相关《实验三MATLAB的基本语法二.docx(17页珍藏版)》请在冰豆网上搜索。
![实验三MATLAB的基本语法二.docx](https://file1.bdocx.com/fileroot1/2023-1/2/b95f6bba-6446-4869-883c-fc4fd434847d/b95f6bba-6446-4869-883c-fc4fd434847d1.gif)
实验三MATLAB的基本语法二
实验三:
MATLAB的基本语法实验
(二)
一、实验目的
1、掌握基本绘图方法;
2、掌握M文件的编写;
二、实验仪器
1、计算机
2、MATLAB软件环境
三、实验内容
1、画出课本图2-4至2-7、图2-10、2-12至2-14;练习例题2-6-1/2-6-2以及函数文件mean.m/logspace.m/humps.m;
2、利用plot()将函数:
y=x,y=sin(x),y=x+sin(x)画在同一画面上;
3、画函数y=sin(x)图。
要求:
用subplot()将画面分成四个,并且绘制的形式不同;
4、利用plot3()画空间曲线:
x=sin(t),y=cos(t),z=cos(2t);
5、分别用mesh和surf画空间曲面:
z=x*exp(-x*x-y*y);
6、编写主程序文件:
计算1+2+…+n<2000时的最大n值;
7、编写函数文件:
计算数列的和、均值。
四、实验过程
1、画出课本图2-4至2-7、图2-10、2-12至2-14;练习例题2-6-1/2-6-2以及函数文件mean.m/logspace.m/humps.m;
课本2-4过程及图示:
输入如下指令:
>>clear
>>t=0:
0.5:
4*pi
t=
Columns1through12
00.50001.00001.50002.00002.50003.00003.50004.00004.50005.00005.5000
Columns13through24
6.00006.50007.00007.50008.00008.50009.00009.500010.000010.500011.000011.5000
Columns25through26
12.000012.5000
>>y=exp(-0.1*t).*sin(t);
>>y1=exp(-0.1*t).*sin(t+1);
>>plot(t,y),holdon
>>plot(t,y1,':
'),holdon
>>
得到的图形窗口为:
图2-4两根曲线画在同一图上
课本2-5过程及图示:
程序如下
>>clear
>>t=0:
.2:
2*pi;
>>y=exp(-0.1*t).*sin(t);
>>y2=exp(-0.5*t).*sin(5*t+1);
>>plot(t,y,'+g',t,y2,':
r')
>>title('线型、点型和颜色')
>>xlabel('时间'),ylabel('Y')
>>
图2-5两组长度不同的【t,y】画在同一图上
课本2-6过程及图示:
程序如下
>>clear
>>t=0:
.5:
4*pi;
>>t2=0:
.2:
2*pi;
>>y=exp(-0.1*t).*sin(t);
>>y2=exp(-0.5*t2).*sin(5*t2+1);
>>y3=5*y2;
>>plotyy(t,y,t2,y3)
>>grid
>>gtext('t,t2')
>>gtext('y'),gtext('y3')
>>
>>
图2-6双纵坐标绘图
课本2-7过程及图示:
程序如下
>>clear
>>t=0:
.5:
4*pi;
>>y=exp(-0.1*t).*sin(t);
>>subplot(2,2,1),stem(t,y)
>>title('stem(t,y)'),pause
>>subplot(2,2,2),stairs(t,y)
>>title('stairs(t,y)'),pause
>>subplot(2,2,3),bar(t,y)
>>title('bar(t,y)'),pause
>>subplot(2,2,4),fill(t,y,'r')
>>title('fill(t,y,''r'')')
图2-7同一函数的几种不同的绘制形式
课本2-10过程及图示:
程序如下
>>clear
>>z=0:
0.1:
4*pi;
>>x=cos(z);
>>y=sin(z);
>>plot3(x,y,z)
>>
图2-10空间螺旋线
课本2-12、13过程及图示:
程序如下
>>clear
>>x=-8:
0.5:
8;
>>y=x';
>>X=ones(size(y))*x;Y=y*ones(size(x));
>>R=sqrt(X.*Y+Y.*X);
>>z=sin(R)./R;
Warning:
Dividebyzero.
(Type"warningoffMATLAB:
divideByZero"tosuppressthiswarning.)
>>mesh(z),pause
>>R=sqrt(X.*X+Y.*Y)+eps;z=sin(R)./R;figure
(1),mesh(z)
>>R=abs(X)+abs(Y)+eps;z1=sin(R)./R;figure
(2),surf(z1)
>>
图2-12z=sin(R)./(R)的三维曲面图
图2-13当R取一范数时z=sin(R)./(R)的三维曲面图
课本2-14过程及图示:
程序如下
>>clear
>>[X,Y]=meshgrid(-8:
0.5:
8,-8:
0.5:
8);
>>subplot(2,2,1),R=sqrt(X.^2+Y.*Y);z=sin(R)./(R);meshc(z),pause
Warning:
Dividebyzero.
(Type"warningoffMATLAB:
divideByZero"tosuppressthiswarning.)
>>title('meshc(z),shadingflat'),shadingflat
>>subplot(2,2,2),R=sqrt(X.^2+Y.*Y)+eps;z=sin(R)./(R);meshz(z),pause
>>title('meshz(z),shadinginterp'),shadinginterp
>>subplot(2,2,3),R=abs(X)+abs(Y)+eps;z1=sin(R)./(R);surfc(z1),pause
>>title('meshc(z1),shadingflat'),shadingflat,%colormap(gray)
>>subplot(2,2,4),surfl(z1),view(20,0)
>>title('surfl(z1),view(20,0)')
>>
图2-14mesh和surf命令的其它形式
课本2-6-1及2-6-2程序:
程序如下
%求fibonacci.m文件的程序
clear,closeall
R=input('输入fibonacci数的最大范围R='),f=[11];i=1;
whilef(i)+f(i+1)end
f,plot(f)
%求素数prime.m文件的程序
disp('求素数(primenumber)的程序'),pause
N=input('输入素数的最大范围N='),x=2:
N;
foru=2:
sqrt(N)
n=find(rem(x,u)==0&x~=u);
x(n)=[];
end,x
panse,x=rand(4,4),
pause,mean(x)
>>
%mean.m文件的程序
functiony=mean(x,dim)%函数定义行
ifnargin==1,%函数主体
dim=min(find(size(x)~=1));
ifisempty(dim),dim=1;end
y=sum(x)/size(x,dim);
else
y=sum(x,dim)/size(x,dim);
end
>>
%logspace.m文件的程序
functiony=logspace(a1,a2,n)
%logspace对数的均分数组
%logspace(a1,a2)在10^a1与10^a2之间生成长度为50的对数数组
%如果a2为pi,则这些点在10^a1和pi之间
%logspace(a1,a2,n)的数组长度为n
ifnargin==2%输入变量分析及n的默认值设置
n=50;
end;
ifa2==pi%a2为pi时的设置
a2=log10(pi);
end
y=(10).^[a1+(0:
n-2)*(a2-a1)/(n-1),a2];%将结果返回到输出变量
>>
%humps.m文件的程序
function[out1,out2]=humps(x)
ifnargin==0
x=0:
0.05:
1;
end
y=1./((x-0.3).^2+0.1)+1./((x-0.9).^2+0.4)-6;
ifnargout==2
out1=x;
out2=y;
else
out1=y;
end
2、利用plot()将函数:
y=x,y=sin(x),y=x+sin(x)画在同一画面上的过程如下:
程序如下所示:
>>clear
>>x=0:
0.5:
4*pi;
>>y1=x;y2=sin(x);y3=x+sin(x);
>>plot(x,[y1;y2;y3])
>>title('y=x,y=sin(x),y=x+sin(x)的图像')
>>xlabel('x'),ylabel('Y')
>>gridon
>>gtext('y1'),gtext('y2'),gtext('y3')
>>
图2y=x,y=sin(x),y=x+sin(x)在同一个图上面显示
3、画函数y=sin(x)图。
要求:
用subplot()将画面分成四个,并且绘制的形式不同;
程序如下所示:
>>clear
>>x=0:
0.5:
4*pi;
>>y=sin(x);
>>subplot(2,2,1),stem(x,y)
>>title('抽样图stem(x,y)'),pause
>>subplot(2,2,2),stairs(x,y)
>>title('梯形图stair(x,y)'),pause
>>subplot(2,2,3),bar(x,y)
>>title('条状图bar(x,y)'),pause
>>subplot(2,2,4),fill(x,y,'r')
>>title('填充图fill(x,y)')
>>
图3y=sin(x)几种不同形式的图在同一个图上面显示
4、利用plot3()画空间曲线:
x=sin(t),y=cos(t),z=cos(2t);
程序如下所示:
>>clear
>>t=0:
0.5:
4*pi;
>>x=sin(t);y=cos(t);z=cos(2*t);
>>plot3(x,y,z)
>>
图4画空间曲线x=sin(t),y=cos(t),z=cos(2*t)的图像
5、分别用mesh和surf画空间曲面:
z=x*exp(-x*x-y*y);
程序如下所示:
>>clear
>>x=-10:
0.5:
10;y=x';
>>X=ones(size(y))*x;Y=y*ones(size(x));
>>z=X.*exp(-X.*X-Y.*Y);
>>subplot(2,1,1),mesh(z)
>>title('mesh(z)网格图')
>>subplot(2,1,2),surf(z)
>>title('surf(z)曲面图')
>>
图5分别用mesh和surf画z=x*exp(-x*x-y*y)的图像
6、编写主程序文件:
计算1+2+…+n<2000时的最大n值;
写出的函数命名为fsumx.m文件,意思是求求和的逆函数,写好后只要在命令窗口(commandwindows)中输入fsumx(2000)即可得到最大的n值。
程序如下所示:
functionfsumx(q)
n=0;p=0;
whilepn=n+1;
p=p+n;
end
n=n-1
然后再命令窗口中输入以下指令即可得出结果:
>>clear
>>fsumx(2000)
n=
62
>>
7、编写函数文件:
计算数列的和、均值。
等差求和函数如下所示:
命名为shulie_sum.m文件(求等差数列)
说明:
函数中a0是首项,d是公差,n是等差数列的项数。
程序如下所示:
functionshulie_sum(a0,d,n)
p=a0;ax=a0;n=n-1;
whilen>0
n=n-1;
ax=ax+d;
p=p+ax;
end
p
可以试几个例子,知道结果
>>clear
>>shulie_sum(0,1,4)
p=
6
>>shulie_sum(2,3,5)
p=
40
>>
写完求和函数后,很容易就可以写出求均值函数,命名为shulie_junzhi.m
程序如下所示:
functionshulie_junzhi(a0,d,n)
p=a0;ax=a0;m=n;m=m-1;
whilem>0
m=m-1;
ax=ax+d;
p=p+ax;
end
p=p/n
这里很容易验证其正确性,我就不给出运行的实例了。
等比求和函数如下所示:
命名为dengbi_shulie_sum.m文件(求等差数列)
说明:
函数中a0是首项,q是公比,n是等比数列的项数。
程序如下所示:
functiondengbi_shulie_sum(a0,q,n)
p=a0;ax=a0;n=n-1;
whilen>0
n=n-1;
ax=ax*q;
p=p+ax;
end
p
等比数列求平均值函数如下所示:
functiondengbi_shulie_junzhi(a0,q,n)
p=a0;ax=a0;m=n;m=m-1;
whilem>0
m=m-1;
ax=ax*q;
p=p+ax;
end
p=p/n
五、实验的收获、心得、问题、困难和建议
本次实验的题目很适合入门的我们训练,花了大概4、5个小时,终于做完了,感觉就是不很熟练,以后会去多阅读些程序,并且实时运用,多读、多练才能达到融会贯通的境界!