找回密码
 注册
Simdroid-非首页
查看: 162|回复: 9

【求助】匿名函数的使用

[复制链接]
发表于 2010-5-13 18:44:54 | 显示全部楼层 |阅读模式 来自 辽宁沈阳
[i=s] 本帖最后由 star19831106 于 2010-5-14 14:16 编辑 [/i]

syms x y z;
f=@(x,y)x^2+2*y+z;
f(1,1)
得到
ans =z + 3


g=x^3+3*y+z;
f=@(x,y)g;
f(1,1)
得到的确是:
ans =
x^3 + 3*y + z

由于函数比较复杂,很难用第一方式显式表示。
请问如何用函数传递的形式,也就是第二中形式得到第一种效果?
谢谢!!    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     上面叙述的比较乱
其实就是有一个3变量的函数
f(x1,x2,x3);
要根据它定义3个单变量的函数

f1(x1)=f(x1,a,b);%a,b为常数
f2(x2)=f(a,x2,b);
f3(x3)=f(a,b,x3);
在以后的程序中调用
发表于 2010-5-14 10:07:09 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
感觉这个问题用匿名函数比较难以处理,不知道哪位高手能用匿名函数来解决这个问题。

匿名函数是用来解决简单函数问题的,复杂函数问题建议用function函数。
回复 不支持

使用道具 举报

发表于 2010-5-14 11:21:07 | 显示全部楼层 来自 广东
楼主你写得有点乱,我猜你是不是想得到类似这样的效果?

  1. f =  x^2+y^2
  2. g = f^3+x*f
复制代码
用x,y显式表示g?要是这样的话,可以参考如下代码

  1. >> f = @(x,y) x^2+y^2;
  2. >> g = @(x,y) f(x,y)^3+x*f(x,y)

  3. g =

  4.     @(x,y)f(x,y)^3+x*f(x,y)

  5. >> g(1,1)

  6. ans =

  7.     10
复制代码
回复 不支持

使用道具 举报

发表于 2010-5-14 11:31:45 | 显示全部楼层 来自 湖北武汉
看到LS的朋友的新书预告了。呵呵。到时一定去书店搞本。alexqxp,taohe,这是我所熟知的人的第三本书了。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-14 14:10:24 | 显示全部楼层 来自 辽宁沈阳
本帖最后由 star19831106 于 2010-5-14 14:14 编辑

多谢两位版主的回复!
谢谢!
我叙述的有些乱

其实就是有一个3变量的函数
f(x1,x2,x3);
要根据它定义3个单变量的函数

f1(x1)=f(x1,a,b);%a,b为常数
f2(x2)=f(a,x2,b);
f3(x3)=f(a,b,x3);
在以后的程序中调用。
回复 不支持

使用道具 举报

发表于 2010-5-14 14:50:47 | 显示全部楼层 来自 广东
本帖最后由 rocwoods 于 2010-5-14 14:57 编辑

呵呵,多谢shunfly兄的支持!再有差不多一个月就上市了吧,北航出版社出版。
回到楼主问题,你这个可以用双重匿名函数实现,譬如:

  1. f = @(y,z)@(x) (x+y)*z;
  2. a = 1;b = 2;
  3. fab = f(a,b);
复制代码
fab就是y = 1,z = 2时你要的关于x的那个函数。可以利用functions函数查看fab的详细信息:

  1. >> finfo = functions(fab);
  2. >> finfo.workspace{2,1}

  3. ans =

  4.     varargout: {[1x1 function_handle]}
  5.             y: 1
  6.             z: 2

  7. >> finfo.workspace{2,1}.varargout

  8. ans =

  9.     @(x)(x+y)*z

  10. >> finfo.workspace{2,1}.y

  11. ans =

  12.      1

  13. >> finfo.workspace{2,1}.z

  14. ans =

  15.      2
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-5-14 16:30:13 | 显示全部楼层 来自 辽宁沈阳
多谢rocwoods 帮助!
期待大作早日问世!!
回复 不支持

使用道具 举报

发表于 2010-5-14 20:36:48 | 显示全部楼层 来自 新加坡
才注意到rocwoods的大作快要出来了,6月我正好回国,如果能看到的话,买一本支持一下。

另外,不知道楼主的真正的应用是怎样的,可否直接定义三个匿名函数分别对应于f1,f2,f3?
回复 不支持

使用道具 举报

发表于 2010-5-15 00:17:47 | 显示全部楼层 来自 北京
8# taohe
好久不见taohe兄了,多谢taohe兄支持!拙作现在正在最后的校对,估计再有半个多月可以交付印刷了。
我猜楼主的应用可能类似于下面这样,通过参数输入确定最后的函数,譬如变参数积分:

  1. f = @(a,b) @(x) sin(a*x).*x.^2.*cos(b*x);
  2. quadl(f(1,1),0,3)
复制代码
回复 不支持

使用道具 举报

发表于 2010-5-15 16:35:18 | 显示全部楼层 来自 湖南湘潭
5# star19831106

a = 1;
b = 2;
f = @(x,y,z) x^3+3*y+z;
f1 = @(x) f(x,a,b);
f2 = @(y) f(a,y,b);
f3 = @(z) f(a,b,z);
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-5 01:24 , Processed in 0.060378 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表