matlab的函数类型.docx

上传人:b****8 文档编号:11403732 上传时间:2023-02-28 格式:DOCX 页数:32 大小:304.40KB
下载 相关 举报
matlab的函数类型.docx_第1页
第1页 / 共32页
matlab的函数类型.docx_第2页
第2页 / 共32页
matlab的函数类型.docx_第3页
第3页 / 共32页
matlab的函数类型.docx_第4页
第4页 / 共32页
matlab的函数类型.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

matlab的函数类型.docx

《matlab的函数类型.docx》由会员分享,可在线阅读,更多相关《matlab的函数类型.docx(32页珍藏版)》请在冰豆网上搜索。

matlab的函数类型.docx

matlab的函数类型

matlab的函数类型

作者:

XLFinance   来源:

XLFinance     打印  邮寄  返回

匿名函数

匿名函数的作用在于可以快速生成简单的函数,而不需创建m文件,匿名函数通常在命令区或函数、脚本中运行时创建。

匿名函数的生成语法是fhandle=@(arglist)expr,其中expr代表函数体,arglist是逗号分隔的参数列表。

符号@代表创建函数句柄,匿名函数必须使用此符号,匿名函数的执行语法是:

fhandle(arg1,arg2,...,argN),fhandle为匿名函数句柄名称。

简单的匿名函数示例:

sqr=@(x)x.^2,该匿名函数计算给定参数x的平方值,执行可以使用a=sqr(5)形式。

再如:

sumAxBy=@(x,y)(A*x+B*y)(使用多个参数),t=@()datestr(now)(无参数),A={@(x)x.^2,@(y)y+10,@(x,y)x.^2+y+10}(匿名函数数组)。

多重匿名函数

等同于:

g=@(c)(quad(@(x)(x.^2+c*x+1),0,1));

其中@(x)(x.^2+c*x+1)为第一重匿名函数,而后作为参数继续传递给积分函数。

再如求解函数a*exp(x)+b*x=0,则使用在m函数文件调用匿名函数:

functionf0=test(a,b,x0)

f0=fsolve(@(x)(a*exp(x)+b*x),x0);

主函数

任意m文件中的第一个函数称呼为主函数,主函数之后可能附随多个子函数。

主函数是在命令区或其它函数中可调用的唯一一个该m文件中所定义的函数。

子函数

一个m文件中可能包含多个函数。

主函数之外的函数都称为子函数,这些子函数只能为主函数或同一m文件中的其它子函数可见。

例如:

function[avg,med]=newstats(u)%主函数

n=length(u);

avg=mean(u,n);

med=median(u,n);

functiona=mean(v,n)%子函数1

a=sum(v)/n;

functionm=median(v,n)%子函数2

w=sort(v);

ifrem(n,2)==1

m=w((n+1)/2);

else

m=(w(n/2)+w(n/2+1))/2;

end

而即便在相同m文件中,子函数内定义的变量也不可为其它子函数所使用,除非定义为全局或作为参数传递。

私有函数

私有函数仅对满足条件的特定函数开放。

私有函数存放于名为private的子目录下,访问条件是:

存放于该private子目录的上一层父目录中的m文件函数

从存放于该private子目录上一层父目录中的m文件函数中发起调用的m脚本

嵌套函数

任一m函数体内所定义的函数称为外部函数的嵌套函数,matlab支持多重嵌套函数,即在嵌套函数内部继续定义下一层的嵌套函数,形如:

functionx=A(p1,p2)

functiony=B(p3)

...

end

...

End

Matlab函数体通常不需end结束标记,但如包含嵌套函数,则该m文件内的所有函数(主函数和子函数),不论是否包含嵌套函数都需显式end标记。

嵌套函数的调用规则:

1)父级函数可调用下一层嵌套函数;2)相同父级的同级嵌套函数可相互调用;3)处于低层的嵌套函数可调用任意父级函数。

嵌套函数中的局部变量在其任一层内部嵌套函数或外部父级函数中都可访问,例如下面的两个函数都是合法的:

而下例函数中的参数调用是不合法的,由于变量x分别处于两个独立的工作区:

嵌套函数的输出变量不为外部函数可见。

matlab中的数据导入和导出

作者:

XLFinance   来源:

XLFinance     打印  邮寄  返回

Matlab提供了从磁盘文件或剪贴簿转载数据至工作区(数据导入)和将工作区变量存  入磁盘文件(数据导出)的多种途径。

最简单的办法是使用界面导入向导,打开文件菜单中的导入数据而后按提示操作。

Matlab支持的主要数据文件类型和对应函数如下:

导入文本文件

文本文件需要具备统一的行列模式,使用分隔符作为数据项间隔,这些分隔符包括空格、逗号、tab、分号或其它。

数据文件可能附带标题行和行列头标签。

数值数据

对于数值数据可以直接使用load函数装载,例如my_data.txt中数据如下:

12345

678910

命令A=load('my_data.txt')装载该文本文件数据。

如果数值数据使用其它分隔符,可以使用dlmread读入,假设my_data.txt中数据如下:

7.2;8.5;6.2;6.6

5.4;9.2;8.1;7.2

命令A=dlmread('my_data.txt',';')读入该数据。

包含行列标签的数值数据

例如:

Grade1Grade2Grade3

78.855.945.9

99.566.878.0

89.577.056.7

fid=fopen('grades.dat','r');

grades=textscan(fid,'%f%f%f',3,'headerlines',1);

fclose(fid);

包含字符和数值的混合数据

使用textread函数读入。

导出文本文件

save函数

A=[1234;5678];

savemy_data.outA–ASCII

dlmwrite函数

dlmwrite('my_data.out',A,';')

MS-Excel电子表格文件

xlsinfo获得文件信息

使用命令[type,sheets]=xlsfinfo(filename)返回文件类型type和工作表信息。

如:

[type,sheets]=xlsfinfo('tempdata.xls')

Xlswrite导出数据

d={'Time','Temp';1298;1399;1497}

命令xlswrite('tempdata.xls',d,'Temperatures','E1')将单元格数组d的数据写出至tempdata.xls文件,新建工作表'Temperatures',从该工作表的E1单元格开始写入。

Xlsread读入数据

ndata=xlsread('tempdata.xls','Temperatures')

[ndata,headertext]=xlsread('tempdata.xls','Temperatures')

matlab图形用户界面简介

作者:

XLFinance   来源:

XLFinance     打印  邮寄  返回

通过GUIDE创建图形用户界面

GUIDE是Matlab提供的图形用户界面开发环境,提供了一系列用于创建图形用户界面的工具,从而简化界面布局和编程工作。

GUIDE的空白界面如下:

GUIDE提供众多个人偏好和选项设定,从文件菜单中的偏好可进入设定窗口:

GUIDE中的界面设计直接通过拖拉和拖放操作完成,如界面尺寸、控件等。

所有控件有对应的属性,通过右键菜单中的“PropertyInspector”可进入属性操作,所有控件有唯一的tag,tag在事件代码中作为具体控件的标识。

GUIDE提供了控件排列、tab设置、菜单栏设计等功能,在r2006a版本中,GUIDE不提供工具条设计功能,但是可以通过程序创建工具栏。

通过GUIDE设计界面并编写对应的程序代码后保存生成.fig(界面)和.m(代码)文件。

GUI编程:

GUI回调(Callback)

回调代码和具体的GUI控件或图表相关,用于控制GUI行为,如对点击、菜单选择、拖放等事件的响应,也即所谓事件驱动编程。

不同的GUI控件可能会有不同的回调类型,定义为控件属性。

GUI文件

GUI文件包括.fig和.m文件,二者存放于相同目录下。

主函数的名称和m文件的名称相同,主函数之外的每个回调都是子函数。

GUIDE在生成m文件时,自动包括每个控件常用的回调代码模板,初始化代码,opening函数,输出函数等。

在回调和控件之间建立关联

GUI通常包含多个控件,GUIDE使用控件的回调属性和该控件的回调关联。

GUIDE将每个控件最常用的回调属性的值设定为自动即%automatic,在保存文件之后,该值将被替换为调用序列的Matlab表达式,包括控件的tag属性和回调属性的名称,例如:

其中,simple_gui是GUIm文件的名称,也是其主函数的名称。

其余参数产生pushbutton1_Callback的输入参数,gcbo返回回调对象句柄(即pushbutton1),guidata(gcbo)返回该GUI的句柄结构。

回调语法

GUIDE生成回调语法和参数的模板如下:

%---Executesonbuttonpressinpushbutton1.

functionpushbutton1_Callback(hObject,eventdata,handles)%#ok

%hObjecthandletopushbutton1(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

...

其中,第一个注释行描述触发此回调过程执行的时间,而后是函数定义行和输入参数描述。

在最后注释行之后可以开始添加代码。

回调函数的命名是自动生成的如pushbutton1_Callback,变更名称可以通过改变控件的tag属性或callback属性实现。

句柄结构

GUIDE创建一个包含所有控件句柄的句柄结构,并使用控件的tag属性作为句柄结构元素的命名。

句柄结构数据作为参数传递给所有回调函数,共享属性值和应用数据。

初始化回调

GUIDE在m文件中自动生成两个回调函数:

初始化函数和输出函数。

初始化函数是GUIm文件第一个执行的回调函数,在界面可见之前和控件创建之后,因此初始化函数可以用于创建数据或从外部读入数据。

初始化函数的代码模板如下:

%---Executesjustbeforemyguiismadevisible.

functionmygui_OpeningFcn(hObject,eventdata,handles,varargin)

%Thisfunctionhasnooutputargs,seeOutputFcn.

%hObjecthandletofigure

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

%varargincommandlineargumentstomygui(seeVARARGIN)

%Choosedefaultcommandlineoutputformygui

handles.output=hObject;

%Updatehandlesstructure

guidata(hObject,handles);

%UIWAITmakesmyguiwaitforuserresponse(seeUIRESUME)

%uiwait(handles.mygui);

函数的前三个参数和之前的描述相同,第4个参数允许从命令行向初始化函数传递参数,初始化函数会将此参数添加至句柄结构,从而为所有回调进程可见。

例如在命令行中输入simple_gui('Position',[71.844.974.819.7]),则会在指定的位置打开用户界面,因为position是一个有效的图形属性,而如输入参数不是有效的图形属性,则需在初始化函数中添加代码以正确使用该传入参数。

模板中handles.output=hObject向句柄结构中添加新的元素,并赋值为GUI句柄本身hObject。

代码guidata(hObject,handles)保存句柄结构,对于句柄结构的任何变动都需使用此函数执行保存操作。

输出函数

输出函数的用途是将执行结果返回至命令行,在初始化函数释放控制和命令行获得控制之前执行。

默认情况下,输出函数包含一个单元格数组输出参数,为句柄结构中的output元素。

管理应用数据

Matlab提供三种方式可以用于在GUI环境下管理应用定义数据:

GUI数据、应用数据和用户数据属性。

GUI数据

GUI数据使用guidata函数管理。

GUI数据只能存储一个变量,因此通常定义为结构从而可添加字段。

GUIDE自动使用guidata函数创建和维护handles结构,该结构包含GUI的所有控件句柄,并作为参数自动传递给所有回调函数。

在使用GUIDE创建的用户界面中,用户不能使用guidata函数管理任何除了handles结构之外的变量,否则将会重写handles结构并导致GUI无法工作。

如果希望使用GUI数据在回调函数中共享应用定义数据,必须将数据保存在handles结构的字段当中。

例如:

handles.number_errors=0;

该命令创建一个名为number_errors的字段并赋值为0,而后再使用guidata(hObject,handles)保存结构。

应用数据

应用数据方法可以创建特定对象的用户自定义属性。

其函数包括:

setappdata(设定数据),getappdata(访问数据),isappdata(判断存在与否)和rmappdata(删除)。

在GUIDE中创建应用数据的示例如下:

functionmygui_OpeningFcn(hObject,eventdata,handles,varargin)

matrices.rand_35=randn(35);

setappdata(hObject,'mydata',matrices);

上面的代码创建正态分布随机矩阵并创建应用数据名称mydata存储该数据,由于在初始化中执行,该应用数据和GUIfigure相关。

现在假定需要从一个按钮对象pushbutton1的回调中访问并修改数据:

获得数据,注意mydata和figure1(GUI界面的tag)相关:

functionmygui_pushbutton1(hObject,eventdata,handles)

matrices=getappdata(handles.figure1,'mydata');

添加新字段

matrices.randn_50=randn(50);

保存数据修改

setappdata(hObject,'mydata',matrices);

用户数据

所有的GUI控件包括界面都有一个userdata属性。

例如下面的代码创建和文本框控件关联的用户输入数据并在按钮空间的回调函数中访问:

functionmygui_edittext1(hObject,eventdata,handles)

mystring=get(hObject,'String');

set(hObject,'UserData',mystring);

functionmygui_pushbutton1(hObject,eventdata,handles)

string=get(handles.edittext1,'UserData');

m文件编程和函数参数

作者:

XLFinance   来源:

XLFinance     打印  邮寄  返回

M文件包括脚本和函数。

脚本不接受输入参数,也不返回输出参数,一般用于多步骤的自动化执行。

M文件的基本组成包括:

函数定义行:

定义函数名称、输入和输出参数的数量和顺序

H1行:

函数帮助概述

帮助文本:

详细帮助信息

函数(脚本)体

注释

例如:

函数参数

检查函数传入参数数量:

函数nargin和nargout可以用于确定函数传入和输出参数的数量。

functionc=testarg1(a,b)

if(nargin==1)

c=a.^2;

elseif(nargin==2)

c=a+b;

end

 

传递可变数量的参数:

函数varargin和varargout可以用于传递任意数量传入和输出参数。

对于输入函数varargin,Matlab将所有参数转换为单元格数组。

例如:

functiontestvar(varargin)

fork=1:

length(varargin)

x(k)=varargin{k}

(1);

y(k)=varargin{k}

(2);

end

xmin=min(0,min(x));

ymin=min(0,min(y));

axis([xminfix(max(x))+3yminfix(max(y))+3])

plot(x,y)

上面的函数不限定输入参数数量,而是在代码中获取此信息,函数中使用varargin{k}(i)访问输入参数数据,花括号表明该数组为单元格,因此{k}用于访问第k个单元格,而(i)访问该单元格中的第i个元素。

保存上面的函数后在命令区内可以输入:

testvar([23],[15],[48],[65],[42],[23])

testvar([-10],[3-5],[42],[11])

对于输出函数,需要在函数代码中执行此转换,例如:

function[varargout]=testvar2(arrayin)

fork=1:

nargout

varargout{k}=arrayin(k,:

);%Cellarrayassignment

end

保存函数后在命令区内输入:

a=[12;34;56;78;90];

[p1,p2,p3,p4,p5]=testvar2(a)

可变数量的输入或输出参数可以作为参数列表中的成员,例如:

function[out1,out2]=example1(a,b,varargin)

function[i,j,varargout]=example2(x1,y1,x2,y2,flag)

调用函数

在命令行或其它m文件中调用m函数文件时,matlab将函数解析成为代码并写入内存,这些伪代码一直驻留直至被clear函数清除或matlab退出。

在多个函数有相同名称情况下,matlab根据函数效力范围和优先次序决定所调用的函数。

m程序基本部件和程序控制

作者:

XLFinance   来源:

XLFinance     打印  邮寄  返回

变量和命名

变量分为局部变量、全局变量以及只在M文件函数中存在的持续变量。

局部变量无需特别定义,全局变量和持续变量分别使用global和persistent定义。

函数namelengthmax返回变量命名的最长字符数。

函数isvarname用于校验变量取名是否合法。

应避免使用函数名作为变量命名,否则将无法使用该函数直至使用命令clear清除。

不同的变量有不同的范围和寿命,base工作区内的变量和m脚本文件共享,并在结束matlab会话之前保存状态。

M函数文件中的变量单独存在,和base工作区及其它工作区变量隔离,在函数执行即结束,除非被声明为全局。

Matlab保留了部分关键字,不用于变量命名,iskeyword函数可以查看这些关键字信息。

运算符和表达式

运算符包括算术运算、关系运算符和逻辑运算符。

关系运算符:

==等于,~=不等于

逻辑运算符

&    对于数组中的每个元素位置均为真(非0)时返回1,否则返回0

|     对于数组中的每个元素位置至少有一个为真(非0)时返回1,否则返回0

~     非

Xor     对于数组中的每个元素位置只有一个为真(非0)时返回1,否则返回0

Any     对于向量中每一元素至少有一个为真时返回1

All     对于向量中每一元素均为真时返回1

因此,

A&B等同于and(A,B)

A|B等同于or(A,B)

~A 等同于not(A)

Eval函数

 

函数eval将字符串作为matlab命令执行,表达式为eval('string')。

例如eval('t=clock')返回当前时间的日期向量。

再如:

forn=1:

10

eval(['P',int2str(n),'=n.^2'])

end

该循环执行n=1至10时p=n.^2的值。

feval函数

 

函数feval用于执行函数,第一个参数必须为函数句柄或字符串形式的函数名称。

例如:

fun={@sin;@cos;@log};

k=input('Choosefunctionnumber:

');

x=input('Entervalue:

');

feval(fun{k},x)

程序控制

条件控制:

if,else,andelseif

iflogical_expression

statements

end

 

ifrem(a,2)==0

disp('aiseven')

b=a/2;

end

switch,case,otherwise

switchexpression(scalarorstring)

casevalue1

statements%在表达式为value1时执行

casevalue2

statements%在表达式为value2时执行

.

otherwise

statements

end

switchvar

case1

disp('1')

case{2,3,4}

disp('2or3or4')

case5

disp('5')

otherwise

disp('somethingelse')

end

循环控制

For循环

forindex=start:

increment:

end

statements

end

form=1:

5

forn=1:

100

A(m,

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

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

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

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