24小时热门版块排行榜    

查看: 2304  |  回复: 33
本帖产生 1 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

cooooldog

铁杆木虫 (著名写手)

ส็็็

[交流] 运行这段代码到出图片,你的电脑用了多久? 已有14人参与

测试一下Mathematica的效率:
CODE:
ClearAll["Global`*"];
t0 = AbsoluteTime[];
list = {{0, 0}};
last = {{0}, {0}};
GetNextPoint[pt_] := Module[{r,
   t1 = {{0.83, 0.03}, {-0.03, 0.86}}, p1 = {0, 1.5},
   t2 = {{0.2, -0.25}, {0.21, 0.23}}, p2 = {0, 1.5},
   t3 = {{-0.15, 0.27}, {0.25, 0.26}}, p3 = {0, 0.45},
   t4 = {{0, 0}, {0, 0.17}}, p4 = {0, 0}},
  r = Random[];
  If[r <= 0.85, t1.pt + p1,
   If[r <= 0.91, t2.pt + p2, If[r <= 0.99, t3.pt + p3, t4.pt + p4]]]]
For[i = 0, i < 100000, i++, last = GetNextPoint[last];
list = Append[list, First[Transpose[last]]];]
h = ListPlot[list, PlotStyle -> {PointSize[0.002], Red},
   Axes -> False];
range = First /@ Differences /@ (PlotRange /. Options[h]);
Show[h, AspectRatio -> Last@range/First@range]
Print[AbsoluteTime[] - t0]

回复此楼
ส็็็็็็็็็็็็็็็็็็็็
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chyanog

金虫 (小有名气)


小木虫: 金币+0.5, 给个红包,谢谢回帖
jjdg: 程序强帖+1, 强帖 2014-10-18 00:23:51
说实话,代码写得有点糟,不符合Mathematica style,而且速度太慢。
同样的算法一样的效果其实只需不到半秒甚至不到0.1s
CODE:
Clear["`*"];
t0 = AbsoluteTime[];
ifs[prob_, A_, init_, maxIter_] :=
  FoldList[#2.{#[[1]], #[[2]], 1} &, init,
   RandomChoice[prob -> A, maxIter]];

init = {0., 0.};
prob = N@{85, 6, 8, 1};
A = N@{{{0.83, 0.03, 0}, {-0.03, 0.86, 1.5}}, {{0.2, -0.25, 0}, {0.21,
       0.23, 1.5}}, {{-0.15, 0.27, 0}, {0.25, 0.26, 0.45}}, {{0, 0,  0}, {0, 0.17, 0}}};
iter = 10^5;
pts = ifs[prob, A, init, iter];
Graphics[{PointSize[0.002], Green, Point[pts]}]
AbsoluteTime[] - t0

28楼2014-10-06 23:21:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 34 个回答

mshwangg

至尊木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
运行这段代码到出图片,你的电脑用了多久?
牛人啊,树叶挺漂亮
还可以画别的吗?分享下
2楼2014-09-15 23:08:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

walk1997

金虫 (著名写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
21.0682050
mshwangg 的机器是AMD的cpu?
3楼2014-09-17 08:43:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzs510

铜虫 (初入文坛)



小木虫: 金币+0.5, 给个红包,谢谢回帖
ClearAll["Global`*"];
t0 = AbsoluteTime[];
list = {{0, 0}};
last = {{0}, {0}};
GetNextPoint[pt_] := Module[{r,
   t1 = {{0.83, 0.03}, {-0.03, 0.86}}, p1 = {0, 1.5},
   t2 = {{0.2, -0.25}, {0.21, 0.23}}, p2 = {0, 1.5},
   t3 = {{-0.15, 0.27}, {0.25, 0.26}}, p3 = {0, 0.45},
   t4 = {{0, 0}, {0, 0.17}}, p4 = {0, 0}},
  r = Random[];
  If[r <= 0.85, t1.pt + p1,
   If[r <= 0.91, t2.pt + p2, If[r <= 0.99, t3.pt + p3, t4.pt + p4]]]]
For[i = 0, i < 100000, i++, last = GetNextPoint[last];
list = Append[list, First[Transpose[last]]];]
h = ListPlot[list, PlotStyle -> {PointSize[0.002], Red},
   Axes -> False];
range = First /@ Differences /@ (PlotRange /. Options[h]);
Show[h, AspectRatio -> Last@range/First@range]
Print[AbsoluteTime[] - t0]
4楼2014-09-17 10:31:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见