浅析MATLAB中的内联函数,匿名函数,函数函数
- 格式:doc
- 大小:35.00 KB
- 文档页数:4
matlab中匿名函数匿名函数在Matlab中是一种特殊的函数,它没有名称,通常用于简单的计算或作为其他函数的参数。
在编程中,匿名函数可以提高代码的简洁性和可读性,同时也有助于提高代码的执行效率。
接下来将详细介绍Matlab中匿名函数的使用和优势。
### 匿名函数的定义在Matlab中,可以使用`@(input_arguments) expression`的语法来定义匿名函数。
其中,`input_arguments`表示函数的输入参数,`expression`表示函数的计算表达式。
通过这种方式,可以快速定义简单的函数,而无需为其命名。
### 匿名函数的优势1. **简洁性**: 匿名函数可以在不占用额外空间的情况下定义函数,使得代码更加简洁易读。
2. **灵活性**: 匿名函数可以作为其他函数的参数传递,从而增加代码的灵活性和可重用性。
3. **执行效率**: 由于匿名函数通常较简单,可以在一行代码中完成一些基本的计算,从而提高代码的执行效率。
### 匿名函数的应用场景1. **数据处理**: 在处理数据时,有时需要对数据进行简单的转换或计算,可以使用匿名函数来快速实现。
2. **图形绘制**: 在绘制图形时,有时需要定义一些简单的数学函数,可以使用匿名函数来实现。
3. **优化算法**: 在优化算法中,有时需要定义目标函数或约束条件,可以使用匿名函数来表示。
### 示例下面是一个简单的示例,演示了如何在Matlab中使用匿名函数计算两个数的和:```matlab% 定义匿名函数f = @(a, b) a + b;% 调用匿名函数result = f(2, 3);disp(result); % 输出结果为5```在这个示例中,我们定义了一个匿名函数`f`,用于计算两个数的和。
然后调用这个匿名函数并输出结果。
### 结语通过上述介绍,我们了解了Matlab中匿名函数的定义、优势和应用场景,并通过示例演示了匿名函数的基本用法。
matlab的函数类型作者:XLFinance 来源:XLFinance 打印邮寄返回匿名函数匿名函数的作用在于可以快速生成简单的函数,而不需创建m文件,匿名函数通常在命令区或函数、脚本中运行时创建。
匿名函数的生成语法是fhandle = @(arglist) expr,其中expr代表函数体,arglist是逗号分隔的参数列表。
符号@代表创建函数句柄,匿名函数必须使用此符号,匿名函数的执行语法是:fhandle(arg1, arg2, ..., argN),fhandle为匿名函数句柄名称。
简单的匿名函数示例:sqr = @(x) x.^2,该匿名函数计算给定参数x的平方值,执行可以使用 a = sqr(5)形式。
再如:sumAxBy = @(x, y) (A*x + B*y)(使用多个参数),t = @() datestr(now)(无参数),A = {@(x)x.^2, @(y)y+10, @(x,y)x.^2+y+10}(匿名函数数组)。
多重匿名函数等同于:g = @(c) (quad(@(x) (x.^2 + c*x + 1), 0, 1));其中@(x) (x.^2 + c*x + 1)为第一重匿名函数,而后作为参数继续传递给积分函数。
再如求解函数a*exp(x)+b*x=0,则使用在m函数文件调用匿名函数:function f0 = test(a, b, x0)f0=fsolve(@(x)(a*exp(x)+b*x),x0);主函数任意m文件中的第一个函数称呼为主函数,主函数之后可能附随多个子函数。
主函数是在命令区或其它函数中可调用的唯一一个该m文件中所定义的函数。
子函数一个m文件中可能包含多个函数。
主函数之外的函数都称为子函数,这些子函数只能为主函数或同一m文件中的其它子函数可见。
例如:function [avg, med] = newstats(u) % 主函数n = length(u);avg = mean(u, n);med = median(u, n);function a = mean(v, n) % 子函数1a = sum(v)/n;function m = median(v, n) % 子函数2w = sort(v);if rem(n, 2) == 1m = w((n+1) / 2);elsem = (w(n/2) + w(n/2+1)) / 2;end而即便在相同m文件中,子函数内定义的变量也不可为其它子函数所使用,除非定义为全局或作为参数传递。
matlab中inline函数的作用(一)MATLAB中inline函数的作用简介在MATLAB中,inline函数是一种用于定义匿名函数的方法。
通过使用inline函数,我们可以在代码中直接定义函数,而不需要事先定义函数名称。
这种灵活的方式使得我们可以更加方便地进行数值计算和函数处理。
语法inline的语法如下:fun = inline(expr,var)其中,expr是函数的表达式,var是函数输入的变量。
fun则是生成的内联函数。
例子假设我们希望定义一个函数f(x),其表达式为x^2+3x+2。
我们可以使用inline函数进行如下定义:f = inline('x^2+3*x+2', 'x');这样,我们就定义好了一个名称为f的函数。
特点1.内联函数可以与其他函数一样,进行数值计算和向量化操作。
2.内联函数可以直接进行求导、积分和数值求解等操作,无需事先定义函数。
3.内联函数可以自由调用其他MATLAB函数,扩展了函数的功能和灵活性。
应用内联函数在以下几个方面有广泛应用: 1. 多项式和曲线拟合。
2. 插值和平滑。
3. 数值解微分方程。
总结通过使用inline函数,我们可以方便地在MATLAB中定义匿名函数,从而更加灵活地进行数值计算和函数处理。
无需事先定义函数名称,内联函数可以直接进行各种操作,同时可以自由调用其他MATLAB 函数。
这使得我们的工作更加高效和便捷。
以上就是关于MATLAB中inline函数的作用的介绍。
希望本文能够帮助您更好地理解和使用该函数。
推荐使用尽管inline函数在MATLAB中仍然可以使用,但是自从MATLAB R2016b版本之后,官方推荐使用匿名函数代替inline函数。
匿名函数的语法更加简洁且具有相同的功能。
匿名函数的语法如下:fun = @(var) expr其中,var是函数输入的变量,expr是函数的表达式。
举个例子,我们可以用匿名函数来替代之前inline函数的例子:f = @(x) x^2+3*x+2;这样,我们用匿名函数定义了与之前相同的函数。
matlab函数定义010. 自定义函数函数——是编程的核心概念之一,是能够完成相对独立功能的代码封装成的模块。
在主程序中通过函数名和实参调用它,通过接口(即函数的输入、输出参数)来实现“通讯”。
所以在调用函数时,你只要知道【被调用的函数是用来做什么的】,以及【如何对应它的输入、输出参数】就行了。
关于【形参(形式参数)】和【实参(实际参数)】:函数定义中的参数就是形参,只是用来限定函数所接收的数据类型的,“泛指该数据类型下任一元素”;函数调用中的参数就是实参,是“特指的具体数值”来代入函数体执行代码。
例如(C语言):int max(int x, int y){ if (x >= y)return x;elsereturn y; }……int a = 5, b = 4;max(2,3);max(a,b);……其中,x,y是形参,2, 3,a, b是实参。
使用函数的好处:增加程序的可读性(函数可独立放在主程序之外)和重用性(一个函数可以多次被调用)。
Matlab的自定义函数,常用的有:m文件定义函数、inline(内联)函数、匿名函数。
•m文件定义函数(m-函数)•1.1.依次File-->New-->Function,会弹出一个新编辑窗口,包含代码如下:2.function[ output_args ] = Untitled2( input_args )% UNTITLED2Summary of this function goes here% Detailedexplanation goes hereend这是一个m-函数的模板。
function:表示编写的是一个函数。
output_args: 输出参数,即函数的返回值,各返回值间用逗号隔开。
(不需要像C语言那样,通过return到返回值来赋值,outp_args相应的参数可以直接使用)input_args: 输入参数,各参数之间用逗号隔开。
MATLAB 常用函数总结Matlab 的内部常数pi 圆周率exp(1)自然对数的底数ei 或j虚数单位Inf 或 inf无穷大Matlab 的常用内部数学函数指数函数exp(x)以e 为底数log(x)自然对数,即以e 为底数的对数log10(x)常用对数,即以10为底数的对数对数函数log2(x)以2为底数的x 的对数开方函数sqrt(x)表示x 的算术平方根绝对值函数abs(x)表示实数的绝对值以及复数的模sin(x)正弦函数cos(x)余弦函数tan(x)正切函数cot(x)余切函数sec(x)正割函数三角函数(自变量的单位为弧度)csc(x)余割函数反三角函数asin(x)反正弦函数acos(x)反余弦函数atan(x)反正切函数acot(x)反余切函数asec(x)反正割函数acsc(x)反余割函数sinh(x)双曲正弦函数cosh(x)双曲余弦函数tanh(x)双曲正切函数coth(x)双曲余切函数sech(x)双曲正割函数双曲函数csch(x)双曲余割函数asinh(x)反双曲正弦函数acosh(x)反双曲余弦函数atanh(x)反双曲正切函数acoth(x)反双曲余切函数asech(x)反双曲正割函数反双曲函数acsch(x)反双曲余割函数求角度函数atan2(y,x)以坐标原点为顶点,x轴正半轴为始边,从原点到点(x,y)的射线为终边的角,其单位为弧度,范围为(,]gcd(a,b)两个整数的最大公约数数论函数lcm(a,b)两个整数的最小公倍数排列组合函数factorial(n)阶乘函数,表示n的阶乘real(z)实部函数imag(z)虚部函数复数函数abs(z)求复数z的模angle(z)求复数z 的辐角,其范围是( ,]conj(z)求复数z 的共轭复数ceil(x)表示大于或等于实数x 的最小整数floor(x)表示小于或等于实数x 的最大整数求整函数与截尾函数round(x)最接近x 的整数max([a ,b ,c ,...])求最大数最大、最小函数min([a ,b ,c ,..])求最小数符号函数sign(x)Matlab 中的数学运算符a+b 加法 a./b 数组右除a-b 减法 a.\b 数组左除a*b 矩阵乘法a^b 矩阵乘方a.*b 数组乘法 a.^b 数组乘方a/b 矩阵右除-a负号a\b矩阵左除' 共轭转置.'一般转置Matlab 的关系运算符 ==等于<小于>大于<=小于或等于>=大于或等于~=不等于如何用matlab求阶乘factorial(n) 求n的阶乘如何用matlab进行多项式运算(1)合并同类项 syms 表达式中包含的变量 collect(表达式,指定的变量)(2)因式分解 syms 表达式中包含的变量 factor(表达式)(3)展开syms 表达式中包含的变量 expand(表达式)(4)化简syms 表达式中包含的变量simplify(表达式) 如何用matlab进行复数运算 a+b*i 或 a +b*j表示复数a+bi 或 a+bjreal(z)求复数z的实部imag(z)求复数z的虚部abs(z)求复数z的模angle(z)求复数z的辐角,conj(z)求复数z的共轭复数exp(z)复数的指数函数,表示e^z如何用Matlab求集合的交集、并集、差集和补集 union(A,B)求集合A和B的并集intersect(A,B)求集合A和B的交集setdiff(A,B)求集合A和B的差集A-Bsetdiff(U,A)求集合A关于全集U的补集如何用matlab排序sort(v) 将向量v的元素从小到大排列(升序排列)sort(v,dim,’descend or ascend’)当dim=1时矩阵按列排序,descend or ascend用来控制升序还是降序当dim=2时矩阵按行排序,descend or ascend用来控制升序还是降序如何用Matlab求极限(1)极限:syms xlimit(f(x), x, a)求f(x)关于x趋于a时的极限(2)单侧极限:左极限:syms x limit(f(x), x, a,’left’)求f(x)关于x趋于a时的左极限右极限:syms x limit(f(x), x, a,’right’)求f(x)关于x趋于a时的右极限如何用Matlab求导数diff('f(x)') diff('f(x)','x') 求f(x)关于x的导数或者:syms x diff(f(x))syms x diff(f(x), x)如何用Matlab求高阶导数如何用Matlab求高阶导数diff('f(x)',n) diff('f(x)','x',n)求f(x)关于x的n阶导数syms x diff(f(x),n)syms x diff(f(x), x,n)如何用Matlab求不定积分int('f(x)') int ('f(x)','x')求f(x)关于x的积分syms x int(f(x))syms x int(f(x), x)如何用Matlab求定积分、广义积分int('f(x)',a,b) int ('f(x)','x',a,b)求f(x)关于x的积分,区间为a到b syms x int(f(x),a,b)syms x int(f(x), x,a,b)如何用Matlab展开级数syms x taylor(f(x), x, n,)a如何在Matlab中进行积分变换syms s tlaplace( f(t), t, s ) 拉普拉斯变换ilaplace( F(s), s, t ) 拉普拉斯变换的逆变换 syms t ωfourier( f(t), t, ω)傅立叶变换ifourier( F(ω), ω, t ) 傅立叶变换的逆变换 syms n zztrans( f(n), n, z) Z变换iztrans( F(z), z, n ) Z变换的逆变换 如何用Matlab解微分方程dsolve('微分方程','自变量')dsolve('微分方程','初始条件或边界条件','自变量') dsolve('D2x+2*x+x=sin(t)','x(0)=1','Dx(0)=1','t')如何用matlab求多变量函数的极限 以两个变量为例说明,多于两个变量的函数极限可以依次类推。
Matlab中的匿名函数的使用在Matlab7.0以后的版本中,出现了一种新的函数类型–匿名函数,不但能够完成原来版本中内联函数(inline)的功能,还提供了其他更方便的功能。
Matlab首席科学家Moler 教授都推荐用匿名函数替代原来的内联函数。
我最近学习了一些有关匿名函数的内容,现在总结一下:1,匿名函数的基本用法。
handle = @(arglist)anonymous_function其中handle为调用匿名函数时使用的名字。
arglist为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔。
anonymous_function为匿名函数的表达式。
举个例子如下:>> f=@(x,y)x^2+y^2; >> f(1,2) ans = 5当然输入的是数组也是可以的:>> f=@(x,y)x.^2+y.^2; %注意需要点(.)运算 >> a=1:1:10; >> b=10:-1:1; >> f(a,b) ans= 101 85 73 65 61 6165 73 85 101匿名函数的表达式中也可以有参数的传递,比如:>> a=1:5; >> b=5:-1:1; >> c=0.1:0.1:0.5; >> f=@(x,y)x.^2+y.^2+c; >> f(a,b) ans= 26.1000 20.2000 18.3000 20.4000 26.500c作为表达式中的参数,进行了数据传递。
上面都是单重匿名函数,也可以构造多重匿名函数,如:>> f=@(x,y)@(a) x^2+y^+a; >> f1=f(2,3) f1 = @(a)x^2+y^+a >> f2=f1(4) f2 = 85每个@后的参数从它后面开始起作用,一直到表达式的最后。
浅析MATLAB中的内联函数、匿名函数和函数函数【转载】内联函数内联(inline)函数是MATLAB 7以前经常使用的一种构造函数对象的方法。
在命令窗口、程序或函数中创建局部函数时,通过使用inline构造函数,而不用将其储存为一个M文件,同时又可以像使用一般函数那样调用它。
MATLAB中的内联函数借鉴了C语言中的内联函数,在C语言中,内联函数是通过编译器控制来实现的,它只在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的时间和空间开销。
在MATLAB中也有类似的性质。
由于内联函数是储存于内存中而不是在M文件中,省去了文件访问的时间,加快了程序的运行效率。
虽然内联函数有M文件不具备的一些优势,但是由于内联函数的使用,也会受到一些制约。
首先,不能在内联函数中调用另一个inline 函数;另外,只能由一个MATLAB表达式组成(不能是一段表达式),并且只能返回一个变量。
创建一个内联函数非常简单,就是使用inline方法,例如:>> f=inline('t^2-3*t-4')f =Inline function:f(t) = t^2-3*t-4MATLAB会通过检查字符串来推断自变量,例如上面的函数中t 就是自变量,如果没有找到,将会使用x作为缺省的自变量,例如常数函数:>> g=inline('3')g =Inline function:g(x) = 3另外,对于inline也支持多元函数:>> h=inline('x+y')h =Inline function:h(x,y) = x+y这种创建方法等价于以下方法:>> h=inline('x+y','x','y')这种方式显式地指定了参数列表。
使用内联函数也很简单,如同手写一般,以f(t) = t^2-3*t-4为例,分别计算在t=2和t=4时的函数值:>> f(2)ans =-6>> f(4)ans =对于多元函数类似。
Matlab函数进阶:使用匿名函数(Anonymous Function)和内嵌函数(Nested Function)处理多变量传递问题(Matlab 7.0以上)问题:有一个多变量函数f(a b c x),现需要分别在a=a0b=b0c=c0和a=a1b=b1c=c1的条件下对f(a b c x)进行某一操作。
此类问题常在数值积分时出现。
解决方案:1.使用全局变量可在主调函数和被调函数中分别将a,b,c声明为全局变量(global a b c),这时f通过全局变量传递abc,定义时可以只有一个参数x。
2.使用anonymous function3.使用nested function下面举例说明anonymous function和nested function的使用。
例:对任意二次多项式ax2+bx+c 进行数值积分(此处显然可以解析得到,此例使用anonymousfunction做演示)解:(1)使用匿名函数编写文件intpoly2.m如下function y_int=intpoly2(a,b,c)y_int=quad(@(x)(poly2(a,b,c,x)), 0,1); %此处利用matlab内部函%数quad(fun, x0,xt)进行积分,%被积函数fun我们使用匿名函%数"@(x)(poly2(a,b,c,x))"以便%将自变量限制为x.function y=poly2(ai,bi,ci,x)%此处定义一个多变量的子函数 poly2( a,b,c,x)y=ai.*x.^2+bi.*x+ci;%此处使用矩阵元素运算(.* 和.^)等便于%被矩阵化的内部函数调用,且提高程序效率执行:保存该文件并将matlab切换至该文件目录下,命令行输入intpoly2(1,2,3),便给出积分结果ans=4.33(2)使用nested function编写函数保存为intnest.m,内容如下function y_int=intnest(a,b,c)y_int=quad(@poly2, 0,1); %此处利用matlab内部函%数quad(fun, x0,xt)进行积分,%被积函数fun我们使用内嵌函%数poly2(x)的句柄@poly2function y=poly2(x)%此处定义一个内嵌函数 poly2( a,b,c,x)y=a.*x.^2+b.*x+c;%直接调用母函数中的变量a,b,cend% 结束内嵌函数poly2end% 结束母函数intpoly2保存后执行,同样效果。
在MATLAB中,有多种类型的函数,包括常见的脚本函数、内部函数、匿名函数以及其他特殊类型的函数。
下面是对每种类型函数的简要概述:1. 脚本函数(Script Functions):脚本是一组按顺序执行的MATLAB命令,存储在一个文本文件中,文件扩展名为 .m。
通过输入文件名(不包括扩展名)来执行脚本。
执行脚本函数时,它将在当前工作空间中执行。
例子:% myScript.mx = linspace(-10, 10, 100);y = sin(x);plot(x, y);1. 内部函数(Nested Functions):内部函数是在其他函数内部定义的函数,且只能被包含它的函数以及其他内部函数访问。
这种函数类型在进行函数封装及共享数据时非常有用。
例子:% mainFunction.mfunction main()a = 5;b = 3;fprintf("Sum: %d\n", add(a, b));function result = add(a, b)result = a + b;endend1. 匿名函数(Anonymous Functions):匿名函数允许您为单条表达式定义一个简短的函数而不需要创建一个 .m 文件。
它们通常用于作为参数传递给其他函数或语言构造,使得处理简便。
例子:square = @(x) x .* x;result = square(5);disp(result); % Output: 251. 私有函数(Private Functions):这些函数被存储在名为 private 的特殊文件夹中,并且只能被在同一文件夹及其子文件夹中的函数调用。
它们对于实现文件夹级别的封装很有用。
1. 本地函数(Local Functions):本地函数是在 .m 文件中定义的,但它们放在同一个文件内的不同函数之间。
它们仅能被同一个.m文件中的其他代码调用。
本地函数不与其他路径中的函数名称冲突。
Matlab 内联函数简介在 Matlab 中,内联函数是一种特殊的函数,它可以在其他函数中定义并调用。
与传统的函数不同,内联函数在定义时将函数体的代码嵌入到调用该函数的位置,从而避免了传统函数的调用开销。
内联函数在一些需要频繁调用的情况下,可以提高程序的运行效率。
内联函数的语法在 Matlab 中,使用inline函数来定义内联函数。
内联函数的语法格式如下所示:函数句柄 = inline('函数体')其中,函数句柄是一个可以调用内联函数的变量。
函数体是内联函数的实际代码。
可以在函数体中使用输入参数,输入参数需要用单引号'括起来,并用逗号,分隔开。
接下来,我们将通过一些具体的例子来详细介绍内联函数的使用。
使用内联函数进行简单计算我们首先来看一个简单的例子,使用内联函数进行加法运算。
addition = inline('a + b');result = addition(2, 3);在上面的例子中,我们定义了一个名为addition的内联函数,函数体是 a + b,表示对a和b进行加法运算。
然后我们调用addition函数,并传入参数2和3,将得到的结果保存在变量result中。
在这个例子中,内联函数允许我们在不定义传统函数的情况下,直接在调用的位置进行加法运算。
使用内联函数进行矩阵运算除了简单的计算,内联函数还可以用于矩阵运算。
接下来,我们来看一个求矩阵的乘法运算的例子。
matrix_multiply = inline('A * B');A = [1, 2; 3, 4];B = [5, 6; 7, 8];result = matrix_multiply(A, B);在上面的例子中,我们定义了一个名为matrix_multiply的内联函数,函数体是 A * B,表示对矩阵A和B进行乘法运算。
然后我们调用matrix_multiply函数,并传入参数A和B,将得到的结果保存在变量result中。
浅析MATLAB中的内联函数、匿名函数和函数函数
内联函数
内联(inline)函数是MATLAB 7以前经常使用的一种构造函数对象的方法。
在命令窗口、程序或函数中创建局部函数时,通过使用inline构造函数,而不用将其储存为一个M
文件,同时又可以像使用一般函数那样调用它。
MATLAB中的内联函数借鉴了C语言中的内联函数,在C语言中,内联函数是通过编译器控制来实现的,它只在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的时间和空间开销。
在MATLAB中也有类似的性质。
由于内联函数是储存于内存中而不是在M文件中,省去了文件访问的时间,加快了程序的运行效率。
虽然内联函数有M文件不具备的一些优势,但是由于内联函数的使用,也会受到一些制约。
首先,不能在内联函数中调用另一个inline函数;另外,只能由一个MATLAB表达式组成,并且只能返回一个变量。
创建一个内联函数非常简单,就是使用inline方法,例如:
>> f=inline('t^2-3*t-4')
f =
Inline function:
f(t) = t^2-3*t-4
MATLAB会通过检查字符串来推断自变量,例如上面的函数中t就是自变量,如果没有找到,将会使用x作为缺省的自变量,例如常数函数:
>> g=inline('3')
g =
Inline function:
g(x) = 3
另外,对于inline也支持多元函数:
>> h=inline('x+y')
h =
Inline function:
h(x,y) = x+y
这种创建方法等价于以下方法:
>> h=inline('x+y','x','y')
这种方式显式地指定了参数列表。
使用内联函数也很简单,如同手写一般,以f(t) = t^2-3*t-4为例,分别计算在t=2和t=4时的函数值:
>> f(2)
ans =
-6
>> f(4)
ans =
对于多元函数类似。
匿名函数
匿名函数(anonymous function)是MATLAB 7.0版提出的一种全新的函数描述形式,和内联函数类似,可以让用户编写简单的函数而不需要创建M文件,因此,匿名函数具有inline函数的所有优点,并且效率比inline函数高,同时还具有一些独有的特点。
事实上匿名函数很像C语言中的宏,这个从匿名函数的构造就能够看得出来,但是它比宏的功能更加强大,就是可以支持变量替换,这将在后面的示例中有所体现。
定义一个匿名函数很简单,语法是fhandle=@(arglist) expression
其中fhandle就是调用该函数的函数句柄(function handle),相当于C语言中的函数指针,arglist是参数列表,多个参数使用逗号分隔,Expression则是该函数的表达式,例如定义x 和y的平方和函数:
>> f=@(x,y) x*x+y*y
f =
@(x,y)x*x+y*y
一旦定义了匿名函数,使用方式和inline函数类似,例如计算f(3,4):
>> f(3,4)
ans =
25
前面提到,匿名函数可以使用工作空间的变量,例如创建函数f(x,y)=x^2+y^3:
>> p=2;
>> q=3;
>> f=@(x,y) x^p+y^q
f =
@(x,y)x^p+y^q
计算f(2,3):
>> f(2,3)
ans =
31
如果修改p或者q的值,例如将q改为2:
q =
2
>> f(2,3)
ans =
31
计算结果并没有改变,这是因为,该函数句柄保存的是函数在创建时的快照,而不是动态的访问其中的变量,如果希望获取新值,需要重新创建一次该函数,完整的方法应该是这样的:>> q=2;
>> f=@(x,y) x^p+y^q
f =
@(x,y)x^p+y^q
>> f(2,3)
ans =
13
匿名函数会让前面的内联函数逐步退出MATLAB的舞台,事实上在设计这种类型的函数时就带有这一目的,但是为了保持程序的向下兼容,使用内联函数无疑将带来更好的兼容性。
函数函数
函数函数(function function)是对传入的其他函数进行操作的函数,传入的函数作为函数函数的输入参数,传入到函数函数中的函数称为传递函数(Passed function),事实上MATLAB中就有许多这样的函数,例如求解常微分方程的函数ode23、ode45、ode113等都是函数函数,他们的第一个参数都是传递函数。
另外一个常见的函数函数是fplot,用于绘制所提供函数的图形,语法为fplot(fun,lims)
例如绘制x取值范围为[-π,π]上f=sin(x)的图形:
>> fplot(@sin,[-pi,pi])
图形如下:
和前面两种函数不同,函数函数是比较复杂的函数了,因此必须要保存在M文件中,例如可以编写一个计算某个传递函数在给定区间上最大值、最小值和平均值的函数函数:function [maxy,miny,aver]=fstatic(func,a,b,n)
x=linspace(a,b,n);
y=func(x);
maxy=max(y);
miny=min(y);
aver=mean(y);
end
保存为M文件后,例如统计正弦函数在[-π,π]上的最大值、最小值和平均值:
>> fstatic(@sin,-pi,pi,100)
ans =
0.9999
>> [max min aver]=fstatic(@sin,-pi,pi,1000)
max =
1.0000 min =
-1.0000 aver =
-5.9291e-018。