声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1253|回复: 3

[编程技巧] Matlab代码趣味编程大赛(一)------谢绝for循环

[复制链接]
发表于 2008-6-6 21:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  1. %author:huright
  2. %date:2008年6月6日
  3. %《Matlab原理与工程应用》P145习题
  4. clc
  5. clear
  6. n=input('外接圆的个数\n');
  7. r=2;
  8. r1=r*sin(pi/n)/(1-sin(pi/n));
  9. t = 0:.01:2*pi;
  10. plot(r.*cos(t),r.*sin(t));
  11. axis equal
  12. hold on
  13. theta=(0:(n-1))*(2*pi/n);
  14. a=(r+r1).*cos(theta);
  15. b=(r+r1).*sin(theta);
  16. [aa,xi]=meshgrid(a,r1.*cos(t));
  17. [bb,yi]=meshgrid(b,r1.*sin(t));
  18. plot(xi+aa,yi+bb);
  19. hold off
复制代码
这是《Matlab原理与工程应用》一书的一个习题,偶然看来,感觉有趣,尝试写了代码,运行结果如图,源代码已经给出。由于要求不用for循环。
相邻的圆是相切的。
假如你有学习Matlab的兴趣和时间,不妨尝试一下。记住“不用for循环”!!!
提示:是不是可以用极坐标实现?

[ 本帖最后由 huright 于 2008-6-6 21:27 编辑 ]
ncircle2.jpg
ncircle.jpg
回复
分享到:

使用道具 举报

发表于 2008-6-7 03:21 | 显示全部楼层
响应bainhome的号召,来个用到arrayfun函数的做法。由于这个函数是7.1后才有的,目前使用的人不多。希望借此让更多的人了解其用法。很多时候用起来还是很方便的。详细用法可以参考帮助文档。
  1. n=input('外接圆的个数\n');
  2. r=2;
  3. r1=r*sin(pi/n)/(1-sin(pi/n));
  4. t = 0:.01:2*pi;
  5. plot(r.*cos(t),r.*sin(t));
  6. axis equal
  7. hold on
  8. theta=(0:(n-1))*(2*pi/n);
  9. a=(r+r1).*cos(theta);
  10. b=(r+r1).*sin(theta);
  11. arrayfun(@(a,b) plot(r1*cos(t)+a,r1*sin(t)+b),a,b)
复制代码

评分

2

查看全部评分

发表于 2008-6-7 03:39 | 显示全部楼层
今天偶然看到这个帖子,直觉认为arrayfun可以圆满解决。但是就这个函数而言,我并不是最好的人选,简单试了两下没试出来就游戏去了,因此推荐rocwoods来做。
PS:现如今的循环,在MATLAB中虽然不能说是个“长相羞走林青霞、唱歌气坏王靖雯”的功能,但至少也不是笑傲江湖里的李YP,摆“S”pose的芙蓉JJ能比。即使是恐龙,人家也开始涂脂抹粉装腔作势了,晚上碰见,其实也不那么吓人了,没必要奔走相告非要顶风躲十里,用个循环跟和如花被逼洞房似的:lol 。现在我写代码,原则一向是能用就行:怎么快、怎么简单怎么来,把合理运行条件考虑好,多加判断流程,易于维护即可。等需要考虑速度的时候再考虑速度,未必就来不及,因为真要写这种代码,也不一定比大多数人差哦:victory:

[ 本帖最后由 bainhome 于 2008-6-7 03:46 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2008-6-7 21:05 | 显示全部楼层
大家对Matlab掌握的熟练程度不同,编写出来的代码就会有差异。
实际编程时,“解决问题”至上。
平时学习时,养成良好的变成习惯也很重要。
欢迎大家跟帖代码,不同的角度,会带来不一样的感受:victory:
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-14 19:53 , Processed in 0.083175 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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