公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

+1 投票
4.3k 浏览

我有一段matlab代码如下
x = linspace(-0.003,0.003,501);
y = x;
[xx,yy] = meshgrid(x,y);
[ph,r] = cart2pol(xx,yy); reclover = 0;
现在我想写成mathematica,自己写了一段

x = Subdivide[-0.003, 0.003, 500];
y = x;
xx = Table[x, Length[y]];
yy = Table[y, Length[x]];
ToPolarCoordinates[{xx, yy}]


但是运行速度太慢了。不知道是写错了还是什么。

用户: 无知小儿 (116 分)
谢谢两位的回答,已经解决了我的问题。不过还有一点就是速度和matlab还有点差距,不知道还有没有提高空间。
要和MATLAB比早说啊。看编辑。

3 个回答

+3 投票
 
已采纳
x = Subdivide[-0.003, 0.003, 500];
Quiet[ToPolarCoordinates /@ Tuples[{x, x}]]

 

用户: Lozmlve*永 (1.2k 分)
采纳于 用户:无知小儿
+2 投票
x = Subdivide[-0.003, 0.003, 501];
ToPolarCoordinates@Flatten[Outer[List, x, x], 1]

想要加速到更快的境界吗,骚年:

cf2 = Compile[{{x, _Real, 1}, {y, _Real}}, #, RuntimeAttributes -> Listable] &@
   ToPolarCoordinates[{x, y}](*{Sqrt[x^2+y^2],ArcTan[x,y]}*);

xl = Array[# &, 1000, {-0.003, 0.003}];
Flatten[cf2[xl, xl], {{1, 3}}]; // AbsoluteTiming

 

用户: xzczd (2.2k 分)
修改于 用户:xzczd
像这种压一层的,我常用Catenate,可以不用指定层Catenate[Outer[List, x, x]],另外,9好像没有Subdivide?
嗯,也没有ToPolarCoordinates,我是在 王胖子吃火锅 的站上测试的……在版本9我想实现Subdivide的功能一般是用Array的第3种语法。
+1 投票
AbsoluteTiming[
 x = Subdivide[-0.003, 0.003, 5000];
 m = Transpose@Tuples[{x, x}];
 Transpose@{Sqrt[Plus @@ (m m)], ArcTan @@ m};
 ]

 

用户: chy (91 分)
修改于 用户:chy
...