数学建模培训m文件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
函数调用和参数传递
3 参数传递 MATLAB在函数调用上有一个与众不同之处 :函数所传递的 参数具有可调性 。
传递参数数目的可调性来源于如下两个MATLAB永久变量: • 函数体内的 nargin 给出调用该函数时的输入参数数目。 • 函数体内的 nargout 给出调用该函数时的输出参数数目。 只要在函数文件中包括这两个变量,就可以知道该函数文件 调用时的输入参数和输出参数数目。
3.3 M文件控制结构
程序控制结构有三种:顺序结构、选择结构和循 环结构。任何复杂的程序都由这三种基本结构组成。
顺序结构
按排列顺序依次执行各条语句,直到程序的最后。
这是最简单的一种程序结构,一般涉及数据的输入输 出、数据的计算或处理等。
x=[1, 2, 3] y=[4, 5, 6] z=x.*y z=x.\y z=x.^y z=x.^2 z=2.^[x y]
input
此命令用来提示并接收用户从键盘输 入数据、字符串或表达式的值,语法规则 如下:
(8)keyboard
此命令将停止文件的执行并将控制权 交给键盘,此时命令窗口的提示符由“>>” 变成“K>>”,当输入return后,控制权将 交回文件。该命令对程序的调试和在程序 运行中修改变量值都很方便。
习题
1 1 1 1、编写m函数文件,求n的阶乘 并求 1 + 2! +...+ 10 !
2 求1+2+3+……+100
3 用用二分法编写m函数文件,求f(x)=0的解 例如 解x^2-13=0
N=100
n=input( 'n='), switch rem(n,2), case 1, a='奇', case 0, a='偶', otherwise, a='空', end
n = -5 a =奇
n=-8 a =偶
n=8 a =偶
编写一m函数文件实现下列函数值
3 x 2, x 1 f ( x ) x , 1 x 1 2 x 3, x 1
M函数文件 与脚本文件不同 ,函数文件犹如一个“黑箱”,把一些数据 送进并经加工处理,再把结果送出来。
MATLAB提供的函数指令大部分都是由函数文件定义的。
M函数文件的特点是: • 从形式上看 ,与脚本文件不同 ,函数文件的笫一行总是 以 “function”引导的“函数申明行”。 •从运行上看 ,与脚本文件运行不同 ,每当函数文件运行, MATLAB就会专门为它开辟一个临时工作空间,称为函数 工作空间( Function workspace) 。当执行文件最后一条 指令时 ,就结束该函数文件的运行,同时该临时函数空间 及其所有的中间变量就立即被清除。
当输出行参只有一个时,可省略方括号
函数必须是一个单独的 M文件 函数文件名必须与函数名一致
以百分号开始的语句为注释语句
函数调用
[输出实参列表]=函数名(输入实参列表)
函数调用时,实参的顺序应与函数定义时的形参的顺 序一致。
例
编写函数文件求半径为r的圆的面积和周长。
函数文件如下: function [s,p]=fcircle(r) %CIRCLE calculate the area and perimeter of a circle of radii r %r 圆半径 %s 圆面积 %p 圆周长 s=pi*r*r; p=2*pi*r;
MATLAB程序设计 3.1 M文件
用 Matlab 语言编写的程序称为 M 文件。 M 文件以 .m 为扩展名。 M 文件根据调用方式的不同可以分为两类:
Script:脚本文件/命令文件
Function:函数文件
M 文件的建立、打开、运行
新建一个 M 文件
菜单操作 ( File New M-File ) 命令按钮 ( 快捷键 )
M脚本文件 对于一些比较简单的问题 ,在指令窗中直接输入指令计算 。 对于复杂计算,采用脚本文件(Script file)最为合适 。 MATLAB只是按文件所写的指令执行 。
M脚本文件的特点是:
• 脚本文件的构成比较简单,只是一串按用户意图排列而成 的(包括控制流向指令在内的)MATLAB指令集合。 • 脚本文件运行后 ,所产生的所有变量都驻留在 MATLAB 基本工作空间(Base workspace)中。只要用户不使用清除 指令(clear), MATLAB指令窗不关闭,这些变量将一直 保存在基本工作空间中。
y=sum(f)
(1)continue
其作用是结束本次循环,即跳过循环 体中尚未执行的代码,接着进行下一次是 否执行循环的判断。
s=1; for i=1:4
if i==4
continue; end s=s*i;
wk.baidu.com
end
(2)break
它的作用是终止本次循环,跳出所在层
循环。
(3)return
以文件名fcircle.m存入c:\matlab71\work下,
然后在MATLAB命令窗口调用该函数: [s,p]=fcircle(10)
• 程序调试 • 主程序不需要专门的调试命令,需要用调试命令的主要是函 数程序。因为函数程序出错停机时,变量不能保存,无现场 记录。会给调试带来很大困难,解决方法: • (1)把某些分号改为逗号,使中间结果能显示在屏幕上, 作为查错依据。 • (2)在子程序中适当部位加keyboard命令。系统会暂停, 等待用户键入命令。这是子程序的变量还存在于工作空间中, 可以对它们进行检查。 • (3)将函数文件的第一行加%号,成为程序文件,进行初 步调试。第一行中的输入变元,可改用input或赋值语句来 输入,调好后再改回函数文件。 • (4)使用MATLAB提供的调试命令。调试命令较繁琐, 不作介绍。
并求f(0)
循环结构
for 循环变量=初值:步长:终值 循环体 end while 条件 循环体 end 注意:for 循环适合循环次数确定的情况; while循环适合循环次数不确定的情况
while循环容易出现死循环,使用时一定要注意.
若出现死循环,则按键盘:Ctrl+C强制结束程序. 提示:与各种编程语言一样,各种结构之间可以嵌套使用.
y 1 / i2 例 已知y的表达式 i 1 y的值。 程序如下:
y=0;n=100;
n
,当n=100时,求
for i=1:n
y=y+1/i/i; end y
在实际MATLAB编程中, 为提高程序的执行速度,常 用向量运算来代替循环操作: n=100; i=1:n; f=1./i.^2;
switch 语句
根据表达式的不同取值,分别执行不同的语句。 switch 表达式 case 表达式1 语句组1 case 表达式2 语句组2 ... ... case 表达式m 语句组m otherwise 语句组 end
switch 语句
Matlab 首先计算 表达式的值,然后将它依次与各个 case 指令后的检测值进行比较,当比较结果为真时, 就执行相应的语句组,然后跳出 switch 结构。 如果所有的比较结果都为假,则执行 otherwise 后 面的语句组,然后跳出 switch 结构。 otherwise 指令可以不出现。 switch 后面的表达式 表达式的值可以是一个标量或 字符串。
值得注意:nargin、 nargout 本身都是函数,不是变量,所 以用户不能赋值,也不能显示。 “变长度”输入输出宗量:varargin 、 varrgout。具有接受 “任意多输入” 、返回“任意多输出”的能力 。
1、编写一个函数文件球的体积和表面积 2、编写一个m文件实现矩阵
实现矩阵的转置,行列式以及矩阵维数的大小信息
M文件的一般结构 由于从结构上看 ,脚本文件只是比函数文件少一个“函数申 明行”,所以只须描述清楚函数文件的结构 。
典型 M函数文件的结构如下 :
• 函数申明行:位于函数文件的首行,以关键字 function 开 头,函数名以及函数的输入输出宗量都在这一行被定义。 • 笫一注释行:紧随函数申明行之后以%开头笫一注释行。 该行供lookfor关键词查询和 help在线帮助使用 。 • 在线帮助文本区 :笫一注释行及其之后的连续以%开头的 所有注释行构成整个在线帮助文本。 • 编写和修改记录:与在线帮助文本区相隔一个“空”行, 也以%开头,标志编写及修改该M文件的作者和日期等 。 • 函数体:为清晰起见,它与前面的注释以“空”行相隔。
函数调用和参数传递
1 局部变量和全局变量 局部(Local)变量:它存在于函数空间内部的中间变量, 产生于该函数的运行过程中,其影响范围也仅限于该函数本 身。 全局(Global)变量:通过 global 指令,MATLAB也允许几 个不同的函数空间以及基本工作空间共享同一个变量,这种被 共享的变量称为全局变量。 2 函数调用 在MATLAB中,调用函数的常用形式是: [输出参数1,输出参数2,…] = 函数名(输入参数1,输入参数2, …) 函数调用可以嵌套,一个函数可以调用别的函数,甚至调 用它自己 (递归调用)。
选择结构
选择结构 是根据给定的条件成立或不成立,分别执 行不同的语句。Matlab 用于实现选择结构的语句有 if 语句、switch 语句和try语句 。
if 条件语句
单分支结构 if 条件 语句组 end
双分支结构 if 条件 语句组1 else 语句组2 end
例如 编写一函数实现
1 x>0 f ( x) 1 x 0
多分支结构
if 条件1 语句组1 elseif 条件2 语句组2 ... ... elseif 条件m 语句组m else 语句组 end
编写一m文件判断一数是奇数还是偶数
n=input( 'n='), if rem(n, 2)==0 a='even', else a='odd', end n = 7 a =odd; n = 8 a =even
此命令可使正在运行的函数正常退出,并返
回调用它的代码段继续运行,它也可强制结束该 函 数 的 执 行 。 如 MATLAB 自 带 函 数 showopcevents() 。
Function f=panduan(x) if x>=0 f=1; return ; else f=0 return; end
n=input( 'n='), switch mod(n,2), case 1, a='奇', case 0, a='偶', otherwise, a='空', end
判断输入数n的奇、偶、空的程序 mod(x,m)x整除m取正余数, rem(a,b) a整除b,求余数 n= 负数
n=5 a =奇
打开已有的 M 文件
菜单操作 ( File Open ) 命令按钮 ( 快捷键 )
运行 M脚本文件
editor编辑窗口 ( Debug run) 命令按钮 ( 快捷键 )
3.2
函数文件
函数文件的结构:由 function 语句引导
function [输出形参列表]=函数名(输入形参列表) % 注释说明部分(可选) 函数体语句(必须) 第一行为引导行,表示该 M文件是函数文件 函数名的命名规则与变量名相同 ( 必须以字母开头 )