matlab实验报告.docx
《matlab实验报告.docx》由会员分享,可在线阅读,更多相关《matlab实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
![matlab实验报告.docx](https://file1.bdocx.com/fileroot1/2023-7/5/7af51c47-c79b-426f-ae5d-e47cf7af6e7f/7af51c47-c79b-426f-ae5d-e47cf7af6e7f1.gif)
matlab实验报告
《Matlab编程及系统仿真》结业报告
专业年级:
2011级通信工程
学号:
110143031118
姓名:
许志远
指导教师:
刘芳
2013年1月11日
目 录
1、实验一········································
二、实验二········································
三、实验三········································
四、实验四········································
五、实验五········································
六、实验六········································
七、实验七········································
八、实验八········································
九、实验九········································
十、实验十········································
十一、实验十一····································
十二、实验十二····································
1、用蓝色虚线绘制星型线
在
的图形.
源代码:
theta=0:
0.01:
2*pi;%设置中间变量及步长
x=2*cos(theta).^3;
y=2*sin(theta).^3;
plot(x,y,'b--')%“b”表示运用蓝色线,“--”表示做虚线
程序截图:
2、编写一个函数,使其能产生如下分段函数:
,并调用此函数,绘制x在[0,9],y在[0,1.5]上的f(x)的曲线,要求给x,y轴标注,并指出最大值的位置,写出完整的程序。
源代码:
x=0:
0.1:
9;
y=(0.5*x).*(x>=0&x<=2)+(1.5-0.25*x).*(x>2&x<=6)+(0.5).*(x>6&x<=9);%Y与X的关系式
plot(x,y,'-red')%画出X、Y图像
axis([0,9,0,1.5])%标注X、Y的范围
text(2,1,'(2,1)');%标出最高点
title('分段函数');%标注函数名称
xlabel('x');%标X轴
ylabel('y');%标Y轴
legend('y')
程序截图:
3、求下面两个信号的卷积。
源代码:
>>symsx
>>u=exp(-2*x)
u=
exp(-2*x)
>>v=sin(x)
v=
sin(x)
>>r1=int(u*v,0,+inf)
r1=
1/5
程序截图:
4、从键盘输入一串字符,找出该字符串中所有的数字,并保存成数值数组Digital。
源代码:
>>f='abc123def';
>>index=find(f>='0'&f<='9')
index=
456
>>A=f(index);
>>fory=1:
length(A)
fory=1:
length(A)Digital=str2num(A);
end
Digital
end
Digital=
123
Digital=
123
Digital=
123
程序截图:
5、将一个屏幕分成4幅,在左上福和右下幅分别绘制下列函数的图形:
(1)
,绘制x在[-pi/2,pi/2]的红色曲线图;
(2)
,
,绘制该函数,蓝色。
源代码:
symsxy%定义X、Y
f1=(abs(sin(x)))^0.5;%F1与X之间的函数关系
f4=(x^2/3^2+y^2/4^2);%F4与X、Y之间的函数关系
subplot(2,2,1)%将图像分为2*2的区域并在第一个区域画图
h1=ezplot(f1,[-pi/2,pi/2])%画图并标注X的范围
set(h1,'Color','red')%将图像默认的颜色改为红色
title('f1=(abs(sin(x)))^0.5')%标注函数名称
subplot(2,2,2)
subplot(2,2,3)
subplot(2,2,4)%在第四个区域画图
h4=ezplot(f4-1,[-3,3,-4,4])%画图并标注X、Y的范围
set(h4,'Color','blue')%将图像的默认颜色转化为题目规定的颜色
title('f4=(x^2/3^2+y^2/4^2)')%标注函数名称
程序截图:
6.以构架数组表示3个人的基本信息,构架数组的每一个构架表示一个人的信息。
三个人的基本信息如下:
姓名(Name)
Xujia
wanglibo
huangweiguo
年龄(Age)
20
21
20
成绩(Score)
85
100
52
成绩按如下划分区域:
满分(100),优秀(90-99),良好(80-89),及格(60-79),%不及格(<60),请标出每个学生的成绩等级。
源代码:
fori=1:
10
a(i)=89+i;
b(i)=79+i;
c(i)=69+i;
d(i)=59+i;
end
c=[d,c];%及格范围60~79
Name={'xujia20','wanglibo21','huangweiguo22'};
%元胞数组
Mark={100,85,52,};
Rank=cell(1,3);
%创建一个1*3的构架数组S,它有三个域。
S=struct('Name',Name,'Marks',Mark,'Rank',Rank);
fori=1:
3
switchS(i).Marks
case100%得分为100时
S(i).Rank='满分';%列为'满分'等级
casenum2cell(a)%得分在90和99之间
S(i).Rank='优秀';%列为'优秀'等级
casenum2cell(b)%得分在80和89之间
S(i).Rank='良好';%列为'良好'等级
casenum2cell(c)%得分在60和79之间
S(i).Rank='及格';%列为'及格'等级
otherwise%得分低于60
S(i).Rank='不及格';%列为'不及格'等级
end
end
%将学生姓名,得分,登记等信息打印出来
disp(['学生姓名','年龄','得分','等级']);disp('')
fori=1:
3;
disp([S(i).Name,blanks(6),num2str(S(i).Marks),S(i).Rank]);
end
结果:
学生姓名年龄得分等级
xujia20100满分
wanglibo2185良好
huangweiguo2252不及格
程序截图:
7.创建脚本实现随机数序列的各元素由大到小排列,其中随机数服从U(-5,9)的均匀分布,并且序列长度为10。
.
源代码:
a=14*rand(1,10)-5;
fori=1:
10
forj=1:
10-i
ifa(j)t=a(j);
a(j)=a(j+1);
a(j+1)=t;
end
end
end;
a
程序截图:
8.已知ln(1+x)的泰勒展开式为:
,要求从键盘输入x的取值,由展开式计算ln(1+x)的值,迭代结束的条件为:
要加入的下一项系数小于默认的精度eps。
要求程序显示系数k以及展开式的结果。
(x<1)
源代码:
functions=m6
x=input('请输入一个介于0到1的数');
a=1;
b=1;
s=0;
fori=1:
10000000
ifabs(b./i)disp(i);
break;
end
b=b.*x;
s=s+a.*b/i;
a=-a;
end
程序截图:
9、产生40个服从正态分布N(-1,4)的随机数,计算它们的最大值,最小值,平均值,中间值,元素和,标准差和方差,并按照绝对值大小进行排序,同时标出原来的序列号。
源代码:
>>a=2*rand(1,40)-1;
>>disp(['最大值为:
',num2str(max(a))]);
disp(['最小值为:
',num2str(min(a))]);
disp(['平均值为:
',num2str(mean(a))]);
disp(['中间值为:
',num2str(median(a))]);
disp(['所有数字和为:
',num2str(sum(a))]);
disp(['标准差为:
',num2str(std(a))]);
disp(['方差为:
',num2str(var(a))]);
[a_numbera_sort]=sort(abs(a));
disp(['绝对值大小的顺序:
',num2str(a(a_sort))]);
disp(['原来的序列号为:
',num2str(a_sort)]);
结果:
中间值为:
0.11464
所有数字和为:
3.6234
标准差为:
0.45747
方差为:
0.20928
绝对值大小的顺序:
0.0056258-0.00689510.0681580.0833480.093142
-0.110240.13614-0.142220.18713-0.24104
0.24262-0.24325-0.259170.28982-0.31606
-0.317610.320460.362550.36445-0.38142
0.38913-0.39077-0.394470.39580.40548
0.41894-0.420550.45423-0.61314-0.62069
0.635950.643260.663590.676240.67699
-0.698250.707310.720020.79954-0.96072
原来的序列号为:
62130143738348204
4017352427292631232
399131636728311110
25235133151918222
程序截图:
10、在一个坐标轴中绘制图形y1=sin(x)和图形y2=e(x-1)^2,要求
(1)对坐标轴进行标注,x轴名称为“x”,y轴名称为“y1和y2”;
(2)用legend函数在图形窗口的左上角区分两个图形,图形1的曲线为红色,点划线,图形二的曲线为蓝色,实线。
源代码:
>>x1=0:
0.01:
2*pi;
y1=sin(x1);
plot(x1,y1,'r-.')
holdon
x2=0.1:
0.01:
2;
y2=exp((x2-1).^2);
plot(x2,y2,'b-')
xlabel('x');
ylabel('y1y2');
legend('y1','y2',2)
程序截图:
11.现有table.txt文件存放某班级n个学生的成绩(没有相同的成绩且n为奇数),打开该文件,找出其中间值,并将其放在所有成绩构成的数组的中间位置,其它成绩的相对位置不变。
源代码:
clear;
clc;
b=input('请输入成绩的个数:
');
fori=1:
b
a(i)=input('请输入成绩:
');
end
fid=fopen('table.txt','w');
count=fwrite(fid,a,'int32');
closestatus=fclose(fid);
clear;
clc;
fid=fopen('table.txt','r');
a=fread(fid,'int32');
d=a';
disp(['原来的数字顺序是:
',num2str(d)]);
b=numel(a);
disp(['thenumber=',num2str(b)]);
a_mediian=median(a)
c=find(a_mediian==a);
e=(b+1)/2;
ifcforj=c+1:
e
t=d(b);
i=b;
whilei>1
d(i)=d(i-1);
i=i-1;
end
d
(1)=t;
end
elseifc>e
forj=e+1:
c
t=d
(1);
fori=1:
b-1
d(i)=d(i+1);
end
d(b)=t;
end
else
end
disp(['插入后的数字顺序:
',num2str(d)]);
程序截图:
12、现有table.txt文件存放某班级15个学生的成绩,打开该文件,将其中90分以上的成绩放在矩阵A中,80~89放在B中,70~79放在C中,60~69放在D中,60分以下放在E中,统计各矩阵中的学生人数,并显示,统计所有学生的最高分和最低分,并显示,计算及格率和不及格率,并显示。
源代码:
clear;
clc;
fid=fopen('table.txt','r');%打开第11题的table.txt的数据
a=fread(fid,'int32');
closestatus=fclose(fid);%关闭文件
b=a';
disp(['第11题数据为:
',num2str(b)]);
c=numel(b)
m=0;n=0;k=0;j=0;l=0;
fori=1:
c
ifb(i)>=90
m=m+1;
A(m)=b(i);
elseifb(i)>=80&b(i)<=89
n=n+1;
B(n)=b(i);
elseifb(i)>=70&b(i)<=79
k=k+1;
C(k)=b(i);
elseifb(i)>=60&b(i)<=69
j=j+1;
D(j)=b(i);
else
l=l+1;
E(l)=b(i);
end
end
disp(['90分以上的有:
',num2str(numel(A))]);
disp(['80分以上的有:
',num2str(numel(B))]);
disp(['70分以上的有:
',num2str(numel(C))]);
disp(['60分以上的有:
',num2str(numel(D))]);
disp(['不及格的有:
',num2str(numel(E))]);
disp(['最高分有:
',num2str(numel(b))]);
disp(['最低分有:
',num2str(numel(b))]);
e=numel(E);
f=e/c;
disp(['不及格率:
',num2str(f)]);
程序截图:
对《Matlab实用教程》课程的学习及本次实验的感想:
在学习Matlab时,不免要和之前学过的C语言进行比较。
相较而言,Matlab的优点还是有很多的,最大的优点是,它的程序语言更贴近于生活语言,所以在编写代码时,比C语言要简洁的多。
在学习本课程的过程中,我也遇到了刘芳老师之前谁说过的情况:
把matlab和C语言在一定程度上有一些混淆。
根本原因在于之前的C语言学的不是太深,也不是很差。
因此,深入理解matlab是很重要的。
本次实验中,题目难度不一,最后两题用到了文件的存储与读取,之前的C语言课程设计也用到了文件的相关知识,总的来说,对我还是有一定难度的。
同时,实验题中,有很多细节的东西,很多标示符需要精确记忆,这也是matlab的特色,通过实验,巩固了所学知识,也拓展了很多未深入讲解的知识。