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

匿名函数:

匿名函数没有函数名,也不是.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=;

w=;

phi=pi/;

signal=createsig(A,w,phi);

F=signal.^n;

%%%%%%%%subfunction%%%%%%%%%%

function signal=createsig(A,w,phi)

x=:pi/:pi*;

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=:;

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=:;

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]函数执行顺序,部分函数未涉及,该知识标注为重点,遇见函数执行顺序相关问题时便于查找

Matlab匿名函数,子函数,私有函数,重载函数,eval和feval函数的更多相关文章

  1. Matlab匿名函数,向量化和预分配,函数的函数,P码文件

    匿名函数: 匿名函数是不存储在程序文件中.但与数据类型是 function_handle 的变量相关的函数.匿名函数可以接受输入并返回输出,就像标准函数一样.但是,它们可能只包含一个可执行语句. 例如 ...

  2. matlab中关于函数句柄、feval函数以及inline函数的解析 (转)

    http://blog.sina.com.cn/s/blog_7bff755b010180l3.html MATLAB函数句柄 函数句柄(Function handle)是MATLAB的一种数据类型. ...

  3. TWinControl与TControl的覆盖函数(TWinControl对TControl的10个消息覆盖函数,17个覆盖函数,私有虚函数仍可多态)

    手工找出来,对比一下,有助于VCL框架的理解.----------------------------------------------------------------------------- ...

  4. C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符 ...

  5. day16_函数作用域_匿名函数_函数式编程_map_reduce_filter_(部分)内置函数

    20180729    补充部分代码 20180727    上传代码 #!/usr/bin/env python # -*- coding:utf-8 -*- # ***************** ...

  6. 重载运算符:类成员函数or友元函数

    类成员函数: bool operator ==(const point &a)const { return x==a.x; } 友元函数: friend bool operator ==(co ...

  7. Matlab程序 转C++/Opencv基于Mat 不可不知的17个函数

    1.matlab中的imread相当于OpenCV中的cvLoadImage(imageName,  CV_LOAD_IAMGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR): ...

  8. [置顶] c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date'

    c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date' ...

  9. MATLAB 在同一个m文件中写多个独立的功能函数

    MATLAB 在同一个m文件中写多个独立的功能函数,从而实现在外部可以直接调用这个文件中的某一个函数. 鉴于MATLAB的函数文件的函数名与文件名要一样,就需要有一个统一的接口来涵盖这些功能函数. 例 ...

随机推荐

  1. 小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_6、SpringBoot2.xHTTP请求配置讲解

    1.SpringBoot2.xHTTP请求配置讲解 简介:SpringBoot2.xHTTP请求注解讲解和简化注解配置技巧 1.@RestController and @RequestMapping是 ...

  2. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍

    笔记 1.分布式缓存Redis介绍      简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具          1.redis官网 https://redis.io/download   ...

  3. 从0开始学爬虫3之xpath的介绍和使用

    从0开始学爬虫3之xpath的介绍和使用 Xpath:一种HTML和XML的查询语言,它能在XML和HTML的树状结构中寻找节点 安装xpath: pip install lxml HTML 超文本标 ...

  4. ISO/IEC 9899:2011 条款6.4——词法元素

    6.4 词法元素 1.token(标记): keyword(关键字) identifier(标识符) constant(常量) string-literal(字符串字面量) punctuator(标点 ...

  5. Linux expect的安装与使用

    Expect是在Tcl的基础上创建的,可以用来做一些Linux下无法做到交互的命令操作,可用于远程管理服务器. 一.安装Tcl: 1.下载源码包: wget http://nchc.dl.source ...

  6. JAVA协程 纤程 与Quasar 框架

    ava使用的是系统级线程,也就是说,每次调用new Thread(....).run(),都会在系统层面建立一个新的线程,然鹅新建线程的开销是很大的(每个线程默认情况下会占用1MB的内存空间,当然你愿 ...

  7. 05点睛Spring4.1-国际化

    5.1 ReloadableResourceBundleMessageSource 使用ReloadableResourceBundleMessageSource可获得不同语言的配置 此处是全局配置, ...

  8. RobotFramework: 接口测试时,注意请求体content-type

    使用Post Request关键字时 1.如果请求体的content-type为:application/x-www-form-urlencoded,则传参数时需要给params参数赋值 2.如果co ...

  9. vue el-table 自适应表格内容宽度

    由于表头和列是分开渲染的,通过el-table 设置fit属性,只能撑开表头,但是没有办法根据列的内容去适应宽度.网上找了一些使用根据表格内容计算表头宽度的文章,记个笔记. 代码逻辑是通过vue  的 ...

  10. 使用speedtest-cli测量服务器带宽

    使用speedtest-cli测量服务器带宽,这个是python写的工具,很方便,只需要在服务器端安装即可. 1.安装python-pip # yum install python-pip –y 2. ...