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

关于arrayfun在复杂匿名函数中的用法请教

[复制链接]
发表于 2010-11-30 22:51:28 | 显示全部楼层 |阅读模式 来自 北京
本帖最后由 bainhome 于 2010-11-30 23:39 编辑

今天测试arrayfun函数的用法,例如下面的这个函数:

给出其参变量a,b,c的变化规律如下列矩阵,第一列为a,第二列为b,第三列为c参变量的数据:
  1. >> data=[2,10,pi/3;4.5,100,5*pi/6;6,1000,2*pi/3]
  2. data =
  3. 1.0e+003 *
  4. 0.0020 0.0100 0.0010
  5. 0.0045 0.1000 0.0026
  6. 0.0060 1.0000 0.0021
复制代码
想通过定义符合匿名函数f:
  1. >> f=@(a,b,c,x) a*sin(b*x+c)+2*a*sin(b/3*x-2*c)
  2. f =
  3. @(a,b,c,x)a*sin(b*x+c)+2*a*sin(b/3*x-2*c)
复制代码
一次在一幅figure中绘制出不同参变量下的f函数图形,如果代入data数据,当然就应当形成三条曲线,每次[a,b,c]对应取data(i,1),data(i,2),data(i,3)形成一组参数绘图。大致上看了看rocwoods大作中所有arrayfun函数的用法,发现老弟给出的命令中没有对多参数条件下的arrayfun绘制图像示例,不知道能否经由嵌套arrayfun来实现?另外所给事关plot和arrayfun结合的示例均是让plot的自变量与arrayfun自身的循环节奏同调,如下例(见rocwoods书page53,例4.2-1续):
  1. ...
  2. aa=0:.01:2;
  3. plot(aa,arrayfun(@(a) fzero(f(a),4),aa),'*-')
  4. ...
复制代码


注:关于用循环实现的方式个人以为就不必讨论了,目的纯粹是研究arrayfun的用法。
发表于 2010-12-1 08:46:35 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
一个arrayfun的确比较难,我用了两个
  1. clear;clc;close all
  2. hold on
  3. data=[2,10,pi/3;4.5,100,5*pi/6;6,1000,2*pi/3];
  4. f=@(x,a,b,c) a*sin(b*x+c)+2*a*sin(b/3*x-2*c);
  5. x=linspace(0,2);
  6. arrayfun(@(a,b,c)plot(x,arrayfun(@(x)f(x,a,b,c),x),'color',rand(1,3)),data(:,1),data(:,2),data(:,3));
  7. legend(strcat({'第'},num2str((1:size(data))','%d'),{'条曲线'}),'Location','best');
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-12-1 10:05:06 | 显示全部楼层 来自 北京
用一个arrayfun也能实现,就是定义匿名函数f的时候,f应该接受向量化输入,这个问题比较简单,不用写成点乘的形式
  1. f=@(x,a,b,c) a*sin(b*x+c)+2*a*sin(b/3*x-2*c);
复制代码
已经可以接受x为向量化形式了。所以稍微改动祁老弟的代码如下即可:

  1. clear;clc;close all
  2. hold on
  3. data=[2,10,pi/3;4.5,100,5*pi/6;6,1000,2*pi/3];
  4. f=@(x,a,b,c) a*sin(b*x+c)+2*a*sin(b/3*x-2*c);
  5. x=linspace(0,2);
  6. arrayfun(@(a,b,c)plot(x,f(x,a,b,c),'color',rand(1,3)),data(:,1),data(:,2),data(:,3));
  7. legend(strcat({'第'},num2str((1:size(data))','%d'),{'条曲线'}),'Location','best');
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-12-1 10:58:38 | 显示全部楼层 来自 河北廊坊
3# rocwoods
恩,看来对函数的理解还应该再深刻一些
对问题的分析应该精益求精,这样才会有深入的进步,向吴兄学习
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-1 14:16:17 | 显示全部楼层 来自 北京
刚回来看到。
昨天脑子进死循环了,单变量条件下看到示例是写成
  1. arrayfun(@(a) f(a),...)
复制代码
想当然就按这个思路往下走,没想到arrayfun中需要把函数写成
  1. arrayfun(@() f(x,a,b,c),...)
复制代码
ps:嵌套arrayfun的方式我也很喜欢。
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-10-5 01:26 , Processed in 0.061942 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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