MATLAB实验报告次次.docx
- 文档编号:5326008
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:39
- 大小:306.59KB
MATLAB实验报告次次.docx
《MATLAB实验报告次次.docx》由会员分享,可在线阅读,更多相关《MATLAB实验报告次次.docx(39页珍藏版)》请在冰点文库上搜索。
MATLAB实验报告次次
MATLAB数学实验报告
姓名:
李犁
学号:
1304120724
指导老师:
易昆南
专业班级:
统计1203
1学生管理程序…………………………3
2自测题…………………………………8
3动画函数的生成……...............………..10
4MATLAB在高等数学中的应用….......….12
5利用MATLAB求π的值……..............….14
6零件的参数设计储………....………….16
7油罐的变位识别与罐容表标定…….....21
一.学生管理程序
学号
1304120724
班级
统计1203
姓名
李犁
指导教师
易昆南
实验题目
学生成绩管理程序
评分
1.序言:
这个学期,我们学习了一种全新的计算机软件--MATLAB,MATLAB是一种与数学密切相关的算法语言,是目前在工程界流行最为广泛的计算机语言,也是当今最优秀的科技应用软件之一。
它可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
在上过几次MATLAB实验后,我们已经初步掌握MATLAB的知识,而在这次作业部署中,我们要独立完成的是制作一个学生成绩管理系统,以方便老师查询学生成绩,这是更是对我们上课听课效果的考验。
2.实验内容:
利用MATLAB编写一个学生管理程序,包括学号、姓名、性别、年龄、成绩,及成绩的分类,及格率,各分数段所占比例,并绘制相关的图像。
3.设计(实习)目的:
1.了解MATLAB在实际问题中的应用
2.通过实践加深对这门语言中M文件的了解
3.熟悉简单程序结构,如循环结构(for循环、while循环)选择结构(if-else-if)、分支语句(switch-case-otherwise)。
4.实验构思:
运用MATLAB语言,进行程序设计,运用MATLAB在带函数实现对成绩的分类,计算等。
在这个成绩管理系统,我们要将学生的各个成绩进行分类。
将不同成绩段的分为“满分”、“优秀”、“较好”、“及格”、“不及格”、“缺考”,主要是运用循环语句,十七每个分数都被标记。
然后在从成绩中选出最高分,最低分,平均分,还有方差。
求各分数段人数,及格率。
在这个环节中主要运用函数的调用,因为MATLAB含有丰富的函数资源,这为我们编程者提供了很多便利。
而在最后我又调用bar函数,绘制直方图,更直观的观察学生的成绩情况。
调用legend函数,绘制饼形图。
5:
具体操作:
clear;
fori=1:
10;
a{i}=89+i;%把90分及以上的学生成绩赋值给a
b{i}=79+i;%把80分及以上的学生成绩赋值给b
c{i}=69+i;%把70分及以上的学生成绩赋值给c
d{i}=59+i;%把60分及以上的学生成绩赋值给d
end;
c=[d,c];
StudentNo={1,2,3,4,5,6,7,8,9,10,11,12};%学生学号
Name={'张三','赵四','王五','马六','聪聪','宝宝','刘谦','二蛋','二胖','鸣笛','泡泡','吉吉'};%学生姓名
Sex={'男','女','男','男','男','男','男','女','女','女','男','男'};%学生性别
Age={'17','16','17','18','16','15','18','17','19','15','17','16'};%学生年龄
Mark={91,73,66,0,80,100,76,82,92,77,86,59};%学生成绩
PostScript=cell(1,12);
S=struct('StudentNo',StudentNo,'Name',Name,'Sex',Sex,'Age',Age,'Marks',Mark,'PostScript',PostScript);%
fori=1:
6
num(i)=0;
end
fori=1:
12%循环12次
switchS(i).Marks%分支条件
case100
S(i).PostScript='满分';num
(1)=num
(1)+1;%当100时备注显示满分
case0
S(i).PostScript='缺考';num(6)=num(6)+1;%当0时备注显示缺考
casea
S(i).PostScript='优秀';num
(2)=num
(2)+1;%当满;足a情况时备注显示优秀
caseb
S(i).PostScript='比较好';num(3)=num(3)+1;%当满足b情况时备注显示比较好
casec
S(i).PostScript='已及格';num(4)=num(4)+1;%当满足c情况时备注显示已及格
otherwise
S(i).PostScript='不及格';num(5)=num(5)+1;%其他情况显示不及格
end
end
%获取成绩中最大值,最小值,平均值,标准差
s=[91,73,66,0,80,100,76,82,92,77,86,59];
N=0;
fori=1:
4
N=N+num(i);
end
mi=min(s);
ma=max(s);
mea=mean(s);
fc=std(s);
jg=N/12;
disp(['学号','学生姓名','性别','年龄','成绩','备注']);
disp('')%声明显示
fori=1:
12;disp([num2str(S(i).StudentNo),blanks(6),S(i).Name,blanks(6),S(i).Sex,blanks(6),num2str(S(i).Age),blanks(6),num2str(S(i).Marks),blanks(6),S(i).PostScript]);%按循环依次显示姓名成绩备注
end;
disp('各个分数段人数统计:
')
disp(['满分:
',num2str(num
(1))])
disp(['缺考:
',num2str(num(6))])
disp(['优秀:
',num2str(num
(2))])
disp(['比较好:
',num2str(num(3))])
disp(['已及格:
',num2str(num(4))])
disp(['不及格:
',num2str(num(5))])
disp(['及格率:
',num2str(jg)])
disp(['最小值:
',num2str(mi)])
disp(['最大值:
',num2str(ma)])
disp(['平均值:
',num2str(mea)])
disp(['标准差:
',num2str(fc)])
h=figure
(1);
q=[num
(1),num(6),num
(2),num(3),num(4),num(5)];
pie(q,[00.10.20.30.40.5]),
legend({'满分','缺考','优秀','比较好','已及格','不及格'});
h=figure
(2);
x=[1,2,3,4,5,6,7,8,9,10,11,12];
bar(x,s)
set(gca,'XTick',1:
1:
12)
set(gca,'XTickLabel',{'1','2','3','4','5','6','7','8','9','10','11','12'})
title('SineFunction');
xlabel('Radians');
ylabel('FunctionValue');
colormap(color);
6.实验结果:
学号学生姓名性别年龄成绩备注
1张三男1791优秀
2赵四女1673已及格
3王五男1766已及格
4马六男180缺考
5聪聪男1680比较好
6宝宝男15100满分
7刘谦男1876已及格
8二蛋女1782比较好
9二胖女1992优秀
10鸣笛女1577已及格
11泡泡男1786比较好
12吉吉男1659不及格
各个分数段人数统计:
满分:
1
缺考:
1
优秀:
2
比较好:
3
已及格:
4
不及格:
1
及格率:
0.83333
最小值:
0
最大值:
100
平均值:
73.5
标准差:
25.777
7:
实验总结
在学习MATLAB过程中我们要多动脑,多动手写程序、调试,看程序时候多想几个为什么,理解别人程序中精华的东西,多自己调调程序,可以改改程序,把知识转成自己的,弄懂一两个经典例子比粗粗的看一大书要好,值得一提是不是一下子就能看懂相对比较长,比较复杂的程序的,要做的是自己慢慢去分析,利用已经有的资料和帮助,等慢慢搞懂它,要多看几遍,相信多看一遍你就会有一些新的认识,一直到你已经掌握里例子的精华。
MATLAB是一款功能强大的软件,在这次实践中,我也是收获颇丰,刚开始面对这个问题,不知道该如何设计,但是努力着回忆老师每节课讲的内容,再加上对课本的查阅,渐渐有了思路,设计出了大概的框架。
但是在具体编程过程中的确遇到了好多麻烦,自身原因还是因为对MATLAB的不熟悉,经过一番努力,终于设计出了一项相对简单的学生成绩管理系统。
今后还有继续听老师认真讲课,在下次课题实践中设计更好的程序。
最后多读matlab高手写的程序,帖子,找到一个高手,在几个大的论坛可以搜索出一大堆的帖子,然后慢慢去看吧,从中可以学到很多东西,也许你会发现很多你都看不懂,这很正常,别人写程序考虑的是能实现这样的功能,运行效率等问题,而不是考虑是不是很容易能让别人理解,你就看你现在能看懂,再看些通过你断点调试,查help能看明白的,看不懂的就先放下,遇到好的和看不懂,你又很挺感兴趣的话题,你先收藏起来,过段时间你再回头看看,你会发现,每看一遍,你就会多懂一些东西,当你第三遍甚至第四遍看同一个程序的时候,也许你就会有豁然开朗的感觉。
一个比较长的程序,首先不要怕长,把它分解成一句一句,一句一句看懂它。
要明白一口吃不成胖子,好东西要慢慢体会,才能领会。
参考《MATLAB语言实用教程》马莉编著
姓名:
李犁
2013年10月20日
2.自测题
1.缺省的[CurrentDirectory]窗口是什么?
当前目录浏览器。
2.命令窗口中输入x时,MATLAB的搜索顺序是什么?
如果在MATLAB命令窗口中输入字符串xMATLAB编译器会按顺序尝试解释它
1把x作为一个参数或变量去搜索
2检查x是否为一个内置的函数
3在默认的目录即当前工作目录CurrentDirectory下搜索文件名为x.m的文件
4在搜索路径的所有目录中搜索文件名为x.m的文件。
如果多个函数具有相同的名称那么只有搜索到的第一个函数会执行其他函数会被认为不存在而不被执行。
3.如何扩展MATLAB的搜索路径?
把程序所在目录扩展成MATLAB的搜索路径的方法:
1.搜索路径对话框:
利用[file]->[setpath]菜单,进入设置搜索路径对话框
2.path:
如path(path,’e:
\myfiles’);把新目录扩展到搜索路径
3.Addpath:
扩展目录,如addpathe:
\myfiles–end把新目录加到末尾;
addpathe:
\myfiles–begin把新目录加到开头。
3.Genpath:
得到所有搜索路径连接而成的长字符串。
4.使用editpath或pathtool扩展目录。
4.输入矩阵A和B的操作是:
A=[110;-111;1-13]
B=[101;011;-101]
A=
110
-111
1-13
B=
101
011
-101
5.执行A*B的结果是:
A*B
ans=
112
-211
-2-13
6.执行A.*B的结果是:
A.*B
ans=
100
011
-103
7.执行A.^B的结果是:
A.^B
ans=
110
111
113
8.生成由A的主对角元素构成的对角阵的操作是:
C=diag(diag(A))
C=
100
010
003
9.赋值表达式A=[A;[1,3,5]]的结果是:
A=[A;[1,3,5]]
A=
110
-111
1-13
135
10.从A中得到第二行第三列元素的操作是:
D=A(2,:
)
E=A(3,:
)
D=
-111
E=
1-13
11.从A中得到A的第一列元素构成的列向量的操作是:
F=transpose(A(1,:
))
F=
1
1
0
12.A(:
[1,3])的结果是:
A(:
[1,3])
ans=
10
-11
13
15
13.把A还原成第1题中的A的操作是:
A([4],:
)=[];
a=A(:
1);
b=A(:
2);
A=[a,[1,1,-1]',b]
A=
110
-111
1-13
14.执行W1=zeros(2,3)的结果是:
W1=zeros(2,3)
W1=
000
000
15.执行W2=ones(3)的结果是:
W2=ones(3)
W2=
111
111
111
16.执行W1=eye(3,4)的结果是:
W1=eye(3,4)
W1=
1000
0100
0010
3.动画函数的生成
1.编写
语言的电影动画
M=moviein(16);
x=9*pi;
forj=1:
600
x(j+1)=x(j)-pi/50;
y1=(x-sin(x))./(x+sin(x));
y2=1+0.1;
y3=1-0.1;
plot(x,y1,'b*',x,y2,'r',x,y3,'r',x,0,'r');
axis([09*pi-0.22.5])
M(j)=getframe;
end
movie(M,3)
2.编写
语言的电影动画。
xlim([0,10]);
ylim([-1,1]);
x0=0;
a=0.05;
y1=-1:
0.001:
1;
y2=0+0.05;
y3=0-0.05;
forn=0:
0.01:
10;
holdon;
y=sin(n)/n;
plot(n,y,'b.');
ifabs(n-x0)<=a
plot(x0-a,y1,'r',x0+a,y1,'r')
end
ifabs(y)<=a
plot(n,y2,'r',n,y3,'r')
end
pause(0.1);
end
4.MATLAB在高等数学中的应用
1.符号导数
求函数
的一阶导数和二阶导数
输入:
symsx
diff(’x^n’,1)
diff(’x^n’,2)
执行后得
的一阶导数和二阶导数分别为:
ans=x^n*n/x
ans=x^n*n^2/x^2-x^n*n/x^2
2.符号微分
设
,求
。
symsxy
z=’(1+x*y)^y’;
diff(z,x)
diff(z,y)
则输出结果:
ans=(1+x*y)^y*y^2/(1+x*y)
ans=(1+x*y)^y*(log(1+x*y)+y*x/(1+x*y))
3.符号积分
求
输入:
symsx
int(’sin(x)/x’,x)
则输出为:
ans=sinint(x)
4.常微分方程
求微分方程y’+2xy=
的通解。
clear;
dsolve(’Dy+2*x*y=x*exp(-x^2)’,’x’)
便得到微分方程的通解:
(1/2*x^2+C1)*exp(-x^2)
5.无穷级数
求级数
的和
输入:
symsx
s2=symsum(x^(3*k),k,1,inf)
得到和函数
s2=-x^3/(x^3-1)
6.线性方程组
求解线性方程组:
输入
clear;
A=[1,1,-2,-1;3,-2,-1,2;0,5,7,3;2,-3,-5,-1];
D=det(A)
X=null(A)
输出为:
D=
0
X=
-0.4714
0.2357
-0.4714
0.7071
7.利用积分求面积
求由圆
和双纽线
,所围成的面积。
symsth
r1=3*cos(th);r2=1+cos(th);
s1=int(1/2*r2^2,th,0,pi/3);
s2=int(1/2*r1^2,th,pi/3,pi/2);
S=2*(s1+s2)
输出为:
5/4*p
5.利用MATLAB求π的值
方案1(分析方法)函数的幂级数展开(精确到
)
Arctanx的麦克劳林级数展开式为:
取x=1得:
=4arctan1=4(1-
+
-L)
取前n项作为近似值,产生的误差为
<
,要精确到
,则要计算前二十万位,收敛速度太慢。
在
<<1时远比x=1收敛速度快,利用正切的倍角公式可得:
这时可简单的利用
<
来估计判断误差。
具体代码如下:
symsx
x=0;
n=10^200;
fori=1:
n
x=x+4*(-1)^(i+1)/(2*i-1);
end
p=vpa(x);
方案2(迭代加速算法)
利用函数arctanx的泰勒展开式
取x=1,则得到
记
便可利用埃特金加速收敛方法来加快已知序列的收敛速度。
方案3(数值积分法)
具体代码如下:
symsx
p=vpa(4*int(1/(1+x^2),x,0,1));
方案4概率方法(蒙特卡洛随机模拟)
具体代码如下:
symsx
x=0;
n=500;
fori=1:
n
a=rand(1,2);
ifa
(1)^2+a
(2)^2<=1
x=x+1;
end
end
x=4*x/n;
方案5(公式法)
具体代码如下:
symsx
f1=(-1)^x/((2*x+1)*2^(2*x+1));
f2=(-1)^x/((2*x+1)*3^(2*x+1));
p=vpa(4*(symsum(f1,x,0,inf)+symsum(f2,x,0,inf)));
方案6(符号积分法)
具体代码如下
symsx
f=4/(1+x^2);
y=int(f,x,0,1);
numefic(y)
方案7(Taylor展开法)
具体代码如下:
symsx
f=(-1)^x/(2*x+1);
p=vpa(4*symsum(f,0,inf));
方案8(刘徽割圆法)
具体代码如下:
symsx
n=61;
fori=1:
n
x=sqrt(2-sqrt(4-x^2));
end
x=subs(x,'x','1');
p=3*2^n*vpa(x,n+5);
零件的参数设计
6.
1.问题重申:
粒子分离器某参数(记作y)由7个零件的参数
决定,其经验公式为:
y的目标值(记作yo)为1.50,当y偏离yo±0.1时,产品为次品,质量损失1000元。
当y偏离yo±0.3时,产品为废品,质量损失9000元。
零件容差分别为A(1%)、B(5%)、C(10%)三个等级,容差为均方差的三倍,成本如表3.1.1所示,求零件参数标定值及零件容差等级所使总费用最小。
表3.1.1
目标函数
(3.1.12)
其中:
达最小,即:
用蒙特卡罗法,模拟
,求目标函数最小。
2.MATLAB程序设计
用Matlab求出
关于
的偏导数:
Fun1.m
clearall
clc
symsx1x2x3x4x5x6x7
y=174.42*x1/x5*(x3/(x2-x1))...
^0.85*((1-2.62*(1-0.36*(x4/x2)...
^-0.56)^1.5*(x4/x2)^1.16)/(x6*x7))^0.5;
a1=diff(y,x1);
a2=diff(y,x2);
a3=diff(y,x3);
a4=diff(y,x4);
a5=diff(y,x5);
a6=diff(y,x6);
a7=diff(y,x7);
x01=0.1;x02=0.3;x03=0.1;x04=0.1;x05=1.5;x06=16;x07=0.75;
a11=subs(a1,{x1x2x3x4x5x6x7},{0.10.30.10.11.5160.75});
a22=subs(a2,{x1x2x3x4x5x6x7},{0.10.30.10.11.5160.75});
a33=subs(a3,{x1x2x3x4x5x6x7},{0.10.30.10.11.5160.75});
a44=subs(a4,{x1x2x3x4x5x6x7},{0.10.30.10.11.5160.75});
a55=subs(a5,{x1x2x3x4x5x6x7},{0.10.30.10.11.5160.75});
a66=subs(a6,{x1x2x3x4x5x6x7},{0.10.30.10.11.5160.75});
a77=subs(a7,{x1x2x3x4x5x6x7},{0.10.30.10.11.5160.75});
yy=subs(y,{x1x2x3x4x5x6x7},{0.10.30.10.11.5160.75});
Xr1=0.05;Xr2=0.1;Xr3=0.1;Xr4=0.1;Xr5=0.1;Xr6=0.1;Xr7=0.05;
C1=25;C2=20;C3=20;C4=50;C5=50;C6=10;C7=25;
(10^5/9)*((a11*Xr1*x01)^2+(a22*Xr2*x02)^2+(a33*Xr3*x03)^2+(a44*Xr4*x04)^2+...
(a55*Xr5*x05)^2+(a66*Xr6*x06)^2+(a77*Xr7*x07)^2)+10^5*(yy-1.5)^2+200
functionf=fun(x)
Yx
(1)=(8721*(-x(3)/(x
(1)-x
(2)))^(17/20)*(-((131*(x(4)/x
(2))^(29/25)*(1-9/(25*(x(4)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 实验 报告 次次