《MATLAB与控制系统仿真》
实验报告
(20##年第三版)
西安邮电大学自动化学院
周一
06114067(23)
实验三 MATLAB图形系统
一、实验目的
1.掌握绘制二维图形的常用函数。
2.掌握绘制三维图形的常用函数。
3.熟悉利用图形对象进行绘图操作的方法。
4.掌握绘制图形的辅助操作。
二、实验原理
1,二维数据曲线图
(1) 绘制单根二维曲线 plot(x,y);
(2) 绘制多根二维曲线 plot(x,y) 当x是向量,y是有一维与x同维的矩阵时,则绘制多根不同颜色的曲线。当x,y是同维矩阵时,则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
(3) 含有多个输入参数的plot函数 plot(x1,y1,x2,y2,…,xn,yn)
(4) 具有两个纵坐标标度的图形 plotyy(x1,y1,x2,y2)
2,图形标注与坐标控制
1)title (图形名称);
2)xlabel(x轴说明)
3)ylabel(y轴说明)
4)text(x,y图形说明)
5)legend(图例1,图例2,…)
6)axis ([xmin xmax ymin ymax zmin zmax])
3, 图形窗口的分割
subplot(m,n,p)
4,三维曲线
plot3(x1,y1,z1,选项1,x2,y2,选项2,…,xn,yn,zn,选项n)
5,三维曲面
mesh(x,y,z,c) 与surf(x,y,z,c)。一般情况下,x,y,z是维数相同的矩阵。X,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。
6,图像处理
1) imread和imwrite函数 这两个函数分别用于将图象文件读入matlab工作空间,以及将图象数据和色图数据一起写入一定格式的图象文件。
2) image和imagesc函数 这两个函数用于图象显示。为了保证图象的显示效果,一般还应使用colormap函数设置图象色图。
三、实验仪器和设备
计算机一台(带有MATLAB6.5以上的软件环境)。
四、预习要求
1.复习二维与三维图形的绘图函数。
2.复习图形辅助操作。
五、实验内容及步骤
1,设,在x=0~2π区间取101点,绘制函数曲线。
>> x=0:0.02*pi:2*pi;
y=(0.5+3*sin(x)/(1+x.^2))*cos(x);
plot(x,y);
>> grid
2,已知y1=x2,y2=cos(2x),y3=y1*y2,完成下列操作:
(1)在同一坐标系下用不同的颜色和线型绘制三条曲线;
>> y1=x.^2;
y2=cos(2*x);
y3=y1.*y2;
plot(x,y1,x,y2,x,y3);
(2) 分别用条形图、阶梯图、杆图和填充图绘制三条曲线。
>> subplot(2,2,1),bar(x,y1);
>> subplot(2,2,2),bar(x,y2);
>>subplot(2,2,3),bar(x,y3); >> subplot(2,2,1);stairs(x,y1);
subplot(2,2,2);stairs(x,y2);
subplot(2,2,3);stairs(x,y3); >> subplot(2,2,1),stem(x,y1);
subplot(2,2,2),stem(x,y2);
subplot(2,2,3),stem(x,y3); >> subplot(2,2,1),area(x,y1);
subplot(2,2,2),area(x,y2);
subplot(2,2,3),area(x,y3);
3,已知
在-5<=x<=5区间绘制函数曲线。
>>x=-5:0.1:5;
>>y=((x+sqrt(pi))./exp(2)).*(x<=0)+0.5.*log(x+sqrt(1+x.^2)).*(x>0);
>> plot(x,y)
>> grid
4,绘制函数的曲面图和等高线
其中x的21个值均匀分布在[-5,5]范围,y的31个值均匀分布在[0,10],要求使用subplot(2,1,1)和subplot(2,1,2)将产生的曲面图和登高图画在同一个窗口上。
>> x=-5:(10/20):5;
y=0:(10/30):10;
[x,y]=meshgrid(x,y);
z=cos(x).*cos(y).*exp(-sqrt(x.^2+y.^2)./4);
>> subplot(2,1,1),mesh(x,y,z);
>> subplot(2,1,2),meshc(x,y,z);.....
5.将图形窗口分成两格,分别绘制正割和余割函数曲线,并加上适当的标注。
要求:1)必须画出0到,即一个周期的曲线。
2)正割曲线为红色点划线输出,余割曲线为蓝色实线输出。
3)图形上面表明正割和余割公式,横轴标x,纵轴标y。
4)将图形窗口分成两格,正割在上,余割在下。
>> x=0:0.01:2*pi;
y1=sec(x);
y2=csc(x);
subplot(2,1,1),plot(x,y1,'r');
title('y=sec(x)');
xlabel('x');
>> ylabel('y');
>> grid
>> subplot(2,1,2),plot(x,y2,'b');
title('y=csc(x)');
xlabel('x');
ylabel('y');
grid
6.绘制极坐标曲线,并分析参数对曲线形状的影响。
>> a=5;
>> b=pi/3;
>> n=2;
>> theta=0:0.01:5*pi;
>> y=a.*sin(b+n.*theta);
>>polar(theta,y,'b')
a决定了最外圆的半径,b决定了扇形的分布情况,n决定了扇形的数目。
7.将图形窗口分成两个窗格,分别绘制出函数:
在[0,3]区间上的曲线,并利用axis调整轴刻度纵坐标刻度,使在[0,12]区间上,在[-2,1.5]区间上。
>> x=0:0.01:3;
y1=2*x+5;
y2=x.^2-3*x+1;
subplot(1,2,1),plot(x,y1);
axis([0 3 0 12]);
grid
subplot(1,2,2),plot(x,y2);
axis([0 3 -2 1.5]);
grid
8.画出函数
的曲面及等高线图。
>> x=-20:0.01:20;
y=-20:0.01:20;
[x,y]=meshgrid(x,y);
z=x.^2+y.^2+sin(x.*y);
mesh(x,y,z);
meshc(x,y,z);
9.综合实例中,还有一种最常用的电力系统无源滤波器单调谐滤波器,其结构如图3-2所示,其阻抗表达式为:
式中,为次谐波角频率,为基波角频率。当设,,,,在[0.5,25]取值时,单调谐滤波器的阻抗与谐波次数的曲线如图3-4所示,试编写程序完成曲线的画取(注意图中各个地方的标注均用程序实现)。
10.用曲面图表现函数,和的范围从-4到4,设置当前图形的颜色板从黑色到暗红、洋红、黄色、白色的平滑变化,打开网格。
>> x=-4:0.01:4;
>> y=-4:0.01:4;
>> [x,y]=meshgrid(x,y);
>> z=x.^2+y.^2;
>> mesh(x,y,z);
>> meshc(x,y,z);
>>colorbar('hot');
11. 根据绘制平面曲线,并分析参数对其形状的影响。
实验四 MATLAB程序设计
一、实验目的
1.掌握利用if语句实现选择结构的方法。
2.掌握利用switch语句实现多分支选择结构的方法。
3.掌握利用for语句实现循环结构的方法。
4.掌握利用while语句实现循环结构的方法。
二、实验设备及条件
计算机一台(带有MATLAB6.5以上的软件环境)。
三、实验内容
1.编写求解方程的根的函数(这个方程不一定为一元二次方程,因的不同取值而定),这里应根据的不同取值分别处理,有输入参数提示,当时应提示“为恒不等式!”。并输入几组典型值加以检验。disp('关于方程 ax^2+bx+c=0')
a=input('请输入系数a=');
b=input(' b=');
c=input(' c=');
if a==0&&b==0
if c==0
disp('解为全体实数');
else
disp('为恒不等式!');
end
else
P=[a,b,c]; x=roots(P)
end
disp('关于方程ax^2+bx+c=0')
a=input('请输入系数a=');
b=input(' b=');
c=input(' c=');
if a==0&&b==0
if c==0
disp('解为全体实数');
else
disp('为恒不等式!');
end
else
P=[a,b,c]; x=roots(P)
end
关于方程ax^2+bx+c=0
请输入系数a=3
b=5
c=7
x =
-0.8333 + 1.2802i
-0.8333 - 1.2802i
关于方程ax^2+bx+c=0
请输入系数a=2
b=4
c=6
x =
-1.0000 + 1.4142i
-1.0000 - 1.4142i
2.输入一个百分制成绩,要求输出成绩等级A+、A、B、C、D、E。其中100分为A+,90分~99分为A,80分~89分为B,70分~79分为C,60分~69分为D,60分以下为E。
要求:(1)用switch语句实现。
(2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。g=input('请输入成绩')
if g<0||g>100
disp('错误,输入的成绩应为0~100之间的数')
else
g=fix(g/10);
switch g
case{10}
disp('A+');
case{9}
disp('A');
case {8}
disp('B');
case {7}
disp('C');
case {6}
disp('D')
otherwise
disp('E');
end
end
请输入成绩80
g =
80
B
3. 利用for循环语句编写计算n!的函数程序,取n分别为-89、0、3、5、10验证其正确性(输入n为负数时输出出错信息)。
n=input('请输入n=');
if n<0
disp('错误,n取值必须为正数');
else
y=1;
for i=1:n
y=y*i;
end
disp('n!=');
disp(y)
end
请输入n=6
n!=
720
4. Fibonacci数组的元素满足Fibonacci规则: ,;且。现要求该数组中第一个大于10000的元素。
a(1)=1;
a(2)=1;
i=2;
while a(i)<=10000
a(i+1)=a(i-1)+a(i);
i=i+1;
end;
i,a(i)
i =
21
ans =
10946
5.根据,求的近似值。当n分别取100、1000、10000时,结果是多少?
n=[100 1000 10000];
for j=1:3
y=0;
k=n(j);
for i=1:k
y=y+1/i/i;
end
pai=sqrt(6*y);
disp('n=');
disp(n(j));
disp('π的近似值为');
disp(pai);
end
n=
100
π的近似值为
3.1321
n=
1000
π的近似值为
3.1406
n=
10000
π的近似值为
3.1415
6. 有一分数序列:
编写一段程序,求前16项的和。
>> a=1;b=1;sum=0;
>> for i=1:15
c=a+b;
sum=sum+c/b;
a=b; b=c;
end
>> sum
sum =
24.5701
7,已知:
求中:
(1)最大值、最小值、各数之和;
(2)正数、零、负数的个数。
8. 建立5×6矩阵,要求输出矩阵第n行元素,当n值超过矩阵的行数时,自动转为输出矩阵最后一行元素,并给出出错信息。
9,根据,求的近似值。当n分别取100,1000,10000时,结果是多少?
实验五 MATLAB函数文件
一、实验目的
1,理解函数文件的概念;
2,掌握定义和调用matlab函数的方法。
二、实验原理
1,函数文件的定义:
函数文件是另一种形式的m文件,每一个函数文件都定义一个函数,事实上,matlab提供的标准函数大部分都是由函数文件定义的。
2,函数文件的基本结构
函数文件由function语句引导,其基本结构为:
Function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
其中以function开头的一行为引导行,表示该m文件是一个函数文件。
3,函数调用
函数文件编制好之欧,就可以调用函数进行计算了,函数调用的一般格式是:
[输出实参表]=函数名(输入实参表)
三、实验仪器和设备
1. 计算机一台(带有MATLAB6.5以上的软件环境)。
四、预习要求
1.复习函数的定义与编写原则。
2.复习函数的调用。
五、实验内容
1,一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数。例如13是绝对素数。试求所有的两位绝对素数。
要求:定义一个判断素数的函数文件。
for a=10:99
if isprime(a)
g=rem(a,10);
s=fix(a/10);
b=10*g+s;
if isprime(b)
disp(a)
end
end
end
11
13
17
31
37
71
73
79
97
2,已知
(1) 当时,求y值;
function x=fn(n)
x=n+10*log(n^2+5);
end
调用fn.m的命令文件文件
y=fn(40)/(fn(30)+fn(20))
y =
0.6390
(2) 当时,求y值。
function m=fun(n)
if n<=0
m=0;
else
m=n*(n+1)+fun(n-1);
end
end
调用fun.m的命令文件
y=fun(40)/(fun(30)+fun(20))
y =
1.7662
实验六 matlab数据处理与多项式计算
一、实验目的
1,掌握数据统计和分析的方法;
2,掌握数值插值与曲线拟合的方法;
3,掌握多项式计算的常用运算。
二、实验原理
1,数据统计处理
1)最大值与最小值
(a) 求向量的最大值与最小值 y=max(X) 与 [y,I]=max(X)
(b) 求矩阵的最大值和最小值 max(A) 与 [Y,U]=max(A), max(A,[],dim)
2) 求和与求积 sum(X), prod(X) sum(A)
3) 标准方差与相关系数
a)Y=std(A,flag,dim)
b) corrcoef(X)
2, 数据差值
a) 一维数据差值 Y1=interp1(X,Y,X1,’method’)
b) 二维数据差值 Z1=interp2(X,Y,Z,X1,Y1,’method’)
3, 曲线拟合
[P,S]=polyfit(X,Y,m)
4, 多项式计算
1)多项式的加减计算
2)多项式乘法运算 Y=conv(P1,P2)
3) 多项式除法 [Q,r]=deconv(P1,P2)
4) 多项式的导函数
p=polyder(P): 求多项式P的导函数
p=polyder(P,Q): 求P.Q的导函数
[p,q]=polyder(P,Q):求 P/Q的导函数,导函数的分子存入p,分母存入q。
5,多项式求值
1) 代数多项式求值 Y=polyval(P,x)
2) 矩阵多项式求值 polyvalm
6,多项式求根 x=roots(P)
三、实验仪器和设备
1. 计算机一台(带有MATLAB6.5以上的软件环境)。
四、预习要求
1.复习matlab多项式数值分析函数。
2.复习matlab曲线拟合与多项式计算函数。
五、实验内容及步骤
1,利用matlab提供的rand函数生成30,000个符合均匀分布的随机数,然后检验随机数的性质:
(1) 均值和标准方差;
(2) 最大元素与最小元素;
大于0.5的随机数个数占总数额百分比。
k=0;
x=rand(1,30000);
disp(['随机数的均值为:',num2str(mean(x))])
disp(['随机数的标准方差为:',num2str(std(x))])
disp(['随机数的最大元素为:',num2str(max(x))])
disp(['随机数的最小元素为:',num2str(min(x))])
disp(['大于0.5的随机数个数占总数的百分比为:',num2str(size(find(x>0.5))/size(x)*100),'%'])
随机数的均值为:0.49875
随机数的标准方差为:0.28898
随机数的最大元素为:0.99997
随机数的最小元素为:4.8345e-005
大于0.5的随机数个数占总数的百分比为:50.0567%
2,将100个学生5门功课的成绩存入矩阵P中,进行如下处理:
(1)分别求每门课的最高分、最低分及相应学生序号;
(2)分别求每门课的平均分和标准方差;
(3)5门课总分的最高分、最低分及相应学生序号;
(4)将5门课总分按照从大到小的顺序存入zcj中,相应学生序号存入xsxh。
提示:上机调试时,为避免输入学生成绩的麻烦,可用取值范围在[45,95]之间的随机矩阵来表示学生成绩。A=45+(95-45)*rand(100,5);
[x1,y1]=max(A)
[x2,y2]=min(A)
mean(A)
std(A)
[x3,y3]=max(sum(A,2))
[x4,y4]=min(sum(A,2))
s=sum(A,2);
[zcj,xsxh]=sort(s,1,'descend')
x1 =
94.9423 94.5937 93.9424 94.8336 94.4276
y1 =
36 91 43 19 80
x2 =
45.6523 45.4386 46.5305 45.7780 45.1957
y2 =
48 20 16 43 35
ans =
68.1119 71.1615 73.7554 73.4073 66.2990
ans =
13.8157 15.0664 13.5302 13.8475 14.1051
x3 =
444.4719
y3 =
87
x4 =
286.8945
y4 =
82
3,已知lgx在[1,101]区间10个整数采样点的函数值如下表所示:
试求lgx的5次拟合多项式p(x),并绘制lgx和p(x)在[1,101]区间的函数。
x=1:10:101;
y=[0,1.0414,1.3222,1.4914,1.6128,1.7076,1.7853,1.8513,1.9085,1.9590,2.0043];
p =
0.0000 -0.0000 0.0001 -0.0058 0.1537 -0.1326
p=polyfit(x,y,5)
x1=1:0.5:101;
y1=log10(x1);
p1=polyval(p,x1);
plot(x1,y1,'g:',x1,p1,'r-')
4,有三个多项式p1(x)=x4+2x3+4x2+5,p2(x)=x+2,p3(x)=x2+2x+3,试进行下列操作:
(1) 求P(x)=P1(x)+P2(x)P3(x);
p1=[1 2 4 0 5]
p2=[0 0 0 1 2]
p3=[0 0 1 2 3]
p8=conv(p2,p3)
pua=[0 0 0 0 1 2 4 0 5]
p=pua+p8
p1 =
1 2 4 0 5
p2 =
0 0 0 1 2
p3 =
0 0 1 2 3
p8 =
0 0 0 0 0 1 4 7 6
pua =
0 0 0 0 1 2 4 0 5
p =
0 0 0 0 1 3 8 7 11
(2)求P(x)的根;
x=roots(p)
x =
-1.3840 + 1.8317i
-1.3840 - 1.8317i
-0.1160 + 1.4400i
-0.1160 - 1.4400i
(3)当x取矩阵A的每一元素时,求P(x)的值,其中
A=[-1 1.2 -1.4;0.75 2 3.5;0 5 2.5]
polyval(p,A)
A =
-1.0000 1.2000 -1.4000
0.7500 2.0000 3.5000
0 5.0000 2.5000
ans =
1.0e+003 *
0.0100 0.0382 0.0125
0.0223 0.0970 0.4122
0.0110 1.2460 0.1644
(4)当以矩阵A为自变量时,求P(x)的值,其中A的值与(3)题相同。
A=[-1 1.2 -1.4;0.75 2 3.5;0 5 2.5]
polyvalm(p,A)
ans =
1.0e+003 *
0.0076 -0.1281 -0.0775
0.1328 1.3900 1.1644
0.1824 1.7364 1.5198