zoukankan      html  css  js  c++  java
  • Matlab匿名函数

    http://zhidao.baidu.com/link?url=B2L2JaSU-HoVoRtj-tjryp9ndnPVIxVLnCYzdOtmkkpKYQ6AuxWIfrH6WH3vfPjB32WF5bmSwO2ZhnK_zgGUwK
    比如定义f(x)=x^2,可以写为
    f=@(x)(x.^2)
    其中@(x)(x.^2)就是匿名函数,第一个括号里面是自变量,第二个括号里面是表达式,@是函数指针
    f=@(x)(x.^2)表示将匿名函数@(x)(x.^2)赋值给f,于是f就表示该函数。
    于是f(2)=2.^2=4;f(1:3)=[1:3].^2=[1 4 9]等等

    定义匿名函数时也可以调用别的匿名函数,比如
    f1=@(x,y)(x.^2+y.^2)
    定义了函数x^2+y^2
    f2=@(t)(f1(t,2))
    定义了函数t^2+4
    f3=@(x)(f1(x(1),x(2)))
    定义了函数x(1)^2+x(2)^2
    使用匿名函数时一定要注意函数本身的参数形式,如
    f1(2,3)
    表示2^2+3^2
    f2(3)=3
    表示3^2+4
    f3([1,2])
    表示1^2+2^2

    总结匿名函数的用法

    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

     

  • 相关阅读:
    集体编程智慧(发现的一些代码问题)
    jQuery实现图片伦播效果(淡入淡出+左右切换)
    require
    小技巧
    JavaScript--面向对象--猜拳游戏
    简单封装cookie操作
    less
    进程相关

    线程和进程相关
  • 原文地址:https://www.cnblogs.com/MarshallL/p/4042508.html
Copyright © 2011-2022 走看看