首页 > 编程知识 正文

matlab定义函数变量,matlab带参数的函数

时间:2023-05-05 15:39:39 阅读:135840 作者:349

函数调用

可以在一个m文件中定义多个函数,但文件名必须与第一个函数(主函数)匹配。

此文件中的其他函数是此文件的专用函数,不能从外部访问。 可以通过参数调用的方法访问。 后述。

例如,如果以程序方式创建fig,则会生成与以下示例类似的m文件:

functionvarargout=febirdfun (vararg in )

gui_Singleton=1;

GUI_state=struct(GUI_name ),mfilename,

' gui_Singleton ',gui_Singleton,

' gui_OpeningFcn ',@febirdfun_OpeningFcn,

' gui_OutputFcn ',@febirdfun_OutputFcn,

' gui_LayoutFcn ',[],

' gui_Callback ',[];

if nargin

ischar(varargin{1} )

GUI _ state.GUI _ callback=str2func (vararg in {1} );

结束

if nargout

[ vararg out { 13360 NAR gout } ]=GUI _ main fcn (GUI _ state,varargin{:} );

else

GUI_mainfcn(GUI_state,varargin{:} );

结束

让我们来分析一下这个主函数。 首先,gui_State是一个结构,指定figure打开函数和输出函数

开始

如果gui_CallBack为空且输入参数的数目不为0,则下一个输入的第一个参数将传递给gui_State.callback。

在接下来传递的gui_mainfcn函数中进行处理。 gui_mainfcn基于传递给gui_State的参数

确定是运行函数,还是打开fig文件以运行OpeningFcn和OutputFcn。

如果gui_Callback为空,请运行打开主窗口的fig文件。 否则,请调用子函数

该函数的作用如下。

1 .输入无参数时,可以打开fig文件并初始化控件

2 .指定要调用的函数名称时,可以将其用作其他控件callback。 (实际上是调用同一文件中的子函数。 )

例如,某个控件的callback中写道: ((febrdfun为主函数) )。

ebird fun (' @ push _ button _ callback ',gcbf,[] ) )

的调用中,可以调用文件中的子函数。

当然,也可以将其他文件中的函数用作callback,但这样做会使数据传输变得麻烦。

让我们来看看figure Openning Function

%==================================即%=======

function main _ opening fcn (h object,eventdata,handles,

varargin )

handles.output=hObject;

%通常,您可以在此定义自己的数据结构

s=struct(P1 ),v1 .

' P2 ',v2;

handles.MyStruct=s;

更新handles数据结构非常重要!

Guidata(Hobject,handles );

%==================================即%=======

functionvarargout=main _ output fcn (h object,eventdata,

手动)

varargout{1}=handles.output;

此函数是输出返回值的定义

注意,在:矩阵中,没有与函数相对应的end,但是随着版本的更新要求end。

数据传输

在matlab GUI程序中传递值的两种常用方法:

1 .利用主函数的handles数据结构传值

例如,图像窗口句柄具有对象handles,通过该对象可以定义自己的数据结构

子Callback函数可以通过handles传递数据。

functionsliderbar1_ callback (h object,eventdata,handles ) )。

%% eg1

v1=get(hobject,' value ' );

obj=handles.Text1 %直接将Tag定位到Text1的控件

set(obj,' value ',v1 );

%% eg2

handles.MyStruct.P1=v1; 更改handles的数据

Guidata(Hobject,handles ); 更新硬件! 很重要

结束

2 .利用控件的UserData传递值

每个控件通常都有自己的自定义域,userData。 您可以定义这样的域以存储自己的数据。 例如timer的

在TimerFcn中

T1=timer () timerfcn )、{@Timer1Fcn}、ErrorFcn )、@Timer1ErrorFcn}、Period )、1.0、ExecutionMode )、fix ion mon mode

t1.UserData=handles.MyStruct;

在这里,Timer1Fcn的调用看起来没有传递参数,但实际上此函数的定义至少需要两个参数

函数时间R1 fcn (obj,eventata ) )。

obj.UserData=XXXXX; %可以这样共享数据

结束

当然,在定义了Timer时,可以这样传递参数。 当然,这样也可以给你一个值。

T1=timer () timerfcn )、) {@Timer1Fcn,Handles )、(ErrorFcn )、) {@Timer1ErroFcnr,Handles )、) Period、1.

以上内容来源于百度空间.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。