精华内容
下载资源
问答
  • matlab函数定义详解

    万次阅读 2014-06-28 16:23:49
    但凡经过编程熏陶的人,在学习其他一门陌生... 在数学中,定义一个函数,我们需要明确定义域、值域、表达式。在matlab中,则对应为输入参数,输出参数,函数体。实际上,matlab支持多输入多输出,函数的返回值可以为一

    但凡经过编程熏陶的人,在学习其他一门陌生的编程语言时,往往会与已经学过的语言相比较。而语法的比较往往是情不自禁的。在matlab中,函数的概念或许没有其他语言那么广泛,特性没有那么丰富,但基本的功能都已具备。

             在数学中,定义一个函数,我们需要明确定义域、值域、表达式。在matlab中,则对应为输入参数,输出参数,函数体。实际上,matlab支持多输入多输出,函数的返回值可以为一个向量,矩阵,或者多个元素。为了让函数可以调用,需要对函数进行命名。

             即包含:

    • 输入参数
    • 输出参数
    • 函数名
    • 函数体

             我们以求两个数的最小公倍数,最大公约数为例,来演示matlab的函数的定义。打开matl,选择file->new->M-file


    在弹出的窗口中,输入以下代码


    展开全文
  • 通过定义 MATLAB 函数重用 MATLAB 代码Stateflow® 图中的 MATLAB® 函数是一个图形元素,您可以用它来编写易于通过调用内置 MATLAB 函数来实现的算法。典型应用包括:面向矩阵的计算数据分析和可视化在编写使用 ...

    通过定义 MATLAB 函数重用 MATLAB 代码

    Stateflow® 图中的 MATLAB® 函数是一个图形元素,您可以用它来编写易于通过调用内置 MATLAB 函数来实现的算法。典型应用包括:

    面向矩阵的计算

    数据分析和可视化

    在编写使用 MATLAB(而不是图形化 Stateflow 构造)更容易表达的算法代码时,此类型的函数很有用。MATLAB 函数还能够提供了一些优化选项,可为嵌入式应用程序生成高效、生产级的 C 代码。

    MATLAB 函数可以驻留在 Stateflow 图、状态或子图的任意位置。函数的位置确定可以调用函数的状态和转移的集合。

    如果想在一个状态(或子图)及其子状态内调用函数,请将您的 MATLAB 函数置于该状态或子图中。该函数将覆盖该状态或子图的父级中同名的任何其他函数。

    如果想要在图的任意位置调用函数,需将 MATLAB 函数置于与图同一层次的位置。

    如果要从模型中的任何图调用该函数,请将您的 MATLAB 函数放在图级别,并启用图级别函数的导出。有关详细信息,请参阅Export Stateflow Functions for Reuse。

    注意

    MATLAB 函数可以访问在 Stateflow 层次结构中位于其上方的图和状态数据。

    例如,以下 MATLAB 函数的名称为 stdevstats。它接受参数 vals,并返回输出值 stdevout。

    0074f9947744f480ed0c75521b6bf966.png

    为了计算 vals 中各值的标准差,该函数使用以下代码。

    function stdevout = stdevstats(vals)

    %#codegen

    % Calculates the standard deviation for vals

    len = length(vals);

    stdevout = sqrt(sum(((vals-avg(vals,len)).^2))/len);

    function mean = avg(array,size)

    mean = sum(array)/size;在图中定义 MATLAB 函数

    在对象选项板中,点击 MATLAB 函数图标 990cd96f78a84200590307c9b9ff42b5.png。将指针移到图中要放置新的 MATLAB 函数的位置。

    输入函数的签名标签。

    函数签名标签指定函数的名称及其参数和返回值的形式名称。签名标签采用以下语法:

    [return_val1,return_val2,...] = function_name(arg1,arg2,...)您可以指定多个返回值和多个输入参数。每个返回值和输入参数可以是一个标量、向量或值的矩阵。对于只有一个返回值的函数,忽略签名标签中的方括号。

    您可以对参数和返回值使用相同的变量名称。例如,使用以下签名标签的函数将变量 y1 和 y2 同时用作输入和输出:

    [y1,y2,y3] = f(y1,u,y2)如果将此函数导出为 C 代码,y1 和 y2 将通过引用(作为指针)传递,u 通过值传递。通过引用传递输入可减少生成的代码复制中间数据的次数,从而产生更优的代码。

    注意

    不要将图符号的名称用作函数参数或返回值。例如,如果 x 或 y 是图数据,用签名 y = f(x) 定义函数会导致运行时错误。

    要对该函数进行编程,请双击函数框打开 MATLAB 编辑器。

    在 MATLAB 编辑器中,输入实现您的函数的 MATLAB 代码。有关详细信息,请参阅 Program a MATLAB Function in a Chart。

    在 Model Explorer 中,展开图对象并选择 MATLAB 函数。函数签名中的参数和返回值显示为属于您的函数的数据项。参数的作用域是 Input。返回值的作用域是 Output。

    在每个参数和返回值的 Data 属性对话框中,指定数据属性,如设置数据属性中所述。

    创建您的函数所需的其他数据项。有关详细信息,请参阅通过 Model Explorer 添加数据。

    您的函数可以访问它自己的数据或属于父状态或图的数据。函数中的数据项可以有以下作用域之一:

    Constant - 常量数据在所有函数调用中都保持其初始值。

    Parameter - 参数数据在所有函数调用中都保持其初始值。

    在 MATLAB 函数中,不需要显式创建本地或临时函数数据。如果您使用未定义的变量,Stateflow 会创建一个临时变量,该变量可用于函数的其余部分。要存储在各次函数调用之间保持不变的值,请使用关键字 persistent。在状态和转移中调用 MATLAB 函数

    您可以基于任何状态或任何转移的动作来调用 MATLAB 函数。您也可以从其他函数调用 MATLAB 函数。如果导出 MATLAB 函数,将可以从模型的任何 Stateflow 图中调用它。

    要调用 MATLAB 函数,请使用函数签名,并在函数签名中为每个形参包含一个对应的实参值。如果实参和形参的数据类型不同,函数会将实参转换为形参的类型。指定 MATLAB 函数的属性

    您可以通过 MATLAB 函数的属性对话框为其设置常规属性。要打开函数属性对话框,请右键点击 MATLAB 函数框,然后从上下文菜单中选择 Properties。Name

    函数名称。点击函数名称链接以在 MATLAB 编辑器中打开您的函数。Function Inline Option

    控制函数在生成的代码中的内联:

    “Auto” - 确定是否根据内部计算内联函数。

    “Inline” - 如果不将函数导出到其他图并且它不是递归的一部分,则内联函数。(如果函数直接调用自身或通过另一个函数调用间接调用自身,则存在递归。)

    “Function” - 不内联函数。Label

    函数的签名标签。函数签名标签指定函数的名称及其参数和返回值的形式名称。Saturate on Integer OverflowMATLAB Function fimath

    定义 MATLAB 函数的 fimath 属性。指定的 fimath 属性与在 MATLAB 函数中构造的所有 fi 和 fimath 对象相关联。选择以下选项之一:

    Same as MATLAB - 该函数使用与当前全局 fimath 相同的 fimath 属性。编辑框变暗,并以只读形式显示当前全局 fimath。有关全局 fimath 和 fimath 对象的详细信息,请参阅 Fixed-Point Designer™ 文档。

    Specify Other - 通过以下方法之一指定您自己的 fimath 对象:

    在编辑框内构造 fimath 对象。

    在 MATLAB 或模型工作区中构造 fimath 对象,并在编辑框中输入其变量名称。说明

    函数说明。您可以为层次结构中的函数输入简要说明。Document Link

    函数的在线文档链接。您可以输入 Web URL 地址或者能以合适的在线格式(例如 HTML 文件或 MATLAB 命令行窗口中的文本)显示文档的 MATLAB 命令。点击 Document link 超链接时,Stateflow 会显示该文档。

    相关主题

    展开全文
  • 定义:一个函数调用它自身成为函数的递归调用。递归是一个大型的问题层层转化为一个与原问题相似的规模较小的问题来求解。 优点:大大减少代码量 缺点:加大存储空间和执行时间的开销 递归调用的两种格式 直接调用...

    函数的递归调用

    1. 定义:一个函数调用它自身成为函数的递归调用。递归是一个大型的问题层层转化为一个与原问题相似的规模较小的问题来求解。
    2. 优点:大大减少代码量
    3. 缺点:加大存储空间和执行时间的开销

    递归调用的两种格式

    • 直接调用:
      在这里插入图片描述
    • 间接递归调用:
      在这里插入图片描述

    函数参数的可调性

    1. Matlab的两个预定义变量
    • nargin:调用函数时输入实参的个数
    • nargout:输出实参的个数
    function fout = test(a, b, c)
    if nargin == 1
        fout = a;
    elseif nargin == 2
        fout = a +b;
    elseif nargin == 3
        fout = (a + b + c)/2;
    end
    
    

    函数参量的作用域

    1. 局部变量:在程序中只在特定过程或函数中可以访问的变量。
    2. 全局变量
    • 作用域为整个Matlab工作空间,也就是全程有效,所有的函数都可以对它进行存取和修改。
    • 定义格式:
    global 变量名
    
    • 必须在函数文件和命令行中同时定义全局变量
      在这里插入图片描述
    展开全文
  • http://www.cnblogs.com/duanp/archive/2008/11/29/Matlab-GUIDE.html函数调用在一个m文件中,可以定义多个函数,但是文件名一定要与第一个函数(主函数)一致,该文件中其他函数则为本文件的私有函数,外部不可访问...

     

    http://www.cnblogs.com/duanp/archive/2008/11/29/Matlab-GUIDE.html
    函数调用


    在一个m文件中,可以定义多个函数,但是文件名一定要与第一个函数(主函数)一致,
    该文件中其他函数则为本文件的私有函数,外部不可访问(可以通过参数调用的方法访问,下面会描述)。

    例如在一个程序中,创建一个fig后,会生成这样一个m文件:

    function varargout =febirdfun(varargin)
    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(varargin{1});
    end

    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end

    解析 一下这个主函数:首先 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为主函数)
        febirdfun("@push_button_Callback",gcbf,[])
      这样的调用就可以调用文件里面的子函数。

    当然也可以使用其他文件里面的函数作为callback,不过那样的话,数据传递会麻烦一些。


    下面看figure Openning Function


    %================================

    function Main_OpeningFcn(hObject, eventdata, handles, varargin)

    handles.output = hObject;
    % 通常在这里面定义自己的数据结构例如

    s=struct("P1",v1...
                 "P2",v2);
    handles.MyStruct=s;
    % 更新handles数据结构  非常重要!!
    guidata(hObject, handles);

    %================================
    function varargout = Main_OutputFcn(hObject, eventdata, handles)
    varargout{1} = handles.output;

    这个函数是输出返回值的定义

    注意:  matlab 中,function 对应的 end 可以没有,但是随着版本的更新,end将会被要求。


    六:数据传递



    在matlab GUI程序中进行值传递我经常使用的两种方法:



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



    例如在某一个图像窗口句柄 中有一个对象 handles(可以定义自己的数据结构)

    那么在一个子Callback函数中,可以通过handles传递数据:

    function  sliderbar1_Callback(hObject,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); %更新 handles !!重要


    end




    2.利用控件的 UserData 来传值


     
    每一个控件一般都有一个属于自己的自定义域,userData,你可以定义这样一个域用来保存自己的数据,例如在定义 timer 的 TimerFcn中

    t1=timer('TimerFcn',{@Timer1Fcn},'ErrorFcn',@Timer1ErrorFcn},'Period',1.0,'ExecutionMode','fixedrate');

    t1.Userfata=handles.MyStruct;

    这里 Timer1Fcn的调用看似没有传入任何参数,实际上此函数的定义一定要有至少两个参数

    function Timer1Fcn(obj,eventata)

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

    当然Timer定义的时候允许这样传递一个参数,当然这样也可以进行传值.

    t1=timer('TimerFcn',{@Timer1Fcn,handles},'ErrorFcn',{@Timer1ErroFcnr,handles},'Period',1.0,'ExecutionMode','fixedrate');

     

    感谢:http://blog.sina.com.cn/s/blog_45b486b80100gs1p.html

    转载于:https://www.cnblogs.com/realkate1/p/4727247.html

    展开全文
  • 定义函数 今天写代码,有这么一个小需求,把下图这种函数存起来,然后需要的时候直接f(x)调用即可。 syms t f(t) = 6.8325/31.2834*(t/31.2834).^5.8325+0.0355; f(1) 输出如下: ...
  • 函数调用在一个m文件中,可以定义多个函数,但是文件名一定要与第一个函数(主函数)一致,该文件中其他函数则为本文件的私有函数,外部不可访问(可以通过参数调用的方法访问,下面会描述)。例如在一个程序中,创建一...
  • Matlab函数嵌套

    2019-12-01 16:41:25
    Matlab函数嵌套0.引言1.solved 0.引言 写MATLAB代码时,在一个函数的实现中,需要调用另一个小的函数,由于只有几行,所以就没有单独写一个而是嵌入在当前函数中.结果最后在矩阵拼接的时候一直报错矩阵维数不对,...
  • matlab调用函数 调用max函数: A=[1 2 3]; max(A) % ans = 3 A=[1 6 3]; B=[1 2 5 ]; max(A,B) %ans = 1 6 5 通过将函数赋值给变量,返回该函数的输出 maxA=max(A) %maxA =6 如果存在多个输出参数,请将其...
  • f=@(x)acos(x) 表示 f 为函数句柄,@是定义句柄的运算符。f=@(x)acos(x) 相当于建立了一个函数文件:% f.mfunction y=f(x)y=acos(x);... 匿名函数它是matlab定义的一种函数形式,出现在matlab中,匿名函数不以...
  • scipy:fmin函数最小值和fsolve方程求解1.0 马玉华 2020.5.14 """ from scipy import optimize #函数最小值求解 def f(p): x,y = p z = (1-x)**2+100*(y-x**2)**2 return z minimun = optimize.fmin(f,[0,1]) #...
  • matlab函数大全

    千次阅读 2017-02-16 14:06:11
    MATLAB学习笔记——函数使用
  • 目录一、建立文件二、函数调用二、函数句柄三、匿名函数想查找相关内容也可在页面按ctrl+F搜索文字一、建立文件新建脚本,保存后可运行,后缀为.m 二、函数调用创建ffib.m文件,编写求Fibonacci数列的函数function...
  • 类成员函数定义与常规函数类似,除特殊情况外,它们有一个包含返回类型(可能为 void)、函数名和形参列表(可能为空)的函数头。执行函数动作的语句包含在一对大括号中,跟在函数头后面。我们在《类对象的创建和使用》...
  • MATLAB函数文件的使用

    千次阅读 2020-07-07 11:12:19
    MATLAB函数文件的使用 目录MATLAB函数文件的使用1.函数文件基本结构:(1)文件名(2)注释说明部分(3)函数体语句2.函数的调用2.1函数的递归调用3.函数参数的可调性4.局部变量和全局变量4.1局部变量4.2全局变量 1....
  • matlab函数总结

    千次阅读 2018-07-28 10:38:58
    ndims(A)返回A的维数 size(A)返回A各个维的最大元素个数 length(A)返回max(size(A)) [m,n]=size(A)如果A是二维数组,返回行数和列数 nnz(A)返回A中非0元素的...MATLAB的取整函数:fix(x), floor(x) :,ceil(x) , ro...
  • matlab函数

    千次阅读 2012-05-19 11:43:43
    1.feedback是matlab里专门用来求线性时不变系统的前向传递函数的,建立系统的闭环传递函数,不能用来做变名,不能赋值 2.tf()建立开环传递函数 A a abs 绝对值, 模 acos 反余弦 acosh 反双曲余弦 acot 反余...
  • Matlab创建文件、function文件和函数调用

    万次阅读 多人点赞 2019-07-08 15:38:08
    二、函数调用 二、函数句柄 三、匿名函数 想查找相关内容也可在页面按ctrl+F搜索文字 一、建立文件 新建脚本,保存后可运行,后缀为.m 二、函数调用 创建ffib.m文件,编写求Fibonacci数列的函数 ...
  • matlab 函数

    2010-10-02 10:06:00
    包括各种函数、命令含义、还有simulink模块的,希望有帮助 A a abs 绝对值, 模 acos 反余弦 acosh 反双曲余弦 acot 反余切 acoth 反双曲余切 acsc 反余割 acsch 反...
  • MATLAB函数大全

    2013-12-26 10:24:10
    MATLAB函数大全 2011-11-01 10:46:24 转自:http://www.douban.com/note/181460051/ Matlab有没有求矩阵行数/列数/维数的函数? ndims(A)返回A的维数 size(A)返回A各个维的最大元素个数 length...
  • 6.2模糊推理结构FIS6.2.1不使用数据聚类方法从数据生成FIS结构函数genfis1格式fismat=genfis1(data)fismat=genfis1(data,numMFs,inmftype,outmftype)说明genfis1为anfis训练生成一个Sugeno型作为初始条件的FIS结构...
  • Matlab函数大全

    千次阅读 2016-07-26 10:17:55
    Matlab有没有求矩阵行数/列数/维数的函数? ndims(A)返回A的维数 size(A)返回A各个维的最大元素个数 length(A)返回max(size(A)) [m,n]=size(A)如果A是二维数组,返回行数和列数 nnz(A)返回A中非0元素的个数 ...
  • MatLab函数大全

    万次阅读 2010-08-22 10:33:00
    Matlab有没有求矩阵行数/列数/维数的函数? ndims(A)返回A的维数 size(A)返回A各个维的最大元素个数 length(A)返回max(size(A)) [m,n]=size(A)如果A是二维数组,返回行数和列数...
  • 本来这段时间一直看的是MATLAB中滤波器的设计部分,在一个群友的问题中偶尔看到了函数句柄,颇为好奇,自己确实不曾用过,今日自学了点,简单谈下对函数句柄匿名函数以及内联函数的理解。一、函数句柄所谓函数句柄,...
  • T2F函数,在matlab中做傅里叶变换时调用,时间信号转化为频率
  • 函数参数和变量作用域函数参数的可调性全局变量局部变量 函数参数的可调性 nargin →判断输入实参的个数 nargout →判断输出实参的个数 这两个预定义变量有什么用处呢?看下面一个函数: function fout=test(a,b,c...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,867
精华内容 1,146
关键字:

matlab函数定义与调用

matlab 订阅