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'
round函数怎么使用matlabx=2.5;
Output=feval(fun,x)
执⾏结果:
Y = round()将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 的公式中将 . 插⼊在任何 ^、* 或 /' 之前。结果是内联函数的向量化版本。
函数优先顺序:
本主题介绍 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 对特定输⼊所调⽤的函数,请在对函数的调⽤中包括函数名称和输⼊。
函数执⾏顺序,部分函数未涉及,该知识标注为重点,遇见函数执⾏顺序相关问题时便于查