matlab第四讲教案(最新整理)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西南科技大学本科生课程备课教案
计算机技术在安全工程中的应用 ——Matlab入门及应用
授课教师:徐中慧
班级:
专业:安全技术及工程
第四章输入、输出
课型:新授课
教具:多媒体教学设备,matlab 教学软件
一、目标与要求
掌握matlab 中自定义输入、输出、图形输入的运用,以及在M 文件中使用元胞模式以及从文件中读
写数据。
二、教学重点与难点
本堂课教学的重点在于引导学生在编写matlab 程序时能够熟练运用相关的输入输出函数实现相应的
功能。
三、教学方法
本课程主要通过讲授法、演示法、练习法等相结合的方法来引导学生掌控本堂课的学习内容。
四、教学内容
一、课后习题的解说。
(1)为了准确预报天气情况,气象学家对大气环境进行研究,由于数据量很大,天气预报是非常复
杂的过程。
气象学家需要了解化学、物理学、热动力学、地理科学和关于大气运动的专业知识。
在天气预报过程中,常常会用到克劳修斯-克拉贝龙方程。
在化学课程或热动力学课程中对这个方程都有详细的介绍。
在气象学中,克劳修斯-克拉贝龙方程确定了饱和水蒸气压强和大气温度的关系。
若已知空气中水蒸气的压强,就可以计算空气的相对湿度,而天气预报中的一个非常重要的参数就是相对湿度。
克劳修斯-克拉贝龙方程为:
011ln *6.11273air
H P R T ν⎧⎫⎧⎫∆⎧⎫=-⎨⎬⎨⎬⎨⎬⎩⎭⎩⎭⎩⎭其中:=温度为T 时,饱和水蒸汽的压强,单位mbar
0P =水蒸汽的相对潜热,2.453×106J/kg
H ν∆=潮湿气体的气体常数,461J/kg
air R 是热力学温度,单位为K
T 地球表面温度一般在-600F 到1200F 之间。
利用克劳修斯-克拉贝龙方程求出在这个温度范围内饱和气体的压强。
结果用华氏温度与饱和气体压强的对应表格的形式显示出来。
Eg: 0
116.11273air H P e R T ν⎧⎫⎧⎫∆⎪⎪⎧⎫=⨯⨯-⎨⎨⎬⎨⎬⎬⎩⎭⎪⎪⎩⎭⎩⎭
Hv=2.453e6;
Rair=461;
F=-60:10:120;
T=(F+459.6)./1.8;
P0=6.11*exp(Hv/Rair*(1/273-1./T))
Result=[T',P0']
(2)设气球受到竖直向下方向的重力为100N ,竖直向上方向的浮力为200N ,与水平线成30度角方
向风的推力为50N ,求气球所受合力的大小和方向。
思路:先求竖直方向的合力,再求水平方向的合力。
竖直方向的合力 Fy =200-100+50*sind(30);
水平方向的合力 Fx =50*cosd(30);
a=atand(F1/F2)
F=Fy/tand(a)
二、引言
到目前为止,本课程介绍了两种matlab 的使用方法:一种是在命令窗口中直接输入命令行,另一种是在编辑窗口中编写简单的脚本M 文件。
此时编程人员本身就是用户。
但对于较为复杂的matlab 程序来说,编程人员和用户很可能不是同一个人。
为了避免求解相似问题时重复编写代码,要求程序给用户提供输入和输出命令。
Matlab 提供了许多内置函数可以实现对程序的输入/输出控制,接下来将一一进行介绍。
三、自定义输入
(1)input 的基本应用
假设已经编写好一个脚本程序,并存为脚本M 文件,编程人员和用户是同一个人。
若要改变程序中输
入变量的值,就必须修改部分程序代码。
在通用的matlab 程序中可以使用函数input ,在程序运行过程中提示用户从键盘输入数据。
z=input (‘Enter a value’)
使用同样的方法还可以输入一维或二维矩阵,但用户必须正确输入括号和分界符(逗号或分号)。
z=input(‘Enter a value for z in brackets’) brackets 方括号
(2)input 还可以输入字符型数组
x=input('Enter your name in single quotes') single quotes 单引号
‘holly’
如果输入信息是一个字符串(在matlab 中字符串就是字符型数组),则必须加上单引号。
还有一种方
法就是在input 的第二个输入参数中限定输入为字符串:
x=input(‘Enter your name’,’s’)
练习
物体在重力作用下做自由落体运动。
计算自由落体运动的距离的公式为 212
d gt 其中,是自由下落的距离;是重力加速度;是下落的时间。
d g t 由用户输入重力加速度g 的值和时间矢量。
问题描述:计算物体自由下落的距离,并画出曲线
Matlab 程序
g=input(‘what is the value of acceleration due to gravity?’);
start=input(‘what starting time would you like?’);
finish=input(‘what ending time would you like?’);
incr=input(‘what time increments would you like calculated?’);
time=start:incr:finish;
distance=1/2*g*time.^2;
plot(time,distance)
title(‘Distance traveled in free fall’)
xlabel(‘time,s’),ylabel(‘distance,m’)
final_distance=max(distance)
四、输出函数——disp
在Matlab中,显示矩阵内容的方法有很多种。
最简单的方法是直接输入后面不加分号的矩阵名,在命令窗口中显示矩阵名称,并在第二行显示矩阵的值。
disp可以直接显示矩阵的值:
x=1:5
x =
1 2 3 4 5
disp(x)
1 2 3 4 5
函数disp还可以显示字符串(文本内容要用单引号)。
disp('The values in the x matrix are:')
The values in the x matrix are:
每个显示函数的显示内容都单独使用一行
disp('The values in the x matrix are:');disp(x)
The values in the x matrix are:
1 2 3 4 5
可以使用函数num2str(数值到字符)可以把两次输出的内容合并成一个矩阵。
这个过程称为联级。
函数num2str可以把数值型数据转换成字符型数据。
在这个例子中,先用函数num2str把矩阵x转换成字符型数组,然后再和第一个字符串合并成一个大的字符型数组。
注意:如果在字符串中包含引号,则要输入两个引号,否则matlab会把单引号看成是字符串的结束标志。
使用引号的字符串如下:
disp('The moon''s gravity is 1/6th that of the earth')
The moon's gravity is 1/6th that of the earth
利用函数input和disp模仿对话的案例
disp('Hi');
disp('I''m your Matlab program');
name=input('Who are you?','s');
disp(['Hi',name]);
answer=input('Don''t you just love computers?','s');
disp([answer,'?']);
disp('Computers are very useful');
disp('You''ll use them a lot in college!!');
disp('Good luck with your studies')
pause(2);
disp('Bye bye')
程序交互过程中用到了函数pause。
如果函数pause没有输入参数,那么程序会中止运行,直到按任何键继续。
如果pause有输入参数,则程序会根据输入参数暂停数秒后继续执行。
五、格式化输出——函数fprintf
函数fprintf的输出格式比函数disp有更严格的要求。
除了能显示文本信息和数据矩阵外。
函数fprintf 还可以指定数据的显示格式。
该函数的功能与C语言中的fprintf类似。
我们先看fprintf运用的一个例子
cows=5;
fprintf('There are %f cows in the pasture',cows)
There are 5.000000 cows in the pasture
在上述代码中,函数fprintf的第一个参数包含一个占位符(%)。
占位符不但指定了输出的格式,还表明了变量输出的位置。
程序代码中的%f表明用定点数格式显示变量cows的值。
默认的格式为小数点后显示6位数。
相关类型域的格式
类型域结果
%f定点格式
%e指数格式
%d 十进制格式—若显示的数值是整数,则不包括尾部的0;若显示的数值是小数,则以指数形式显示
%g以%f或%e中最紧凑形式显示
%c字符格式(每次显示一个字符)
%s字符串格式(显示完整的字符串)
Matlab在执行完函数fprintf后不会自动重起一行。
前述的命令行执行完后,在命令窗口中命令提示符紧跟在函数输出字符串的后面,并没有另起一行。
若再次执行其它命令,则两次的输出结果会在同一行中显示出来。
cows=1:5;
fprintf('There are %f cows in the pasture',cows)
如果需要分行显示,则在字符串后使用\n进行换行。
cows=1:5;
fprintf('There are %f cows in the pasture\n',cows)
There are 1.000000 cows in the pasture
There are 2.000000 cows in the pasture
There are 3.000000 cows in the pasture
There are 4.000000 cows in the pasture
There are 5.000000 cows in the pasture
特殊格式命令
格式命令功能
\n换行
\r回车(和换行类似)
\t表格
\b退格
width field 和presicion field
使用可选项width field和presicion field可以控制数据输出宽度和精度。
width field必须是正的十进制整数,用于控制字符显示的最小宽度。
presicion field必须以点(.)开始,用于确定指数或定点数中小数点后的数字位数。
例如,%8.2说明字符显示的最小宽度是8位,小数点后有两位数字。
cows=1:5;
fprintf('There are %5.2f cows in the pasture\n',cows)
There are 1.00 cows in the pasture
There are 2.00 cows in the pasture
There are 3.00 cows in the pasture
There are 4.00 cows in the pasture
There are 5.00 cows in the pasture
如果变量是二维矩阵,那么Matlab会按列重复执行fprintf命令。
先输出第一列,然后是第二列,依次类推。
feet=1:3;
inches=feet.*12;
把上面两个矩阵合并成一个矩阵
table=[feet;inches];
fprintf(‘%4.0f %7.2f \n’,table)
函数fprintf除了可以严格控制格式化输出数据外,函数fprintf还可以把数据输出到文件中。
首先建立输出文件,然后用函数fopen打开该文件,同时给打开的文件分配一个文件标识符(即文件的别名)。
file_id=fopen(‘my_output_file’,’wt’)
其中,函数fopen的第一个输入参数是要打开的文件名。
第二个输入参数是字符串‘wt’,表示要对文件进行写的操作。
如果能够正确打开这个输出文件,并且已经给该文件分配了文件标识符,就可以把这个文件标识符作为函数fprintf的第一个输入参数按照指定的格式把数据写入到文件中:
fprintf(file_id,’some example output is %4.2f \n’,pi*1000)
这种函数格式将下列字符串写入文件my_output_file中。
Some example output is 3141.29
并且在命令窗口返回写入数据的字节数:ans=32
练习:如何将上述实例的结果写入到指定txt文件中。
cows=1:5;
myfile=fopen('result.txt','wt')
fprintf(myfile,'There are %5.2f cows in the pasture\n',cows)
注意:
在使用fprintf时,初学者常犯的错误是忘记在占位符后输入域类型标识,如f,这样函数将不会正常工作,而且还不会给出错误提示。
若函数fprintf语句中包含百分号%,则需要输入两次%,其中第一个百分号%为占位符。
fprintf(‘The interest rate is %5.2f %% \n’,5)
输出The interest rate is 5.00%
六、图形输入
在Matlab中,允许以图形的方式输入坐标x和y的值。
命令ginput允许用户在图形窗口中任选一点,并将该点的位置转换成确切的x和y坐标值。
在命令
[x,y]=ginput(n)
中,matlab要求用户在图形窗口中任选n个点。
若不输入n的值
[x,y]=ginput(n)
Matlab会获取按回车键时所对应的点的坐标。
案例:
通过定义x在5到30之间创建图形,计算y的值:
x=5:30;
y=x.^2-40.*x+400;
plot(x,y)
axis([5,30,-50,250])
[a,b] =ginput
七、在M文件中使用元胞模式
元胞模式是Matlab7中新增的功能:即用户可以把M文件分成若干个部分,这些部分称为元胞(cell),每一次仅有一个元胞被执行,这种功能对Matlab程序开发非常有用。
元胞模式也允许用户以不同的格式创建报告,显示程序结果。
把程序划分成元胞,有助于对程序进行调试。
更重要的是,元胞模式可以把大型程序分割成若干个可管理的小部分并独立运行这些部分。
(1)如何激活元胞模式,在编辑窗口的菜单中选择。
cel l→Enable cell mode
(2)元胞模式的语法
在M文件程序中连续输入两个百分号和一个空格就可以把源程序分成若干个元胞。
在空格后添加名称元胞分隔符:
%% Cell Name
在双百分号(%)后必须加入空格,否则会被Matlab误认为是注释行。
划分好元胞后,将鼠标滑到某一个空格上,相应的元胞就会变成浅黄色。
(3)元胞模式的特殊工具栏
元胞工具栏
计算当前元胞
逐个对元胞进行计算
对元胞中的数据进行加减修正
对元胞中的数据进行乘除修正
添加元胞分隔符
显示元胞标题
演示链接
“”
“”
At the end, Xiao Bian gives you a passage. Minand once said, "people who learn to learn are very happy people.". In every wonderful life, learning is an eternal theme. As a professional clerical and teaching position, I understand the importance of continuous learning, "life is diligent, nothing can be gained", only continuous learning can achieve better self. Only by constantly learning and mastering the latest relevant knowledge, can employees from all walks of life keep up with the pace of enterprise development and innovate to meet the needs of the market. This document is also edited by my studio professionals, there may be errors in the document, if there are errors, please correct, thank you!。