我希望对我在Integration in Mathematica中提到的问题做一个很好的演示,但它现在非常缓慢而且Manipulate一点也不顺利。
考虑到以下情况,我是否有办法改善这种情况。这是一个更持续的动态。此外,我无法使用
打开机器人控制 - >机械手[Appearance->打开]
arrows = ParallelTable[{
RandomVariate[NormalDistribution[0, Sqrt[1]]],
RandomVariate[NormalDistribution[0, Sqrt[1]]]}, {20000}];
Manipulate[
Graphics[{
White, Rectangle[{-5, -5}, {5, 5}],
Red, Disk[{0, 0}, 1],
Black, Point /@ (arrows[[;; i]]),
Text[Style[
Total[
If[# < 1, 1, 0] & /@
(EuclideanDistance[{0, 0}, #] & /@
arrows[[;; i]])]/Length@arrows[[;; i]] // N,
Bold, 18, "Helvetica"], {-4.5, 4.5}]},
ImageSize -> 800],
{i, Range[2, 20000, 1]},
ControlType -> Manipulator,
SaveDefinitions -> True]
答案 0 :(得分:7)
缓慢的主要原因是,您计算所有点的EuclideanDistance
,直到步骤i
每个步骤{ {1}}。如果你从i
中取出这一步,你会发现不同。
Manipulate
Heike的解决方案比你的解决方案或Nasser的更顺畅,所以我会以此为例。您可以在其中使用预先计算的prob = MapIndexed[#1/#2 &, Accumulate[
EuclideanDistance[{0, 0}, #] < 1 & /@ arrows // Boole]] ~ N ~ 4;
值:
prob
我将精度统一设置为4位,否则,当有效位数变化时,您会看到图形跳转。
答案 1 :(得分:5)
也许是这样的
Manipulate[
Graphics[{White, Rectangle[{-5, -5}, {5, 5}],
Red, Disk[{0, 0}, 1],
Black, Point[arrows[[;; i]]],
Text[Style[Count[arrows[[;; i]], a_ /; (Norm[a] < 1)]/i // N, Bold,
18, "Helvetica"], {-4.5, 4.5}]}, ImageSize -> 800], {i,
Range[2, 20000, 1]}, ControlType -> Manipulator,
SaveDefinitions -> True]
答案 2 :(得分:2)
看看这对你有好处:
Manipulate[
Graphics[{
White,
Rectangle[{-5, -5}, {5, 5}],
Red,
Disk[{0, 0}, 1],
Black, Point /@ (arrows[[;; i]]),
Text[Style[
Dynamic@Total[
If[# < 1, 1, 0] & /@ (EuclideanDistance[{0, 0}, #] & /@
arrows[[;; i]])]/Length@arrows[[;; i]] // N, Bold, 18,
"Helvetica"], {-4.5, 4.5}]}, ImageSize -> 200],
{{i, 2, "i"}, 2, 20000, 1, Appearance -> "Labeled"},
TrackedSymbols :> {i},
SynchronousUpdating -> False,
AppearanceElements -> All,
Initialization :>
(
arrows =
ParallelTable[{RandomVariate[NormalDistribution[0, Sqrt[1]]],
RandomVariate[NormalDistribution[0, Sqrt[1]]]}, {20000}];
)
]