MATLAB与仿真系统课程设计
班 级: 自动化20##-2班
姓 名: 张 涛
学 号: 1105130206
指导教师: 崔 新 忠
地 点: 电信实验中心第9实验室
目 录
一、 课程设计的目的与要求………………………………………………(1)
二、 课程设计课题的分析…………………………………………………(1)
三、 课程设计的内容与安排………………………………………………(1)
四、 课程设计的步骤………………………………………………………(1)
五、 课程设计的结果………………………………………………………(6)
六、 课程设计的心得与体会………………………………………………(9)
七、 参考文献………………………………………………………………(9)
附录
图像与动画
一、 课程设计的目的与要求
1、课程设计的目的
(1)进一步理解和消化书本知识,运用所学知识和技能进行简单的设计。
(2)通过课程设计提高应用能力,为专业课程的学习打下基础。
(3)培养查阅资料的习惯,训练和提高独立思考和解决问题的能力。
(4)通过命令显示图像,完成简单动画的制作,结合程序设计培养知识综合运用能力和技巧。
2、课程设计要求
从课程设计的目的出发,通过设计工作的各个环节,达到以下要求:
(1)能够正确理解课程设计的题目和意义,全面思考问题。
(2)运用科学合理的方法,认真按时完成。
二、 课程设计课题的分析
动画制作的基本原理是把一些图形或图像快速逐帧播放,在人眼与人脑中产生连续的刺激,形成了动画。从计算机图形学上看,动画就是绘制的图形发生变化。这个变化不能太快,也不能太慢,要被人的视觉接受。在程序执行时,能够使图形变化达到视觉要求。
三维动画主要是靠三维模型的变换实现的,这些变换包括平移、旋转、错切、比例变换,其它线性变换、非线性变换等。这些内容在此不做介绍。
有时动画制作可以只凭借逐帧图像来完成,这些是基于图像的动画制作。 一般从制作动画所用素材、制作方法、制作工具等多个角度对动画进行分类,也可以从观赏者是否干预、场景是否运动等对动画进行分类。具体分类如下: 从动画制作所用素材可以分为图形动画与图像动画等;从动画的制作方法可以分为逐帧动画、形变动画与路径动画;从制作工具上可以分为语言制作动画与软件制作动画;从观赏者是否参与可以分为普通动画与虚拟现实动画;从动画的表现上可以分为真实感动画与非真实感动; 另外,从图形空间维数可以分为二维动画与三维动画。
三、 课程设计的内容与安排
通过编程显示磁盘目录下图像文件(即把已有的图形文件调入通过MATLAB命令窗口调用显示);编程实现不断变化的图形,该图为自己编程绘制而成。具体如下:
(1)首先设计一个图形用户界面(GUI),在界面上可以应用菜单栏修改界面的背景颜色、可以触动动画运行。
(2)编写一个程序首先生成一个立方体,通过逐次改变它的坐标来显示动画的形式。然后在编写程序实现它的转动和移动。
(3)下面是对课程设计的具体的时间安排:周一 查阅资料、翻阅参考文献,对图像与动画相关的内容和函数了解;周二、周三具体的进行课程设计;周四 对编写的程序进行仿真与模拟,并对程序进行改进使得动画的效果更好;周五 写实验报告。
四、 课程设计的步骤
1、设计图形用户界面(GUI)
在MATLAB的命令窗口键入guide,然后回车,或者在主窗口中,打开File菜单中的New子菜单,再选择其中的GUI命令,就可以显示图形用户界面的设计模板了。
图形如下:
GUI设计模板
选择新创建一个GUI,就会出现GUI的设计窗口:
为了添加控件,可以从GUI设计窗口的控件工具栏中选择一个对象,然后以拖拽的方式在对象设计区建立该对象,其对象创建方式方便、快捷、简单。在GUI设计窗口创建对象后,通过双击该对象,就会显示该对象的属性查看器,通过它可以设置该对象的属性值。
利用菜单编译器,可以创建、设置、修改下拉式菜单和快捷菜单。从GUI设计窗口的工具栏上选择Mene
Editor命令按钮,或者选择tools菜单下的Mene Editor命令,就可以打开菜单编译器了。菜单编译器的左上角第一个按钮时创建一级菜单项,第二个是二级菜单。
图形如下:
菜单编译器
设计的最终界面如图所示:
2、设计三维动画
(1)产生一个立方体,让其绕z轴转动从而形成一个圆柱体。具体程序如下:
for i=-2*pi:0.5:2*pi;
R=[cos(i) sin(i) 0;-sin(i) cos(i) 0;0 0 1]; vert=[1 1 1;1 2 1;2 2 1;2 1 1;1 1 2;1 2 2;2 2 2;2 1 2];
vert=vert*R;
fac=[1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8];
pause(0.1)
patch('faces',fac,'vertices',vert,'FaceVertexCData',hsv(8),'FaceColor','interp');
view(3);
end
(2) 编写程序让其逆时针旋转
axis off
for i=1:36
camorbit(10,0,'data',[0 1 0])
pause(0.2)
end
(3) 编写程序让其垂直于桌面里外运动
axis vis3d off
for x=-200:2:200
campos([x,0,0])
drawnow
end
(4) 图片的调用
ha=axes('units','normalized','position',[0 0 1 1]);
uistack(ha,'down')
x=imread('f:\q.jpg');
image(x)
colormap gray
set(ha,'handlevisibility','off','visible','off')
五、 课程设计的结果
1、动画设计的总程序
function Uqingse_Callback(hObject, eventdata, handles)
% hObject handle to Uqingse (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(gcf,'color','c')
function lanse_Callback(hObject, eventdata, handles)
% hObject handle to lanse (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(gcf,'color','b')
function huangse_Callback(hObject, eventdata, handles)
% hObject handle to huangse (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(gcf,'color','y')
function meijingxinshang_Callback(hObject,eventdata,handles)
% hObject handle to meijingxinshang (see GCBO)
% eventdata reserved to be defined in a future version ofMATLAB
% handles structure with handles and user data(see GUIDATA)
ha=axes('units','normalized','position',[0 0 1 1]);
uistack(ha,'down')
x=imread('f:\111.jpg');
image(x)
colormap gray
set(ha,'handlevisibility','off','visible','off')
function donghua_Callback(hObject, eventdata, handles)
% hObject handle to donghua (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) for i=-2*pi:0.5:2*pi
R=[cos(i) sin(i) 0;-sin(i) cos(i) 0;0 0 1];
vert=[1 1 1;1 2 1;2 2 1;2 1 1;1 1 2;1 2 2;2 2 2;2 1 2];
vert=vert*R;
fac=[1 2 3 4;2 6 7 3;4 3 7 8;1 5 8 4;1 2 6 5;5 6 7 8];
pause(0.1)
patch('faces',fac,'vertices',vert,'FaceVertexCData',hsv(8),'FaceColor','interp');
view(3);
end
axis off
for i=1:36
camorbit(10,0,'data',[0 1 0])
pause(0.2)
end
axis vis3d off
for x=-200:2:200
campos([x,0,0])
drawnow
end
2、运行的瞬间效果
六、 课程设计的心得与体会
MATLAB课程设计让我体会颇多。首先就matlab的特点我想说,matlab真是用处多多,不仅可以绘制二维视图、三维视图,而且可以制作动画等。就我们学习的这点知识无非九牛一毛、冰山一角,远没有真正触碰到它的核心。如果要是真是学的精通,我想matlab应该是无所不能的。
虽然实验成功了,但是通过实验让我们意识到了自己对于matlab方面和编程方面的知识还有很多的不足,同时此次实验也留给我们的是很多的疑问,怎样能让在运动的动画停止,然后又接着运动,当然,关闭再运行不是我们想要的,我们想要的是随时控制动画的运动,然后可否形成别的动画等等
在没有课程设计以前,总觉的课程matlab没有多大的用处,也没什么好学的。可是当真正的深入进去了之后才知道,知识是浩瀚无边的,自己是渺小的。这也深深的给我敲了个警钟,让我知道所有的事情都要自己亲身经历之后才会知道它的真正面目。别人给你传达的东西永远没有自己身临其境感受到的深刻,而且某些东西也是没法传达的,只能自己去亲身经历。我从来没有见过参照别人的人生而大彻大悟的人,只有那些亲自经历一些事情的人才会顿悟。
通过本实验,我们学习到需要一定的毅力和能力去完成一件事;通过查阅纵多资料,了解并学习到matlab软件的一些基本知识,在老师的带领以及大家的努力下,完成了此次动画的制作,学习的过程是很重要的,结果也一样。每件事只有通过自己动手后才能让记忆更深刻,像本次实验一样,亲手做了之后才能发现自己的成果,以己度人,才会去珍惜和爱护别人的结晶
七、 参考文献
【1】 刘卫国、陈昭平、张颖主编的《MATLAB程序设计与应用》。北京:高等教育出版社,20##年。
【2】 薛定宇主编的《控制系统计算机辅助设计——MATLAB语言及应用》。北京:清华大学出版社,1996年。
【3】 崔新忠主编的《MATLAB与仿真系统实验指导书》。自编教材,20##年。
【4】 张志涌主编的《精通MATLAB6.5》。北京:北京航空航天大学出版社,20##年。
【5】 苏金明、王永利主编的《MATLAB7.0基础与提高》。北京:电子工业出版社,20##年。
附录
第二篇:MATLAB课程设计报告
目录
一、课程设计目的. 1
二、课程设计任务. 1
三、课程设计题目. 1
3.1、画出分段函数图: 1
3.2、信号的产生与变换. 2
3.3、财经问题. 3
3.4、计算平均学分积GPA 4
3.5、供煤量分配问题. 6
四、课程设计结论及分析. 7
五、心得体会. 7
六、参考文献. 7
一、课程设计目的
1. 熟悉MATLAB的工作环境;
2. 熟悉并练习MATLAB的命令;
3. 掌握MATLAB的基本操作;
4. 熟练掌握MATLAB的基本应用。
二、课程设计任务
1.熟练掌握MATLAB的基本用法以及实际应用;
2.将课程设计题目解答完毕,完成一下内容:
(1)、画出分段函数图;
(2)、信号的产生与变换;
(3)、财经问题;
(4)、计算平均学分积GPA;
(5)、供煤量分配问题。
三、课程设计题目
3.1、画出分段函数图:
(1)程序:
x=-3:0.1:3;
y=-3:0.1:3;
length_of_x=length(x);
length_of_y=length(y);
for i=1:length_of_x
for j=1:length_of_y
if (x(i)+y(j))>1
z(i,j)=0.5457*exp(-0.75*y(j)^2-3.75*x(i)^2-1.5*x(i));
elseif ((x(i)+y(j))>-1)&&((x(i)+y(j))<=1)
z(i,j)=0.7575*exp(-y(j)^2-6*x(i)^2);
else
z(i,j)=0.5457*exp(-0.75*y(j)^2-3.75*x(i)^2+1.5*x(i));
end
end
end
mesh(x,y,z)
(2)运行结果:
3.2、信号的产生与变换
数字信号处理中y(n)=x(-n)的画图实现;其中
(1)程序:
n=-4:4;
for i=1:9
if abs(n(i))>3
x(i)=0;
else x(i)=2*n(i)+1;
end
end
y=fliplr(x);
stem(n,y);
(2)运行结果:
3.3、财经问题
一笔100000元的贷款要按每月等额偿付d元的方式付清。利息是在未付余额的基础上以每年10%的利率按月计入(如第一个月之后总债等于100000+(0.1/10)*100000)。
求每月的偿付额d,使得这笔贷款10年还清,并求在10年期间付款的总数目。
(1)分析:
第1月后本息和: S1=(1+0.1/10)*(100000-d)=1.01*(100000-d)
第2月后本息和: S2=((1.01*(100000-d))-d)*1.01
第3月后本息和: S3=(S2-d)*1.01
第4月后本息和: S4=(S3-d)*1.01
……
第119月后本息和: S119=(S118-d)*1.01
由于需10年还清,故第120月只需还d元就全还清了,即S119=d
由于采用每月等额偿付d元的方式,故10年付款总数目为120d
(2)程序:
syms d
y=(100000-d)*1.01;
for i=1:119
y=(y-d)*1.01;
end
f=1.01*y/2.01;
digits(8)
x=vpa(solve(f));
digits(12)
s=vpa(120*x);
disp('每月偿付额d:');disp(x);
disp('10年期间付款总数目:');disp(s);
(3)运行结果:
每月偿付额d:
1420.5044
10年期间付款总数目:
170460.5280
3.4、计算平均学分积GPA
大学某班,第一学期若干学生各科成绩存在一个EXCEL文件中,文件名为score.xls要求:matlab编程读取这个EXCEL文件并求出各个学生的平均学分积,最后将平均学积分按名字写入每个同学后面。
成绩文件的位置如下: \score.xls-Sheet1
各科的学分分配如下:高数:5英语:4物理:3.5德育:2电路:4数字电路:3.5体育:2
平均学分积计算公式:(∑成绩×学分)/∑学分
(1)程序:
[num,txt,data]=xlsread('D:\score.xls')
for i=1:30
d(i,1)=(num(i,3)*5+num(i,4)*4+num(i,5)*3.5+num(i,6)*4+num(i,7)*3.5+num(i,8)*2+num(i,9)*2)/(5+4+3.5+4+3.5+2+2)
end
b={'平均学分积'};
xlswrite('D:\score.xls', round(d*1000)/1000,'sheet1','J2:J31')
xlswrite('D:\score.xls',b,'sheet1','J1')
winopen('D:\score.xls');
(2)运行结果:
原表格:
运行后表格:
3.5、供煤量分配问题
某两个煤厂A1和A2,每月进煤量分别为60吨和l00吨,联合供应3个居民区B1,B2和B3,每个居民区每月对煤的需求量依次分别为50吨,70吨,40吨。煤厂A1离3个居民区B1,B2和B3的距离分别为10km,5km和6km,煤厂A2离3个居民区B1,B2和B3的距离分别为4km, 8km和12km,问如何分配供煤量使得运输量(即吨×km)达到最小?
(1)分析:
fmin=10x1+5x2+6x3+4x4+8x5+12x6
x1+x2+x3≤60
x4+x5+x6≤100
x1+x4≤50
x2+x5≤70
x3+x6≤40
x1,x2,x3,x4,x5,x6≥0
(2)程序:
f=[10;5;6;4;8;12];
aeq=[1 1 1 0 0 0;0 0 0 1 1 1;1 0 0 1 0 0;0 1 0 0 1 0;0 0 1 0 0 1];
beq=[60;100;50;70;40];
lb=[0 0 0 0 0 0];
[x,fval]=linprog(f,[],[],aeq,beq,lb,[]);
disp('A1运往B1小区的煤量:'),disp(round(x(1)));
disp('A1运往B2小区的煤量:'),disp(x(2));
disp('A1运往B3小区的煤量:'),disp(x(3));
disp('A2运往B1小区的煤量:'),disp(x(4));
disp('A2运往B2小区的煤量:'),disp(x(5));
disp('A2运往B3小区的煤量:'),disp(round(x(6)));
disp('运输量最小为:'),disp(fval);
(3)运行结果:
A1运往B1小区的煤量:
0
A1运往B2小区的煤量:
20.0000
A1运往B3小区的煤量:
40.0000
A2运往B1小区的煤量:
50.0000
A2运往B2小区的煤量:
50.0000
A2运往B3小区的煤量:
0
运输量最小为:
940.0000
四、课程设计结论及分析
详见各题目后的解析
五、心得体会
经过两星期的课程设计,使我理解了理论与实际相结合是多么的重要,只学习书本上的理论知识是远远不够的,只有把所学的理论知识和实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考能力。在设计过程中也遇到了很多问题,同时也发现了自己的很多不足,对以前自己所学过的知识理解得还不够深刻,掌握得还不够牢固。然而随着对matlab的学习的不断深入,我对其了解也更加深入,在这个过程中更是我对所学的知识的一种升华,所以整个实习过程并没有想象中那么令人烦恼,反而更加能激起心中那股不服输的精神。
虽然MATLAB软件我是刚刚接触,刚开始使用还不是太熟练,但是通过老师上课的讲解、教导和自己翻阅大量的关于MATLAB的资料,终于对其有所了解。在学习过程中我进一步对MATLAB编程中常用的语句、过程已经初步掌握。由于平时练习过多次matlab程序,所以此次课程设计并没有那么生疏。尽管过程中遇到了些许问题,通过自己的查阅资料以及同学的讨论,使自己茅塞顿开,从而解决了问题。有时尽管这些问题很小,但是也会导致结果出不来的问题,因此不论什么样的问题,都不能忽略,都要小心翼翼,直至解决它。在这次实习中我知道了合作的重要性,在和同学的讨论中,可以知晓同一道题的不同解答方法,进而扩充了自己的知识面。
总的来说,我了解了一个非常强大的软件——Matlab,一个能够改变你一生的软件。以后还要不断的学习,不断丰富自己的知识。
这次课程设计最大的收获就是不管做什么都不能放弃,要坚持到底,就像编程一样,无论错了多少次都要做好它,最终改正就行了,尽管课程设计结束了,但是这一次也给我留下了深刻印象,过程充满了乐趣,收获也很大!
六、参考文献
[1] 薛山.matlab基础教程[M].北京:清华大学出版社,2007:213-297.
[2] 王正林.matlab7.0[M].北京:电子工业出版社,2007.
[3] 张志勇等.matlab与仿真(2010a)[M].北京:北京航空航天大学出版社,2010.
[4] 薛定宇,陈阳泉.基于MATLAB/Simulink的系统仿真技术与应用[M].北京:清华大学出版社,2002.
[5] 王正林,MATLAB7.0[M].北京:电子工业出版社.