zoukankan      html  css  js  c++  java
  • Matlab匿名函数,子函数,私有函数,重载函数,eval和feval函数

    匿名函数,子函数,私有函数等函数类型

    匿名函数:

       匿名函数没有函数名,也不是.m文件,只包含一个表达式和输入输出参数。

    Fxy=@(x,y)x.^y+3*x*y

     

    x,y为输入输入参数,Fxy为函数名

    子函数:

    在 Matlab中, 多个函数写入一个.m文件中。其中出现的第一个函数称为主函数,其他函数称为子函数,保存时文件名与主函数名相同,外部程序只能调用主函数。

    特点:

    1. 子函数只能被同一文件下的其他函数调用
    2. 通过名称调用函数时优先调用子函数,再调用内置函数。
    3. 同一文件的主函数,子函数工作区独立,各个函数之间的信息传递通过输入输出参数实现。
    4. Help,lookfor无法显示子函数的相关信息
    function F=ex4_19(n)
    
    A=1;
    
    w=2;
    
    phi=pi/2;
    
    signal=createsig(A,w,phi);
    
    F=signal.^n;
    
    %%%%%%%%subfunction%%%%%%%%%%
    
    function signal=createsig(A,w,phi)
    
    x=0:pi/100:pi*2;
    
    signal=A*sin(w*x+phi);

    私有函数和私有目录:

    私有函数指位于私有目录private下的函数文件。

    特点:

    1. 私有函数构造与普通函数相同。
    2. 私有函数只能被private目录下的M文件直接调用。
    3. 使用指令调用私有函数,优先级仅次于Matlab内置函数和子函数
    4. Help,lookfor无法显示私有函数信息。

    例如,在位于 MATLAB® 搜索路径下的文件夹内,创建名称为 private 的子文件夹。不要将 private 添加到该路径。在 private 文件夹内的名称为 findme.m 的文件中,创建一个函数:

    function findme
    
    % FINDME  An example of a private function.
    
     
    
    disp('You found the private function.')

     

    在private文件夹上层目录文件夹并创建一个名称为 visible.m 的文件。

    function visible

    findme

    先执行函数visible再执行findme

     

    重载函数:

       与其他编程语言语言重登重载函数意义相同,同名函数不同输入参数的重载,在实际使用中会调用对应正确参数的函数并执行

    eval和feval函数:

    1. eval函数与文本变量一起使用,在具体使用中语法:

    eval(s);

    s为字符串,eval函数可以求表达式的值或者执行文本字符串的语句。

    例:eval_exp1:

    Array=1:5;
    
    String='[Array*2;Array/2;2.^Array]';
    
    Output=eval(String)

    执行结果:

    Output =

        2.0000    4.0000    6.0000    8.0000   10.0000

        0.5000    1.0000    1.5000    2.0000    2.5000

    2.0000    4.0000    8.0000   16.0000   32.0000

    该eval函数求出了字符串中的值

    例:eval_exp2:

    theta=pi;
    
    eval('Output=exp(sin(theta))');
    
    who
    
     

    执行结果:

     

    该eval函数执行了字符串中的语句

    1. feval函数

    [y1,...,yN] = feval(fun,x1,...,xM)

    该指令含义为用fun函数执行参数为x1,x1………….xM的运算,与函数句柄类似

    例:feval_exp1.m

    Array=1:5;
    
    String='[Array*2;Array/2;2.^Array]';
    
    Outpute=eval(String)     
    
    Outputf=feval(String)%feval只接受函数名,错误实例

    执行结果:

     

    例:feval_exp2.m

    fun='round'
    
    x=2.5;
    
    Output=feval(fun,x)

     

    执行结果:

    Y = round(X) 将 X 的每个元素四舍五入为最近的整数。在对等情况下,即有元素的小数部分恰好为 0.5 时,round 函数会偏离零四舍五入到具有更大幅值的整数。

    内联函数:在以后的版本中将会删除 inline。请改用 匿名函数。(因此只做了解)

    inline(expr) 按照 expr 中包含的 MATLAB® 表达式构造一个内联函数对象。内联函数的输入参数是通过在 expr 中搜索孤立的小写字母字符(i 或 j 除外)自动确定的,该小写字母字符不属于通过多个字母字符构成的字词的一部分。如果不存在此类字符,则使用 x。如果该字符不是唯一的,则使用最接近 x 的字符。如果找到两个字符,则选择在字母表中靠后的字符。

    inline(expr,arg1,arg2,...) 构造一个由 arg1、arg2 ... 指定输入参数的内联函数。可以使用多字符符号名称。

    inline(expr,n)(其中 n 是标量)构造一个其输入参数为 x, P1, P2, ... 的内联函数。

    例:此示例创建一个简单的内联函数将某个数平方

     

    例:此示例创建一个内联函数以表示公式 f = 3sin(2x2)。生成的内联函数可以使用 argnames 和 formula 函数进行计算

     

    内联函数相关的四个命令:

    1. char(fun) 将内联函数转换为字符数组。这与 formula(fun) 完全相同。
    2. argnames(fun) 以字符向量元胞数组形式返回内联对象 fun 的输入参数名称。
    3. formula(fun) 返回内联对象 fun 的公式。
    4. vectorize(fun) 在 fun 的公式中将 . 插入在任何 ^、* 或 /' 之前。结果是内联函数的向量化版本。

    函数优先顺序:[lz1] 

    本主题介绍 MATLAB® 在当前作用域内的多个函数具有相同名称时如何确定要调用的函数。当前作用域包括当前文件、相对于当前运行的函数的可选私有子文件夹、当前文件夹以及 MATLAB 路径。

    MATLAB 使用下面的优先顺序:

    1. 变量

    在认定名称与函数匹配之前,MATLAB 会先在当前工作区中检查具有该名称的变量。

    注意:

    如果您创建与函数同名的变量,MATLAB 不能运行该函数,直到您从内存中清除该变量。

    1. 导入的包函数

    包函数与特定文件夹相关联。使用 import 函数导入包函数时,它优先于同名的其他所有函数。

    1. 当前函数内的嵌套函数
    2. 当前文件内的局部函数
    3. 私有函数

    私有函数是名称为 private 的子文件夹(即当前运行的文件所在的文件夹正下方的文件夹)中的函数。

    1. 对象函数

    对象函数以输入参数列表形式接受特定类的对象。如果存在多个同名的对象函数,MATLAB 检查输入参数的类以确定要使用的函数。

    1. @ 文件夹中的类构造函数

    MATLAB 使用类构造函数创建各种对象(例如 timeseries 或 audioplayer),您也可以使用面向对象的编程定义自己的类。例如,如果您创建类文件夹 @polynom 和构造函数 @polynom/polynom.m,构造函数优先于路径中任何位置的名为 polynom.m 的其他函数。

    1. 加载的 Simulink® 模型
    2. 当前文件夹中的函数
    3. 路径中其他位置的函数,按照显示顺序

    在同一文件夹内确定函数优先级时,MATLAB 按以下顺序考虑文件类型:

    1. 内置函数
    2. MEX 函数
    3. 未加载的 Simulink 模型文件,文件类型的顺序如下:
      1. SLX 文件
      2. MDL 文件
      3. 使用 MATLAB App 设计工具创建的 App 文件 (.mlapp)
      4. 带有 .mlx 扩展名的程序文件
      5. P 文件(即带有 .p 扩展名的编码程序文件)
      6. 带有 .m 扩展名的程序文件

    例如,如果 MATLAB 在同一文件夹中找到同名的 .m 文件和 P 文件,它使用 P 文件。因为 P 文件不会自动重新生成,所以确保您在编辑 P 文件时重新生成该文件。

    要确定 MATLAB 对特定输入所调用的函数,请在对 which 函数的调用中包括函数名称和输入。


     [lz1]函数执行顺序,部分函数未涉及,该知识标注为重点,遇见函数执行顺序相关问题时便于查找

  • 相关阅读:
    CodeForces 510C Fox And Names (拓扑排序)
    Codeforces 1153D Serval and Rooted Tree (简单树形DP)
    HDU 6437 Problem L.Videos (最大费用)【费用流】
    Luogu P3381 (模板题) 最小费用最大流
    Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses (并查集+分组背包)
    Codeforces 1144F Graph Without Long Directed Paths (DFS染色+构造)
    HDU 2204 Eddy's 爱好 (容斥原理)
    Codeforces 939E Maximize! (三分 || 尺取)
    Codeforces 938D. Buy a Ticket (最短路+建图)
    CodeForces 959E Mahmoud and Ehab and the xor-MST (MST+找规律)
  • 原文地址:https://www.cnblogs.com/asahiLikka/p/11577643.html
Copyright © 2011-2022 走看看