Matlab第十讲教案.docx

上传人:b****6 文档编号:3639650 上传时间:2022-11-24 格式:DOCX 页数:13 大小:150.36KB
下载 相关 举报
Matlab第十讲教案.docx_第1页
第1页 / 共13页
Matlab第十讲教案.docx_第2页
第2页 / 共13页
Matlab第十讲教案.docx_第3页
第3页 / 共13页
Matlab第十讲教案.docx_第4页
第4页 / 共13页
Matlab第十讲教案.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Matlab第十讲教案.docx

《Matlab第十讲教案.docx》由会员分享,可在线阅读,更多相关《Matlab第十讲教案.docx(13页珍藏版)》请在冰豆网上搜索。

Matlab第十讲教案.docx

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)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1