公告:1)网站程序升级:Q2A升级到1.8.6,Wordpress升级到5.7.2
2)修复了头像加载慢与提交问题反应慢等问题
2021-06-16

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

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

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

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

社区建议QQ群:365716997

分类

+1 投票
1.7k 浏览

我有一段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.1k 分)
采纳于 用户:无知小儿
+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.1k 分)
修改于 用户: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
...