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

一点心得,关于生成变量名(arrayfun/evalin)

[复制链接]
发表于 2011-1-5 17:37:58 | 显示全部楼层 |阅读模式 来自 山东烟台
本帖最后由 messenger 于 2011-1-6 20:07 编辑

在看到bainhome 版主的帖子中,有如下问题:
  1. ii=1:3;
  2. q=strcat({'f'},num2str(ii','%d'));
  3. arrayfun(@(x) assignin('base',q{x},l{x}*u{x}),1:3)
  4. f1,f2,f3
复制代码
这也是生成变量名的不错的方法,但是当ii1:30的时候就会发现q是这样的:

  1. q =
  2.     'f 1'
  3.     'f 2'
  4.     'f 3'
  5.     'f 4'
  6.     'f 5'
  7.     'f 6'
  8.     'f 7'
  9.     'f 8'
  10.     'f 9'
  11.     'f10'
  12.     'f11'
  13. ……
复制代码
主要是f和1之间的空格问题,目前还没有找到去掉空格的好的办法,用:

  1. q=arrayfun(@(i)sprintf('x%d',i),1:30,'uniformoutput',0)
复制代码
可以解决


还有一个问题是在
  1. ii=1:15;
  2. q=arrayfun(@(x)sprintf('s(%d).f1=10*rand(3+%d,4+%d)',x,x,x),...
  3. ii,'UniformOutput',false);
  4. cellfun(@eval,q)
复制代码
中使用eval的问题
使用evalin可以解决
  1. arrayfun(@(x)evalin('base',sprintf('s(%d).f1=10*rand(3+%d,4+%d)',x,x,x)),1:15);
复制代码

评分

1

查看全部评分

发表于 2011-1-5 17:44:33 | 显示全部楼层 来自 华南理工大学
Simdroid开发平台
啊。。。。好帖哟!!

学习了!哈哈!!

谢谢!

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-1-5 20:26:03 | 显示全部楼层 来自 北京
本帖最后由 bainhome 于 2011-1-6 00:20 编辑

嗯,evalin和assignin是一对函数,一个朝workspace里赋值,一个从workspace往外倒,assignin可以做的,evalin就可以,想法很好,这篇文档有价值,先赞一个!
另外,第一个问题,用num2str,去除中间空格也有解,明天qibbxxt会写出来,这是他想出来的,我就不掠美了。
ps:我已不是版主,只是个闲人。这篇文档里有很多东西值得商榷,尤其后期的东西,感觉还有很多东西没写到尽兴,虎头蛇尾。大家的讨论会使得问题更多地得到解决,文档已经写完,但编辑到论坛上很花功夫,等过两天帖子开了,可以让这两帖合并,便于集中分析。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-1-6 08:50:54 | 显示全部楼层 来自 河北廊坊
第一个问题用num2str,后面的"%d"是格式,因为右对齐,所以个位数前面会有空格的出现
修改格式为左对齐就可以了
  1. q=strcat({'f'},num2str((1:11)','%-d'));
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-10-5 03:28 , Processed in 0.034381 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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