精华内容
下载资源
问答
  • 本篇文章主要讲解MATLAB 匿名函数的一些基础的及独特的用法: 目录1 匿名函数的生成1.1基础生成1.2 多参数匿名函数1.3 含定参匿名函数1.4 sym转匿名函数1.5 字符串转匿名函数1.6 函数工厂(匿名函数的自动生成)...

    本篇文章主要讲解MATLAB 匿名函数的一些基础的及独特的用法:

    1 匿名函数的生成

    1.1基础生成

    (例)

    f=@(x)x^2;

    注:匿名函数所输入的参数可以是向量形式,只需将其中部分运算更改为点运算即可:

    f=@(x)x.^2;
    f(1:5)

    ans =

      1     4     9    16    25
    

    也可以这么写,但除了3.3所示情况外不推荐:

    f=@(x)arrayfun(@(x)x^2,x)
    f(1:5)

    同时逻辑运算对于匿名函数也成立,如下:

    f=@(x)x>3&x<5

    分段函数:

    f=@(x)(x>3)*5+(x<=3)*4

    1.2 多参数匿名函数

    (例)

    f=@(x,y)x^2+y;

    1.3 含定参匿名函数

    详见2.4部分
    (例)

    a=5;
    f=@(x)a*x^2;

    注意,即使在后来改变a的值函数f内的a也不会改变,例:

    a=5;
    f=@(x)a*x^2;
    a=1;
    f(2)

    ans=20,注意此处求得数值为20 而不是4
    此时若是存储该匿名函数,例:

    a=5;
    f=@(x)a*x^2;
    save func1.mat f;

    此时存储的匿名函数仍旧是包含参数的,可以通过以下两种方式使用:

    load(‘func1.mat’)
    f(2)


    func=load(‘func1.mat’);
    func.f(2)

    1.4 sym转匿名函数

    sym格式的公式可通过如下方式生成匿名函数(第一种较慢)

    syms x
    a=x^2+x;
    f=matlabFunction(a)

    a=sym(x^2+x);
    f=matlabFunction(a)

    1.5 字符串转匿名函数

    方式如下:

    a=’@(x) x^2+2*x’;
    b=str2sym(a);
    f=matlabFunction(b)

    注:MATHWORK近期又出了str与句柄的转换函数,
    比较新的版本可用下面的方式:

    str = ‘@(x)7*x-13’;
    fh = str2func(str)

    1.6 函数工厂(匿名函数的自动生成)
    1.6.1 已知参数个数

    在一些项目中,需要根据不同参数生成不同匿名函数,
    例如下面为a,b,c三个参数不同时能够自动生成不同匿名函数的生成函数:
    方式一(借助sym):

     function func=funcFactory(a,b,c)
    	syms x
    	func=matlabFunction(a*x^2+b*x+c);
    end
    

    方式二(借助字符串):

    function func=funcFactory(a,b,c)
    	str=['@(x)',num2str(a),'*x^2+',num2str(b),'*x+',num2str(c )];
    	func=matlabFunction(str2sym(str));
    end
    

    使用方式:

    funcFactory(1,2,3)

    ans =

    包含以下值的 function_handle:

    @(x)x.*2.0+x.^2+3.0
    
    1.6.2 未知参数个数

    未知参数个数其变量可以设置为
    x1,x2,x3…xn或者
    v1,v2,v3…vn这样的形式

    如下为一不固定长度的函数生成其,其中v为不定长度的参数

    function func=funcFactory(v)
    f=0;
    for i=1:length(v)
        xn=str2sym(['x',num2str(i)]);
        f=f+v(i)*xn;
    end
    func=matlabFunction(f);
    end
    

    使用方式:

    funcFactory([1 2 3 4 3])

    ans =

    包含以下值的 function_handle:

    @(x1,x2,x3,x4,x5)x1+x2.*2.0+x3.*3.0+x4.*4.0+x5.*3.0
    
    1.7 拟合结果转匿名函数

    (例)

    x=[2 2.5 3 3.5 4 4.5 5 5.5 6];
    y=[41 38 34 32 29 28 25 22 20];
    p=polyfit(x,y,3);
    f=matlabFunction(poly2sym(p ))

    f =

    包含以下值的 function_handle:

    @(x)x.*(-8.57e+2./5.4e+1)+x.^2.*(2.56e+2./9.9e+1)-x.^3.*(5.8e+1./2.97e+2)+7.05e+2./1.1e+1
    
    1.8 匿名函数的引用

    如下所示f2为f1的倒函数

    f1=@(x)x^2;
    f2=@(x)1/f1(x)
    f2(2)
    与前面定参匿名函数相似,此处f1也可被看作固定参数,即使之后改变也不会对f2造成影响

    1.9 无参数匿名函数

    (例)

    e=@()exp(1);
    e()
    t=@()datestr(now);
    t()

    ans =

    2.7183
    

    ans =

    '04-Mar-2021 20:18:30'
    
    1.10 递归匿名函数

    举阶乘函数为例:

    factorial=@(n) (n>1)*n*factorial(n-1)+(n==1)
    
    1.11 命名函数转化为匿名函数

    其实这么名称不够严谨,应该叫函数句柄对命名函数的复制

    fsum=@ mysum
    fsum(1,2)
    function c=mysum(a,b)
    c=a+b;
    end

    fsum =

    包含以下值的 function_handle:

    @mysum
    

    ans =

     3
    

    2 匿名函数的结构

    2.1 匿名函数数组
    f={@(x)x^2;@(x)3*x;@(x)x^x}
    f{1}(2)
    

    f =

    3×1 cell 数组

    {@(x)x^2}
    {@(x)3*x}
    {@(x)x^x}
    

    ans =

     4
    
    2.2 匿名函数结构体

    func.f1=@(x)x^2;
    func.f2=@(x)3*x;
    func.f3=@(x)x^x

    调用方式:

    func.f1(2)
    func.(‘f1’)(2)

    func =

    包含以下字段的 struct:

    f1: @(x)x^2
    f2: @(x)3*x
    f3: @(x)x^x
    

    ans =

     4
    
    2.3 匿名函数的非标量结构体数组

    func(1).f=@(x)x^2;
    func(2).f=@(x)3*x;
    func(3).f=@(x)x^x;

    func(1).f(2)
    ans =

     6
    
    2.4 functions函数使用

    functions函数可以获取匿名函数信息,对于1.3中的例子来说

    a=5;
    f=@(x)a*x^2;
    
    coe=functions(f)
    coe.workspace{1}
    

    coe =

    包含以下字段的 struct:

            function: '@(x)a*x^2'
                type: 'anonymous'
                file: 'E:\bin\匿名函数\Untitled.m'
           workspace: {[1×1 struct]}
    within_file_path: ''
    

    ans =

    包含以下字段的 struct:

    a: 5
    

    可以发现a是被存在函数信息中的
    同样对于1.8的例子来说:

    f1=@(x)x^2;
    f2=@(x)1/f1(x);
    coe=functions(f2)
    coe.workspace{1}

    coe =

    包含以下字段的 struct:

            function: '@(x)1/f1(x)'
                type: 'anonymous'
                file: 'E:\bin\匿名函数\Untitled2.m'
           workspace: {[1×1 struct]}
    within_file_path: ''
    

    ans =

    包含以下字段的 struct:

    f1: @(x)x^2
    
    2.5 局部命名函数的匿名函数列表

    localfunctions函数能够获取该m文件文件所有function创建函数,并构建匿名函数列表:

    fh=localfunctions
    
    function y=f1(x)
    y=sqrt(x)+x^2;
    end
    
    function y=f2(x)
    y=sqrt(x)+cos(x);
    end
    
    function y=f3(x)
    y=sqrt(x)+sin(x);
    end
    

    fh =

    3×1 cell 数组

    {@f1}
    {@f2}
    {@f3}
    

    3 匿名函数的使用

    3.1 以匿名函数为参数

    f1=@(x,y)max(x);
    opt(f1,1,2)
    function c=opt(f,a,b)
    c=f(a,b);
    end

    注下面的写法不适用于匿名函数,仅适用于function建立的函数

    f1=@(x,y)max(x);
    opt(‘f1’,1,2)
    function c=opt(f,a,b)
    c=f(a,b);
    end

    3.2 调用其它文件匿名函数

    在这里插入图片描述
    在这里插入图片描述

    3.3 使用匿名函数表示隐函数

    参考了这篇:MATLAB匿名函数的应用2
    例如有一隐函数:
    (ey+xy)1yx2y=0 (e^y+x^y)^{\frac{1}{y}}-x^2y=0
    可将其用匿名函数表示为:

    y=@(x)fzero(@(y)(exp(y)+x^y)^(1/y)-x^2*y,1);
    

    y(1)
    ans =

    2.7779
    

    这种写法每次只能输入一组变量,要进行向量运算,需要使用arrayfun辅助,写作如下格式:

    Y=@(x)arrayfun(@(xx)fzero(@(y)(exp(y)+xx^y)^(1/y)-xx^2*y,1),x);
    

    Y(1:5)
    ans =

    2.7779    1.1055    0.7759    0.6284    0.5425
    
    3.4 绘图匿名函数

    还有一些奇奇怪怪的用法,例如。。。。绘图

    x=-2:0.1:2;y=-2:0.1:2;
    f=@(x,y)plot(x,y.^2);
    f(x,y)

    在这里插入图片描述
    多个绘图命令用中括号括起来并用分号隔开:

    x=-2:0.1:2;y=-2:0.1:2;
    f=@(x,y)[plot(x,y.^2,'-o','LineWidth',1.8);title('x^2','FontSize',14);xlabel('x','FontSize',13)];
    f(x,y)
    

    在这里插入图片描述

    展开全文
  • inline 函数官方文档 inline Construct inline object. inline will be removed in a future release. Use anonymous functions instead.inline(EXPR) constructs an inline function object from the MATLAB ...

    inline 函数

    官方文档

    inline Construct inline object.

    inline will be removed in a future release. Use anonymous
    functions instead.
    
    inline(EXPR) constructs an inline function object from the
    MATLAB expression contained in the string EXPR.  The input
    arguments are automatically determined by searching EXPR
    for variable names (see SYMVAR). If no variable exists, 'x'
    is used.
    
    inline(EXPR, ARG1, ARG2, ...) constructs an inline
    function whose input arguments are specified by the
    strings ARG1, ARG2, ...  Multicharacter symbol names may
    be used.
    
    inline(EXPR, N), where N is a scalar, constructs an
    inline function whose input arguments are 'x', 'P1',
    'P2', ..., 'PN'.
    
    Examples:
      g = inline('t^2')
      g = inline('sin(2*pi*f + theta)')
      g = inline('sin(2*pi*f + theta)', 'f', 'theta')
      g = inline('x^P1', 1)
    

    % 使用inline 创建初等函数的程序很简洁
    %要计算多个点的函数值是,注意四种数组运算的使用

    % 用法:
    %1据expr建立内联函数,函数自变量符号根据表达式自动确定;
    %2: 定义是指定自变量符号
    %3:自变量符号为x,p1

    %定义匿名函数
    % 定义方法; @(参数列表)(函数列表)
    % 例 f=@(x,y)(x.^2+y.^2)
    %val=f(1:5,11:15)

    返回:
    % val =

    122 148 178 212 250

    展开全文
  • 立即调用函数表达式 给函数体加大括号,在有变量声明情形下,没有任何区别 但是,如果只是【自动执行】情形下,就会不同 因为,一个匿名函数,不赋值或函数体不加小括号,是不能自动执行//以下情形并无差别var...

    JavaScript是每个前端人员必须要掌握的知识点,在日常代码中,我们经常都会用到自执行函数表达式。今天要给大家分享的就是JavaScript中函数表达式和自执行函数表达式的用法。

    立即调用函数表达式

    给函数体加大括号,在有变量声明的情形下,没有任何区别

    但是,如果只是【自动执行】的情形下,就会不同

    因为,一个匿名函数,不赋值或函数体不加小括号,是不能自动执行的

    //以下情形并无差别var count100 = function getCount100(){ return(100) }();//100var count200 = (function getCount200(){ return(200) })();//200,加小括号和count100没有区别var count = (function getCount(n){ return(n) })(300);//300,传参的情形//不赋值变量,函数体加小括号,自动执行(function aaa(){console.log("aaa")})();// aaaconsole.log(aaa);//aaa is not defined//一个匿名函数,函数体不加小括号,是不能自动执行的function bbb(){console.log("bbb")}();//Unexpected token )

    ==实际上【自执行函数表达式】可以有很多复杂的情形==,比如下边的复杂例子

    b2520594c1483c90c6611e70d3a5a00f.png
    //函数声明置于小括号中,没有自执行( function fn(){console.log("aaa");return "bbb"} );console.log("fn res is " + fn);// fn is not defined//函数声明置于小括号中,且自执行( function fn(){console.log("aaa");return "bbb"}() );//输出aaaconsole.log("fn res is " + fn);// fn is not defined//函数声明置于小括号中,且自执行,注意,负责执行的一对小括号移到了外部( function fn(){console.log("aaa");return "bbb"} )();//输出aaaconsole.log("fn res is " + fn);// fn is not defined//函数声明置于小括号中,函数未执行但将其赋值给fn( fn = function aaa(){console.log("aaa");return "bbb"} )console.log("fn res is " + fn());//fn res is bbb//函数声明置于小括号中,函数执行,并且将其赋值给fn( fn = function aaa(){console.log("aaa");return "bbb"}() );//输出aaaconsole.log("fn res is " + fn);//fn res is bbb//函数声明置于小括号中,将其赋值给fn,并且在外部执行之(注意末尾小括号位置)( fn = function aaa(){console.log("aaa");return "bbb"} )();//输出aaaconsole.log("fn res is " + fn());//再次输出aaa,并输出fn res is bbb// 匿名函数在自执行,注意末尾小括号位置( function(){console.log("aaa");return "bbb"} )();//输出aaa// 匿名函数在自执行,可见和上边的例子效果一致( function(){console.log("aaa");return "bbb"}() );//输出aaa//在括号外赋值的函数表达式,例一。以下三例的结果是一致的var fn = function aaa(){return "bbb"}();console.log("fn is res " + fn);//fn is res bbb//例二var fn = (function aaa(){return "bbb"})();console.log("fn is res " + fn);//fn is res bbb//例三var fn = (function(){return "bbb"})();console.log("fn is res " + fn);//fn is res bbb-------//正常的函数,注意fn的name属性自动设置为fnfunction fn(){return "bbb"};console.log(fn.name);//fnconsole.log("fn is res " + fn());//fn is res bbb//函数表达式,注意fn的name属性是fnvar fn = function(){return "bbb"};console.log(fn.name);//fnconsole.log("fn is res " + fn());//fn is res bbb//函数表达式,注意fn的name属性是aaavar fn = function aaa(){return "bbb"};console.log(fn.name);//aaaconsole.log("fn is res " + fn());//fn is res bbb

    对于如此多的不同情形,可以总结如下:

    在不赋值的情形下,在小括号中的函数或者函数表达式,被阻止声明为一个全局的变量,同时其内部是可执行的

    但如果其在小括号中,被赋值给了某一变量,那么该函数或者函数表达式就会被曝露出去,可以在外部调用

    函数表达式在赋值给一个变量时,该变量会拥有一个name属性,它的值取决于函数表达式是否为匿名函数

    如果为匿名函数,则变量的name属性值为自身,如果为具名函数,则变量的name属性值为具名函数的name值

    影响表达式执行的末尾的一对小括号,对词法上的影响很小

    即,影响函数表达式的因素,由大到小是: 赋值与否 => 匿名与否 => 何时执行

    以上就是关于JavaScript中函数表达式和自执行函数表达式的用法,想要了解更多web前端的学习资料,可以关注“武汉千锋”微信公众号!

    展开全文
  • Matlab中的匿名函数的使用

    千次阅读 2014-07-24 10:03:00
    Matlab7.0以后的版本中,出现了一种新的函数类型–匿名函数,不但能够完成原来版本中内联函数(inline)的功能,还提供了其他更方便的...1,匿名函数的基本用法。   handle = @(arglist)anonymous_function

    在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    61    65    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.5000

    c作为表达式中的参数,进行了数据传递。上面都是单重匿名函数,也可以构造多重匿名函数,如:

    >> f=@(x,y)@(a) x^2+y^+a; >> f1=f(2,3) f1 =     @(a)x^2+y^+a >> f2=f1(4) f2 =     85

    每个@后的参数从它后面开始起作用,一直到表达式的最后。

    2.使用匿名函数实现符号函数的赋值运算

    在老版本的Matlab中,这个功能是由inline函数完成的,现在用匿名函数完成此功能。比如:知道z=2x^3+4x+5,求z在x=3处的2阶导数值。可以先用符号函数算出z的2阶导数的表达式,然后通过匿名函数,把x赋予3的值,得到最后结果:

    >> syms x; %定义符号变量 >> z=2*x^3+4*x+5; %定义表达式 >> z1=diff(z,2) %求z的2阶导数的表达式 z1 = 12*x >> z2=eval_r(['@(x)' vectorize(z1)]); %vectorize函数的功能是使内联函    %数适合数组运算的法则 >> z2(3) ans =     36
    展开全文
  • matlab匿名函数的学习笔记,@是怎么用的 用法: 变量名=@(输入参数列表) 运算表达式 f=@(x)acos(x) 表示 f 为函数句柄,@是匿名函数的意思 @是定义句柄的运算符, 函数句柄的使用方法也和函数是一样的。 f=@(x)...
  • 匿名函数的基本用法: handle = @(arglist)anonymous_function 其中handle为调用匿名函数时使用的名字。arglist为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔。anonymous_function为匿名函数的...
  • 一般函数 1、函数名称要与.m文件要一致,不然会报错maxv.m not found. 2、编写好函数以后,在控制台,输入help 文件名 ...匿名函数 格式如下 f = @(arglist)expression val=@(a,b,c) a+b+c; a=val(3,6,7) b=.
  • MATLAB中自带遗传算法函数GA的用法

    万次阅读 2017-06-05 10:47:26
    ga 用遗传算法寻找函数的最优解 语法规则 x = ga(fitnessfcn,nvars) ...x = ga(fitnessfcn,nvars,A,b) ...x = ga(fitnessfcn,nvars,A,b,Aeq,beq) ...其中fitnessfc为函数的句柄或者为匿名函数  
  • matlab中@的用法

    2020-06-14 22:26:38
    场景:有时需要定义一个函数来计算某个表达式值,可以直接用语法:@(输入参数)表达式,来创建一个匿名函数,返回该函数句柄。然后就可以用该句柄来计算了。 优点:减少代码量,简洁清晰。 实例:在曲线拟合中需要...
  • 匿名用户1级2012-04-28 回答在Matlab7.0以后的版本中,出现了一种新的函数类型–匿名函数,不但...我最近学习了一些有关匿名函数的内容,现在总结一下:1,匿名函数的基本用法。handle = @(arglist)anonymous_funct...
  • 目录 MATLAB函数定义: ...4.匿名函数 5、Syms+subs: 无需M文件,直接定义; 6、字符串+subs:无需M文件,直接定义; 7、直接通过@符号定义. Matlab feval函数用法 语法 描述 例子 MATLAB...
  • matlab 建模核心用法

    2020-02-09 17:10:42
    文章目录(1) 最基础用法(2) matlab 基础函数(3) matlab 文件导入(4) matlab 作图(5) matlab 匿名函数(6) matlab 随机数   (1) 最基础用法 (1) 在每一行语句后面加上分号,表示不显示运行结果。 (2) 多行注释...
  • MATLAB 学习心得(1) 函数句柄

    千次阅读 2018-02-08 21:07:42
    函数句柄的用法如下handle = @functionnamehandle = @(arglist)anonymous_function可以用来定义函数,进而直接进行调用也可以调用MATLAB里面的一些内置函数f = @(x,y) x+y 这样写叫匿名函数,不用去再定义x,y,进而...
  • *匿名函数 *input/num2str用法 *子函数(关于全局变量global使用、清除) *脚本建立 在command窗口输入脚本文件名,能直接输出结果 定义函数格式: function [out_args]=ch2_1(input_args) %ch2_1为函数...
  • MATLAB中也有匿名函数的用法,整理对比记录一下。 python lambda函数 lambda函数 python 使用 lambda 来创建匿名函数。 lambda只是一个表达式,函数体比def简单很多。 lambda的主体是一个表达式,而不是一个代码块...
  • 匿名用户1级2014-05-02 回答在MATLAB中,选择结构可由两种语句来实现。(1) if语句if语句最简单用法为:if 表达式;程序模块;endif语句另一种用法为:if 表达式程序模块1else程序模块2end例1 使用if语句判断学生...
  • 拣选 MathWorks 官方群组 Cody 中一些有趣的代码问题,分 6 章讲解这些优秀示例代码中使用数组、字符串操作、正则表达式以及匿名函数等方面的 MATLAB 编程技巧,并对其中较为典型和精彩的用法做扼要点评,对一些复杂...
  • Matlab常用知识整理

    2020-07-17 20:17:19
    Matlab 接受字符串并转为符号表达式,inline函数,匿名函数形式方法汇总 将sym类型数据转换成double型:A=double(B) matlab中eval用法 对于sym(符号对象),可以用char或string进行转换 变量赋值 数组下标...
  • 本书拣选 MathWorks 官方群组 Cody 中一些有趣的代码问题,分 6 章讲解这些优秀示例代码中使用数组、字符串操作、正则表达式以及匿名函数等方面的 MATLAB 编程技巧,并对其中较为典型和精彩的用法做扼要点评,对一些...
  • 本书拣选 MathWorks 官方群组 Cody 中一些有趣的代码问题,分 6 章讲解这些优秀示例代码中使用数组、字符串操作、正则表达式以及匿名函数等方面的 MATLAB 编程技巧,并对其中较为典型和精彩的用法做扼要点评,对一些...
  • Matlab7.0以后的版本中,出现了一种新的函数类型–匿名函数,不但能够完成原来版本中内联函数(inline)的功能,还提供了其他更方便的...1,匿名函数的基本用法。   handle = @(arglist)anonymous_function
  • 匿名用户1级2018-11-17 回答表达方式:eval()函数的功能就是将括号内的字符串视为语句并运行,其用法为:例如: eval('y1=sin(2)')就是相当于在matlab命令窗口输入了y1=sin(2)这条命令。多在循环中使用,可以对多个...
  • 图像 灰度共生矩阵怎么在matlab中实现,要具体源程序相关问题:匿名网友:matlab提供了现成的函数graycomatrix生成共生矩阵graycoprops计算其特征值具体用法:glcm = graycomatrix(I)从图像I创建灰度...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

matlab匿名函数的用法

matlab 订阅