MATLAB中M文件例子
Matlab_上机实验M文件的运用

Matlab实验21、编写一个函数文件,计算一个球的体积。
M文件如下(命名为volume.m):function V=volume(r)if r<0%判断球半径r的大小error('r is smaller than 0,error input!');%如果半径r小于0提示输入错误elseV=4/3*pi*r^3;%计算球的体积end在命令窗口中输入如下指令:>> volume(5)运行结果为:ans =523.59882、分别用命令文件和函数文件实现下题(1)Y<3时的最大的n值(2)与(1)的n值对应的y值M文件如下(命名为summ1.m):function y=summ1(n)y=0;for k=1:n;y=y+1/(2*k-1);if y>3;m=k-1y2=summ1(m)break;endend在命令窗口中输入如下指令:>> summ1 (100)运行结果为:m =56y2 =2.9944ans =3.00333、输入一个百分制成绩,要求输出成绩等级,A, B, C, D, E. 其中90-100分为A,80-89为B,70-79为C,60-69分为D,60分以下为E。
要求:(1)分别用if和switch语句实现(2)输入百分制成绩后要判定成绩的合理性,对不合理的成绩要做出出错信息。
方法一:if函数法%求解输出成绩等级的If源程序代码by ljlclear;clc;%删除wordspace中的矩阵变量并进行清屏处理fenshu=input('输入分数=');if fenshu<0||fenshu>100%判断分数的值error('fenshu输入不合理,错误的输入!');%如果分数不合理提示输入错误elseif fenshu>=90r='A'elseif fenshu>=80r='B'elseif fenshu>=70r='C'elseif fenshu>=60r='D'elser='E'end在命令窗口中输入如下指令:输入分数=60运行结果:r =D输入分数=101运行结果:??? Error using ==> chengji_if at 5fenshu输入不合理,错误的输入!方法二:switch法%求解输出成绩等级的Switch源程序代码by ljlclear;clc;%删除wordspace中的矩阵变量并进行清屏处理fenshu=input('输入分数=');if fenshu<0||fenshu>100%判断分数的值error('分数输入不合理,错误的输入!');%如果分数不合理提示输入错误elseswitch fix(fenshu/10)case {10,9}r='A'case 8r='B'case 7r='C'case 6r='D'otherwiser='E'endend在命令窗口中输入如下指令:输入分数=90运行结果:r =A输入分数=-88运行结果:??? Error using ==> chengji_switch at 5分数输入不合理,错误的输入!4、鸡兔同笼问题:鸡和兔子关在一个笼子里,已知共有头36个,脚100个,求笼内关了多少只兔子和多少只鸡?程序如下:%求解鸡兔同笼问题的源程序代码by ljlclear;clc;%删除wordspace中的矩阵变量并进行清屏处理Ji=1;%设定鸡的数目从一只开始while 1%不满足条件继续试if Ji*2+(36-Ji)*4==100&(Ji+(100-Ji*2)/4)==36%鸡兔同笼的条件(同时满足两个)break;%一旦条件满足,跳出循环endJi=Ji+1;endJi%输出鸡的数目Tu=(100-2*Ji)/4%输出兔子的数目运行结果如下:Ji =22 Tu =14。
MATLAB-程序设计-M文件建立

1、先建立函数M文件fun2.m来定义函数f(x) function f=fun2(x) 1 else if x<=0
f=x^3 else
f=2*x end end
2、再在MATLAB命令窗口输入fun2(2),fun2(0.5), fun2(-1)即可.
MATLAB入门
程序设计
M文件
MATLAB的内部函数是有限的,有时为了研究 某一个函数的各种性态,需要为MATLAB定义新函 数,为此必须编写函数文件. 函数文件是文件名后 缀为M的文件,这类文件的第一行必须是一特殊字 符function开始,格式为:
function 因变量名=函数名(自变量名) 函数值的获得必须通过具体的运算实现,并赋 给因变量.
2x x 1
1、编写函数M文件 function f=fun1(x) if x>1
f=x^2+1 end if x<=1
f=2*x end
2、在MATLAB命令窗口输入fun1(2),fun1(-1)即可.
2) 有两个选择的一般形式是: if (expression1) {commands1} else {commands2} end
例: 设银行年利率为11.25%.将10000元钱存入银行, 问多长时间会连本带利翻一番?
money=10000; years=0; while money<20000
years=years+1; money=money*(1+11.25/100); end years money
运行结果:
years =7 money = 2.1091e+004
3. if-else-end结构
(1)有一个选择的一般形式是: if (expression) {commands} end
matlab.m文件的建立和调用方法

1.建立M文件的必要性:对于常用的或很长的程序,如果每次都从头输入,则非常费时间,也容易出错.将这些程序做成M文件就方便多了--只要输入自定义的命令,就可以方便的调用,编程的效率大大提高!2.如何建立M文件(1)在记事本(.txt)或maltab命令窗口中编辑好M文件例:编写一个输入半径,计算圆的面积和球的体积的M文件.前两行是文件头,一般说明文件的类型(M-file),文件名(tutex2),和文件的功能(输入半径,计算圆的面积和球的体积),后面是文件体,主要是解决特定问题的程序代码.% M-file, tutex2.m% 输入半径,计算圆的面积和球的体积r = input('Type radius:'); %从键盘输入Type radius的值,并将它赋值给r.area=pi*r^2;volume=(4/3)*pi*r^3;fprintf('The radius is %12.5f\n',r)fprintf('The area of a circle is %12.5f\n',area)fprintf('The volume of a sphere is %12.5f\n',volume)(2)将上面的代码保存到工作空间里.保存方法是:File/save As3.如何调用M文件?在matlab工作窗口直接键入M文件名,即可调用.以上面的程序为例,>> tutex2 %键入文件名,回车Type radius: %提示输入半径 ,输入半径,比如 10, 回车显示如下Type radius:13.5The radius is 10.00000The area of a circle is 314.15927 The volume of a sphere is 4188.79020。
3-第1章-MATLAB基础-M文件(3)

有调用关系的函数在同一文件
调用函数应放在被调用函数上方。 被调用函数次序无限制。范例func4.m
function out=func4(x) Recip=func3(x) ; out=sum(recip); %定义子函数 function output=func3(input) Output=1./input >>func4([1,2,3]) ans= 1.8333
第2行为函数的实现 规范函数的运算过程,并指定输出变量的值。
调用函数
调用函数funcavg1,可输入 >>vec=[1 2 3]; >>ave=funcavg1(vec) ave= 2
函数的输入和输出
一个函数可以有多个输入和输出 funcavg2.m可接受两个输入并产生两个输出。
function [avg1,avg2]=funcavg2(vec1,vec2); avg1=sum(vec1)/length(vec1); avg2=sum(vec2)/length(vec2);
funcavg2.m的调用 >>[a,b]=funcavg2([1,2,3],[4,5,6]) a= 2 b= 6
•说明:nargin和nargout是库函数,可以检查任何函数M文件 的输入和输出参数个数。 >>nargin(‘funcavg2’); ans= 2
范例
>>[a,b]=funcavg3([1,2,3],[4,5,6,7]) a= 2 b= 6 >>c=funcavg3([1 3 5 7 9]) c= 5
MATLAB 程序设计-M文件 鲁 坚
jianlu@ 深圳大学 数学与计算科学学院
MATLAB程序设计M文件程序控制结构程序调试程序举例

y=input('Please input y=:');
[rho,the]=tran(x,y);
rho
the MATLAB中,函数能够嵌套调用,即一种函数能够调用别旳函数, 甚至调用它本身。一种函数调用它本身称为函数旳递归调用。
例6 分别建立命令文件和函数文件,将华氏温度f转换为 摄氏温度c。
21.1111
x=
21.1111
(5). 函数文件旳其他有关概念
①局部变量和全局变量:
局部变量只存在于单个函数工作空间,全局变量 经过global定义,可穿行于不同函数工作空间, 涉及基本工作空间workspace。
函数文件旳内部变量是局部旳,与其他函数 及MATLAB内存相互隔离; 而假如在若干函数中把某一变量定义为全局 变量,那么这些函数将公用这个变量,全局 变量旳作用域是整个MATLAB旳工作区,即 全程有效,全部函数都能够对其存取和修改。
if (nargin == 1) tol = max(size(x)) * max(s) * eps;
程序部分
end
r = sum(s > tol);
(2)命令m文件建立及其运营
建立 涉及下列环节: 进入m文件编辑器 输入程序 定义文件名,保存程序
命令M文件旳运营方式: 直接在命令窗口输入该文件旳文件名 在m文件编辑器中打开该文件后点击工具条中
② M文件模式
将matlab语句构成旳程序存储成以m为扩展名 旳文件,然后再执行该程序文件,这种工作模式 称为程序文件模式。
程序文件不能在命令窗口下建立,因为命令窗口 只允许一次执行一行上旳一种或几种语句。
M文件及函数的编写

在调用函数之前,需要先声明函数,告诉编译器函数的名称、输入参数和返回值类型。
函数参数与返回值
参数
用于传递数据给函数,函数内部通过参数接收数据并进行处理。
返回值
函数执行完毕后,将结果返回给调用者。
函数体与局部变量
函数体
包含函数的逻辑和计算过程,是实现函数功能的 代码块。
局部变量
在函数内部定义的变量,只在函数内部有效,生 命周期与函数执行过程一致。
以查看每一步的结果。
02 条件断点
根据特定条件自动停止程
序。
04 错误消息和警告
仔细阅读和利用MATLAB
提供的错误消息和警告信
息。
M文件性能优化
向量化操作
利用MATLAB的向量化操作,避免 使用循环结构,提高代码执行效率。
避免不必要的函数调用
减少不必要的函数调用,以提高代码 执行速度。
预分配内存
用于多分支条件判断。
while循环
用于当条件满足时重复执行一段代码。
函数与脚本
01
函数
用于封装一段可重用的代码,并接受输入参数和 返回输出结果。
02
脚本
用于执行一系列MATLAB命令,不接受输入参数 和返回输出结果。
03
函数编写
பைடு நூலகம்
函数定义与声明
函数定义
指明函数名称、输入参数和返回值类型,以及函数体。
算法实现与验证
算法选择
根据问题需求选择合适的算法,并使用M文件实现该算法。
参数调整
根据实际需要调整算法参数,以提高算法性能和准确性。
算法验证
通过实验验证算法的有效性和优越性,并利用M文件记录实验结 果和分析。
MATLAB中M文件例子

MATLAB中M文件例子20.11 M文件例子精通MATLAB工具箱含有许多实用函数,它们可以验证本章的许多概念。
这些函数的基本部分已经在二维和三维图形这些章阐述过了。
有了前面对句柄图形的讨论,我们现在可以更彻底地讨论这些函数。
最简单的精通MATLAB工具箱的函数之一提出了一个共同的问题。
MATLAB函数gcf返回当前图形的句柄。
但是,它有一个副作用。
如果图形不存在,gcf就创建一个,并返回它的句柄。
如果想寻找一个图形是否存在于头一个位置,要是没有,又不得不创建,怎么办?函数mmgcf正好实现由其内容所描述的工作。
function HF=mmgcf%MMGCF Get Current Figure if it Exists.% MMGCF returns the handle of the current figure if it exists.% If no current figure exists,MMGCF returns an empty handle.%% Note that the function GCF is different.It creates a figure and returns its handle if it does not % exist.% Copyright (c) 1996 by Prentice-Hall,Inc.Hf=get(0, ‘Children’ ); % check for figure childrenif isempty(Hf)returnelseHf=get(0, ‘CurrentFigure’ );end函数mmgcf首先检查根对象的子对象的图形是否存在,如至少有一个图形对象时,根对象的‘CurrentFigure’属性就返回当前的图形。
函数mmgca为坐标轴对象执行同样的功能,如同在它的M文件内所描述的那样。
function Ha=mmgca%MMGCA Get Current Axes if it exists.% MMGCA returns the handle of the current axes if it exists.% If no current axes exists,MMGCA returns an empty handle.%% Note that the function GCA is diffent.It create a figure and an axes and returns the axes % handle if they do not exist.% Copyright (c) 1996 by Prentice-Hall,Inc.Ha=findobj(0, ‘Type’, ‘axes’ );if isempty(Ha)returnelseHa=get(get(0, ‘CurrentFigfure’ ), ‘CurrentAxes’ );end由于函数gco已经表现出当对象不存在时返回空矩阵的行为特性,就不需要函数mmgco 了。
Matlab笔记之十一---- 有关M文件编写

Matlab笔记之十一---- ◎#有关M文件编写#◎for循环结构:for x = array( commands )endwhile循环结构:while expression( commands )enda(1)=1a(2)=1i=2while a(i)<=10000a(i+1)=a(i-1)+a(i)i=i+1end;ia(i)单分支:if expression(commands)end双分支:if expression(commands1)else(commands2)end多分支:if expression1(commands)elseif expression2(commands)…………else(commands)end如果判决条件expression为一个空数组,MATLAB认为条件为假(false)。
表达式有时由多个逻辑子表达式组成的,MATLAB将尽可能少地检测这些子表达式的值。
例如,表达式为:(子表达式1 |子表达式2),当MATLAB 检测到子表达式1的值为真时,它就认为表达式为真,而不再对子表达式2进行检测。
又如,表达式为:(子表达式1 & 子表达式2),当MATLAB检测到子表达式1的值为假时,它就认为表达式值为假的,从而跳过该结构。
if指令判决和break指令的配合使用,可以强制终止for循环或while循环。
switch-case结构:switch ex ex为一标量或字符串。
case test1(commands 1) 当ex等于test1时,执行组命令1,然后跳出该结构。
case test2……(commands k) 当ex等于testk时,执行组命令k,然后跳出该结构。
otherwise otherwise指令可以不存在(commands) 表达式不等于前面所有检测值时,则执行该组命令。
end1 当遇到switch结构时,MATLAB将表达式的值依次和各个case指令后面的检测值进行比较。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
20.11 M文件例子精通MATLAB工具箱含有许多实用函数,它们可以验证本章的许多概念。
这些函数的基本部分已经在二维和三维图形这些章阐述过了。
有了前面对句柄图形的讨论,我们现在可以更彻底地讨论这些函数。
最简单的精通MATLAB工具箱的函数之一提出了一个共同的问题。
MATLAB函数gcf返回当前图形的句柄。
但是,它有一个副作用。
如果图形不存在,gcf就创建一个,并返回它的句柄。
如果想寻找一个图形是否存在于头一个位置,要是没有,又不得不创建,怎么办?函数mmgcf正好实现由其内容所描述的工作。
function HF=mmgcf%MMGCF Get Current Figure if it Exists.% MMGCF returns the handle of the current figure if it exists.% If no current figure exists,MMGCF returns an empty handle.%% Note that the function GCF is different.It creates a figure and returns its handle if it does not % exist.% Copyright (c) 1996 by Prentice-Hall,Inc.Hf=get(0, ‘Children’ ); % check for figure childrenif isempty(Hf)returnelseHf=get(0, ‘CurrentFigure’ );end函数mmgcf首先检查根对象的子对象的图形是否存在,如至少有一个图形对象时,根对象的‘CurrentFigure’属性就返回当前的图形。
函数mmgca为坐标轴对象执行同样的功能,如同在它的M文件内所描述的那样。
function Ha=mmgca%MMGCA Get Current Axes if it exists.% MMGCA returns the handle of the current axes if it exists.% If no current axes exists,MMGCA returns an empty handle.%% Note that the function GCA is diffent.It create a figure and an axes and returns the axes % handle if they do not exist.% Copyright (c) 1996 by Prentice-Hall,Inc.Ha=findobj(0, ‘Type’ , ‘axes’ );if isempty(Ha)returnelseHa=get(get(0, ‘CurrentFigfure’ ), ‘CurrentAxes’ );end由于函数gco已经表现出当对象不存在时返回空矩阵的行为特性,就不需要函数mmgco 了。
在精通MATLAB工具箱中的另一个函数是mmzap,在二维图形那一章里已作过介绍。
如下M文件中所示,它使用mmgcf作错误检查,与findobj和get一起删除一个指定的图形。
function mmzap(arg)%MMZAP Delete graphics object using mouse.% MMZAP waits for a mouse click on an object in a figure window and deletes the object.% MMZAP or MMZAP text erases text objects.% MMZAP axes erases axes objects.% MMZAP line erases line objects.% MMZAP surf erases surface objects.% MMZAP patch erases patch objects.%% Clicking on an object other than the selected type or striking a key on the keyboard aborts % the command.% Copyright (c) 1996 by Prentice-Hall,Inc.if nargin<1,arg= ‘text’ ;endHf=mmgcf;if isempty(Hf),error( ‘No Figure Available.’ ),endif length(findobj(0, ‘Type’ , ‘figure’ ))==1figure(Hf) % bring only figure forwordendkey=waitforbuttonpress; % pause untill user takes some actionif key % key on keyboard pressedreturn % take no actionelse % object selectedobject=gco % get object selected by buttonpresstype=get(object, ‘Type’ );if all(type(1:4)==arg(1:4)) % delete only if ‘Type’is correctdelete(object)endend在编写句柄图形函数的M文件时,函数mmzap描述了一种很有用的技术。
它利用函数waitforbuttonpress和gco的结合用鼠标来获取所选定对象的句柄。
waifortbuttonpress是一个MATLAB内置函数,它的功能是等待鼠标点击或按键。
它的帮助文本如下:» help waitforbuttonpressWAITFOR BUTTONPRESS Wait for key/buttonpress over figure.T= WAITFOR BUTTONPRESS stops program execution untill a key or mouse button is pressed over a figure window.Returns 0 when terminated by a mouse buttonpress,or 1when terminated by a keypress.Additional information about the terminating event isavailable from the current figure.See also GINPUT,GCF.帮助信息:WAITFORBUTTONPRESS等待一个鼠标/按钮对图形按下。
T=WAITFORBUTTONPRESS停止程序的执行,直到鼠标按钮或键在一个图形窗口按下。
当鼠标按钮按下时返回0;当键按下时返回1。
其它的结束事件的信息可从当前的图形中窗口获取。
参阅GINPUT和GCF。
鼠标按钮在鼠标指针指的图形上按下后,函数gco返回所点中对象的句柄。
然后,该句柄可用来操作选中的对象。
在精通MATLAB工具箱中,用这种简单的选择技术的函数还有mmline 和mmaxes。
其中,mmline的M文件描述如下:function mmline(arg1,arg2, arg3, arg4, arg5, arg6)%MMLINE Set Line Properties Using Mouse% MMLINE waites for a mouse click on a line then applies the desired properties to the% selected line.% Properties are given in parts,e.g.,MMLINE Name value...% Properties:% NAME VALUE{default}% color [Y m c r g b w k] or an RGB in quotes: ‘[r g b]’% style [- -- ; -.]% mark [o + . * X]% width points for linewidth {0.5}% size points for marker size {6}% zap (n.a.) delete selected line% Examples:% MMLINE color r width 2 sets color to red and width to 2 points% MMLINE mark + size 8 sets marker type to + and size to 8 points%% Clicking on an object other than a line,or striking a key on the keyboard aborts the % command.% Copyright (c) 1996 by Prentice-Hall,Inc.Hf=mmgcf;if isempty(Hf),error( ‘No Figure Avaiable.’ ),endif length(get(0, ‘Children’ ))==1figure(Hf) % bring only figure forwordendkey=waitforbuttonpress;if key % key on keyboard pressedreturnelse % object selectedHl=gcoif strcmp(get(Hl, ‘Type’ ), ‘line’ ) % line object selectedfor i=1:2:max(nargin-1,1)Name=eval(sprintf( ‘arg%.0f ‘ ,i),[]); get Name argumentif strcmp(Name, ‘zap’ )delete(Hl),returnendvalue=eval(sprintf( ‘arg%.0f ‘ ,i+1),[]); % get valueif strcmp(Name, ‘color’ )set(Hl, ‘Color’ ,value)elseif strcmp(Name, ‘style’ )set(Hl, ‘Linestyle’ ,value)elseif strcmp(Name, ‘mark’ )set(Hl, ‘Linestyle’ ,value)elseif strcmp(Name, ‘width’ )value=abs(eval(value))set(Hl, ‘LineWidth’ ,value)elseif strcmp(Name, ‘size’ )value=abs(eval(value))set(Hl, ‘MarkerSize’ ,value)elsedisp([ ‘Unknown Property Name: ‘ Name’])endendendend精通MATLAB工具箱中的函数mmpaper以简单的方式阐述了对纸张属性的使用。