Matlab第十讲教案.docx
- 文档编号:27190327
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:15
- 大小:143.34KB
Matlab第十讲教案.docx
《Matlab第十讲教案.docx》由会员分享,可在线阅读,更多相关《Matlab第十讲教案.docx(15页珍藏版)》请在冰豆网上搜索。
Matlab第十讲教案
计算机技术在安全工程中的应用
——Matlab入门及应用
授课教师:
班级:
专业:
安全技术及工程
第十章MATLAB自定义函数
课型:
新授课
教具:
多媒体教学设备,matlab教学软件
一、目标与要求
✧通过解说与实例练习,掌握matlab创建函数M文件的方法
✧掌握matlab中全局变量与局部变量的定义与用法
✧通过解说与实例练习,掌握在matlab主函数M文件中创建子函数
✧在实例练习过程中,回顾利用伪码编写简单程序的方法
✧掌握通过创建matlab函数M文件解决生活中的计算问题
二、教学重点与难点
本堂课教学的重点在于引导学生掌握matlab中函数M文件的创建及应用。
本堂课的难点在于理解matlab中函数M文件主函数与子函数的区别及调用,局部变量与全局变量的定义与应用范围的区别。
三、教学方法
本课程主要通过讲授法、演示法、练习法等相结合的方法来引导学生掌控本堂课的学习内容。
1)通过讲授法向学生讲述创建matlab函数M文件的基本方法、全局变量与局部变量的定义及用法等。
2)通过运用多媒体设备现场演示matlab创建函数M文件的应用实例。
3)在掌握创建matlab函数M文件基本方法的基础上,采用练习法引导学生创建函数M文件解决实际问题。
四、教学内容
课后习题五
(1)拉力测试装置在测试过程中,被测样本受均匀外力的作用产生形变。
下图中显示的是一组拉力测试数据。
根据以下公式计算应力与形变:
其中,
是产生的应力,单位为lbf/in2(psi);F为施加的外力,单位为lbf;A为样本的截面积,单位为in2;
为产生的形变,单位为in/in;
为样本的长度;
为样本的原始长度。
(a)测试样本是直径为0.505in的金属杆,根据直径可以计算出金属杆的截面积,进一步利用所提供的数据计算金属杆的应力和形变。
(b)以形变为x轴,应力为y轴,作x-y线图。
用黑色实线连接各数据点,并用圆圈标出各实测数据点。
(c)添加标题和坐标轴的标注。
(d)屈服应力或屈服点是指图形从陡峭的直线变成平滑曲线所对应的点,在屈服点附近测试样本的特性会发生显著变化。
在屈服点之前,测试样本发生弹性形变,即当外力消失时,形变也消失,与橡皮筋类似。
若继续增大外力作用,则测试样本会发生永久变形,也称塑性变形。
在图中对屈服点做出标注。
拉力测试数据
负载
长度
负载
长度
0
2
7750
2.010
1650
2.002
8650
2.020
3400
2.004
9300
2.040
5200
2.006
10100
2.080
6850
2.008
10400
2.120
程序代码:
%%定义已知变量
F=[16503400520068507750865093001010010400];
L=[2.0022.0042.0062.0082.0102.0202.0402.0802.120];
L0=2;
A=0.505^2*pi/4;
%%one
yinli=F./A
xinbian=(L-L0)./L0
%%two
plot(yinli,xinbian,'-ok')
%%three
title('应力应变变化图'),xlabel('yinli'),ylabel('xinbian')
%%four
gtext('屈服点')
(2)创建矢量x,范围在0~20
之间,步长为
/100。
矢量y和z分别等于
①在x-y坐标系中画出x和y的关系曲线。
②在极坐标系中画出x和y的关系曲线。
③画出x、y和z的三维曲线,并在图中添加标题和坐标轴标注。
④为了产生如下图所示的类似龙卷风的曲线应如何调整plot3中的输入参数,用comet3代替plot3绘制曲线。
%%one
x=0:
pi/100:
20*pi;
y=x.*sin(x);
z=x.*cos(x);
plot(x,y)
%%two
figure
(2)
polar(x,y)
%%three
figure(3)
plot3(x,y,z)
xlabel('x'),ylabel('y'),zlabel('z'),title('三维曲线')
%%four
figure(4)
plot3(z,y,x)
xlabel('z'),ylabel('y'),zlabel('x'),title('三维曲线')
figure(5)
comet3(z,y,x)
(3)创建矢量x和y,数据变化范围从-5到+5,步长为0.5.用函数meshgrid将矢量x和y映射为两上新的二维矩阵X和Y,根据下述公式计算矢量Z:
1用函数mesh创建Z的三维图。
2用函数surf创建Z的三维图。
比较单个输入变量和三个输入变量(X,Y,Z)时输入结果的区别。
3给输出的曲面图增加渲染阴影效果。
4绘制Z的等高线图。
5绘制Z的曲面图并加上等高线。
%%变量定义
x=-5:
0.5:
5;
y=-5:
0.5:
5;
[X,Y]=meshgrid(x,y);
Z=sin(sqrt(X.^2+Y.^2));
%%one
mesh(Z)
%%two
figure
(2)
subplot(2,2,1)
surf(Z)
subplot(2,2,2)
surf(X,Y,Z)
%%three
shadinginterp
%%four
subplot(2,2,3)
contour(X,Y,Z)
%%five
subplot(2,2,4)
surfc(X,Y,Z)
(1)导入课堂内容
Matlab是一种基于函数的编程语言。
函数就是用户输入参数,返回输出结果的程序。
Matlab的有内置函数和自定义函数。
内置函数主要包括三角函数、对数函数、统计分析函数等。
Eg:
三角函数sin、cos、asin、acos等
Eg:
sin(pi/2)ans=1
sin(90)ans=0.8940
由以上两段小程序可以看出matlab内置的三角函数sin的输入参数形式只能是弧度,若输入角度则会显示错误的输出结果。
在matlab软件的低版本内里没有自带输入参数为角度形式的内置正弦函数。
我们可以通过编写matlab自定义函数即创建函数M文件来实现这一功能。
(2)函数M文件创建的语法
自定义函数和matlab自定义函数的内置函数一样,具有相同的结构。
函数中必须包括函数名、输入参数和输出结果三项。
自定义函数在M文件中编写代码。
第一行是函数的定义行,它应包括:
⏹引导词function
⏹输出变量
⏹函数名称
⏹输入变量
一个函数的定义如下:
functionoutput=my_function(input)
Matlab中函数的命名应遵循如下规则:
函数名必须以字母开头
可以包括字母、数字和下划线
不能使用预留的名称
长度没有限制,但是最好不要太长
由此我们可以创建函数M文件来解决前一部分的遗留问题:
functionoutput=sin_degree(x)
output=sin(pi.*x./180);
(3)多输入多输出函数
自定义函数也可以有多个输入参数和输出结果。
一个函数的定义如下:
function[a,b,c,……]=my_function(x,y,z,……)
Eg:
余项函数rem(x,y)就是一个多输入函数。
余项函数就是求除法运算中余数的函数,需要输入除数和被除数两个选项。
(4)全局变量与局部变量
全局变量是整个程序的变量。
在命令窗口或脚本M文件中定义的变量都是全局变量。
函数的M文件中所有变量都称为局部变量。
在命令窗口或脚本M文件中不能访问自定义函数定义的变量。
同理自定义函数中也不能访问工作区定义的变量。
也就是说函数必须是自包含的,即:
程序中的信息仅能通过输入变量传递给函数,函数中的信息仅能通过输出变量传递给程序。
(5)查看M文件代码
Matlab中提供了两种函数类型。
一种是内置函数,其程序代码是看不见的。
另一种是M文件函数,它存储在程序提供的工具箱中,使用type命令可以查看M文件代码。
函数sphere是Matlab中的实体模型函数,可以产生一个三维球体,查看其程序代码,输入
typesphere
或type(‘sphere’)
(6)应用实例
①例题:
个人住房公积金贷款买房,还款额及利息计算
⏹个人买房申请住房公积金贷款,还款形式选择等额本金还款。
5年以上贷款年利率为4.5%,贷款本金为10万元,还款期限为10年。
编写函数M文件计算每月还款额、总还款额和总利息,并将每月还款额输出到一个txt文件中
⏹等额本金还款计算公式:
每月还款金额=(贷款本金/还款月数)+(本金—已归还本金累计额)×每月利率
⏹输入:
贷款本金,贷款利率,贷款期限
⏹输出:
每月还款额,总还款额,总利息
②流程图和伪码
通常在编写程序之前,要先画出程序的流程图或编写伪码,对程序进行设计。
流程图就是以图形化的方法表现编程思路,伪码是用文字的形式对程序算法进行描述。
在编写程序时,可以任意选择其中一种或两种方法对程序进行设计。
在编写简单程序中,最好使用伪码的方法:
◆用句子描述程序实现的步骤
◆将步骤转换成程序中的注释信息
◆在注释行之间国入恰当的matlab程序代码
③程序实现的步骤
✧定义函数M文件
✧计算每月应还本金额
✧计算每月的剩余本金
✧计算每月还款额
✧计算总还款额
✧计算总利息
✧输出计算结果到已经定义的txt文件中
④将程序步骤转换为伪码
%definefunctionalM-file
%calculatemonthlyprincipalforpayment
%calculatemonthlysurplusprincipal
%calculatemonthlypayment
%calculatethetotalpayment
%calculatethetotalinterest
%outputcalculatedresults
⑤matlab程序代码
%definefunctionalM-file
function[ZHK,ZLX]=DEBJHK(BJ,DK_interestrate,DK_duration)
%calculatemonthlyprincipalforpayment
BJ_permonth=BJ./DK_duration;
%calculatemonthlysurplusprincipal
x=1:
DK_duration;
surplus_BJ=BJ-BJ_permonth.*x;
%calculatemonthlypayment
MYHK=BJ_permonth+surplus_BJ.*DK_interestrate/12;
%calculatethetotalpayment
ZHK=sum(MYHK);
%calculatethetotalinterest
ZLX=ZHK-BJ;
%outputcalculatedresults
y=fopen('result.txt','wt');
fprintf(y,'Zonghuankuaner:
%8.3fyuan\n',ZHK);
fprintf(y,'Zonglixi:
%8.3fyuan\n',ZLX);
fprintf(y,'Di%2.0fgeyuehuankuanerwei:
%8.3fyuan\n',[x;MYHK]);
注:
格式化输出函数fprintf的用法
Eg :
cows=2 :
5 ;
fprintf('Thereare%5.2fcowsinthepasture\n',cows)
Thereare2.00cowsinthepasture
Thereare3.00cowsinthepasture
Thereare4.00cowsinthepasture
Thereare5.00cowsinthepasture
上述代码中,函数fprintf的第一个参数包含一个占位符(%)。
占位符不但指定了输出的格式,还表明了变量输出的位置。
程序代码中的%5.2f表明变量cows输出的格式。
f表示用定点数格式显示。
在使用函数fprintf时,初学者常犯的错误是忘记在占位符后输入类型域标识,如f,这样函数将不会正常工作,而且还不会给出错误提示。
类型域还有其它显示格式:
使用可选项widthfield和precisionfield可以控制数据输出宽度和精度。
Widthfield必须是正的十进制整数,用于控制字符显示的最小宽度。
Precisionfield必须以点(.)开始,用于确定指数或定点数中小数点后的数字位数。
例如:
上例中%5.2f说明字符显示的最小宽度是5位,小数点后有2位数字。
上例中\n是一种特殊格式命令,用于换行显示。
还有一些其它的特殊格式命令:
除了可以在命令窗口中输出格式化数据外,函数fprintf还可以把数据输出到文件中。
首先创建输出文件,然后用函数fopen打开该文件,同时给打开的文件分配一个文件标识符(即文件的别名):
file_id=fopen(‘my_output_file.txt’,’wt’);
其中,函数fopen的第一个输入参数是要打开的文件名。
第二个输入参数是字符串’wt’,表示要对文件进行写操作。
如果能正确打开这个输出文件,并且已经给该文件分配了文件标识符,就可以把这个文件标识符作为函数fprintf的第一个输入参数按照指定格式把数据写入到文件中:
fprintf(file_id,‘Someexampleoutputis%4.2f\n’,pi*1000)
并在命令窗口返回写入数据的字节数。
(7)子函数
⏹在同一个文件中,除了主函数外还可以创建多个子函数。
子函数只能被主函数调用。
使用子函数有利于程序的模块化,能够使程序的可读性更强。
⏹每一个matlab的M文件只能有一个主函数,并且M文件名必须和主函数名相同。
主函数之后可以定义任何合法的子函数,子函数的命名规则和变量的命名规则相同。
%definefunctionalM-file
function[ZHK,ZLX]=DEBJHK00(BJ,DK_interestrate,DK_duration)
%calculatemonthlyprincipalforpayment
a=BJ./DK_duration;
%calculatemonthlysurplusprincipal
x=1:
DK_duration;
b=BJ-a.*x;
%calculatemonthlyinterestrate
c=DK_interestrate/12;
%calculatemonthlypayment
MYHK=zhihanshu(a,b,c);
%calculatethetotalpayment
ZHK=sum(MYHK);
%calculatethetotalinterest
ZLX=ZHK-BJ;
%outputcalculatedresults
y=fopen('result.txt','wt');
fprintf(y,'Zonghuankuaner:
%8.3fyuan\n',ZHK);
fprintf(y,'Zonglixi:
%8.3fyuan\n',ZLX);
fprintf(y,'Di%2.0fgeyuehuankuanerwei:
%8.3fyuan\n',[x;MYHK]);
functionoutput=zhihanshu(BJ_permonth,surplus_BJ,interestrate_permonth)
output=BJ_permonth+surplus_BJ.*interestrate_permonth;
(8)匿名函数和函数句柄、复合函数
一般情况下,创建用户自定义函数,需要把函数存储起来以便将来编程使用。
匿名函数是Matlab7中一种新的、简单的函数构造方法。
用户可以直接在命令窗口或脚本M文件中定义和使用匿名函数。
匿名函数更像一个定义的变量,只要不清空工作区,匿名函数都是有效的。
下面的程序代码给出了一个匿名函数的例子:
ln=@(x)log(x)
●@符号提示Matlab,ln是一个函数
●在@符号后面紧接着定义了函数的输入参数
●最后定义函数
关键概念:
用户可以在M文件或命令窗口中定义匿名函数
在程序中,匿名函数的用法和其它函数的用法相同。
ln(10)
ans=
2.3026
用户还可以给函数M文件创建函数句柄。
创建函数M文件如下:
functionresult=distance(t)
result=1/2*9.8*t.^2;
创建函数句柄:
distance_handle=@(t)distance(t)
把函数句柄distance_handle分配给函数distance。
函数句柄可以视为函数的别称。
使用函数句柄有什么好处呢?
1、提高运行速度。
因为matlab对函数的调用每次都是要搜索所有的路径,从setpath中我们可以看到,路径是非常的多的,所以如果一个函数在你的程序中需要经常用到的话,使用函数句柄,对你的速度会有提高的。
2、使用可以与变量一样方便。
比如说,我再这个目录运行后,创建了本目录的一个函数句柄,当我转到其他的目录下的时候,创建的函数句柄还是可以直接调用的,而不需要把那个函数文件拷贝过来。
因为你创建的functionhandles中,已经包含了路径。
复合函数
如果某个函数的输入也是一个函数(函数的函数、或称复合函数)时,Matlab经常使用匿名函数和函数句柄。
绘图函数fplot就是Matlab中的内置复合函数,它要求有两个输入参数:
一个输入参数是函数或函数句柄,另一个输入参数是函数的取值范围
poly5=@(x)-5*x.^5+400*x.^4+3*x.^3+20*x.^2-x+5;
fplot(poly5,[-30,90])
许多matlab函数都可以将函数句柄作为输入参数。
例如:
fzero用于求方程f(x)=0的解,方程中x可以是函数句柄也可以是一个估计值。
fzero(function,x)就是求接近到x,使函数function=0的解。
poly5=@(x)-5*x.^5+400*x.^4+3*x.^3+20*x.^2-x+5;
fplot(poly5,[-30,90])
fzero(poly5,75)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 第十 教案
![提示](https://static.bdocx.com/images/bang_tan.gif)