Wolfram mathematica 优化a";操纵;在数学中

Wolfram mathematica 优化a";操纵;在数学中,wolfram-mathematica,Wolfram Mathematica,我正在寻找一个很好的演示我提到的问题,但它是非常缓慢,但操纵是不顺利的 考虑到以下情况,我是否有办法改善这种情况。这是一种更为连续的动态。我也不能用它来打开操纵器 控制->操纵器[外观->打开] arrows=并行表[{ 随机变量[正态分布[0,Sqrt[1]], 随机变量[正态分布[0,Sqrt[1]]},{20000}]; 操纵[ 图形[{ 白色,矩形[{-5,-5},{5,5}], 红色,磁盘[{0,0},1], 黑色,点/@(箭头[;i]], 文本[样式][ 总数[ 如果[#800],

我正在寻找一个很好的演示我提到的问题,但它是非常缓慢,但操纵是不顺利的

考虑到以下情况,我是否有办法改善这种情况。这是一种更为连续的动态。我也不能用它来打开操纵器

控制->操纵器[外观->打开]

arrows=并行表[{
随机变量[正态分布[0,Sqrt[1]],
随机变量[正态分布[0,Sqrt[1]]},{20000}];
操纵[
图形[{
白色,矩形[{-5,-5},{5,5}],
红色,磁盘[{0,0},1],
黑色,点/@(箭头[;i]],
文本[样式][
总数[
如果[#<1,1,0]&/@
(欧几里德立场[{0,0},#]&/@
箭头[;;i]]]/Length@arrows[i]][/N,
粗体,18,“Helvetica”],{-4.5,4.5}],
图像大小->800],
{i,范围[2,20000,1]},
控制类型->操纵器,
保存定义->正确]

看看这是否对你有好处:

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}];
   )

 ]
操纵[
图形[{
白色
矩形[{-5,-5},{5,5}],
红色
磁盘[{0,0},1],
黑色,点/@(箭头[;i]],
文本[样式][
Dynamic@Total[
如果[#<1,1,0]&/@(欧几里德距离[{0,0},#]&/@
箭头[;;i]]]/Length@arrows[i]//N,粗体,18,
“Helvetica”],{-4.5,4.5}]},ImageSize->200],
{{i,2,“i”},2,20000,1,外观->“标记”},
跟踪符号:>{i},
同步更新->错误,
外观元素->全部,
初始化:>
(
箭头=
平行表[{随机变量[正态分布[0,Sqrt[1]]],
随机变量[正态分布[0,Sqrt[1]]},{20000}];
)
]

可能是这样的

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]
操纵[
图形[{白色,矩形[{-5,-5},{5,5}],
红色,磁盘[{0,0},1],
黑色,点[箭头[;;i]],
Text[Style[Count[arrows[[;i]],a /;(Norm[a]<1)]/i//N,粗体,
18,“Helvetica”],{-4.5,4.5}]},ImageSize->800],{i,
范围[2,20000,1]},控制类型->操纵器,
保存定义->正确]

速度缓慢的主要原因是您正在计算每个步骤
i
到步骤
i
为止所有点的
欧几里德距离。如果您从
操作
中走出这一步,就会看到不同

prob = MapIndexed[#1/#2 &, Accumulate[
    EuclideanDistance[{0, 0}, #] < 1 & /@ arrows // Boole]] ~ N ~ 4;

我已经将精度统一设置为4位,因为否则,当有效位数发生变化时,您将看到数字跳跃

看起来好多了!非常感谢。但是文本是关闭的。我想很快就会收敛到.39。你也能解释一下为什么它更好:-)?@500,哪个文本是关闭的?我没有碰文本内容。查看此版本与您的版本之间的差异,您可以看到使其更快的更改。是的,您的解决方案更流畅。我甚至没有看一下算法的作用。我刚刚添加了SynchronousUpdate->False,并在“If”之前添加了一个动态,这也加快了速度。至于代码的实际功能,我没有看:)+1对于中缀的使用,这不是一个玩笑。:-)顺便说一下,我喜欢排版
a~N~b
而不是
a~N~b
,因为很清楚函数是哪个术语。如果您开始串入中缀,这会很有帮助。@Mr.Wizard谢谢,这当然是一个很好的提示!我有时会对架线时的间距感到困惑。真的很快而且反应灵敏-+1。通过使用
Total[UnitStep[1-#]和@Sqrt@Total[转置[arrows[[;;i]]^2]]]/i//N
用于计数,尽管这只是代码提供的加速的一小部分。您需要
{i,范围[22000,1],控制类型->操纵器,外观->{“打开”,“标记”}
使
操纵器处于打开和标记状态
prob = MapIndexed[#1/#2 &, Accumulate[
    EuclideanDistance[{0, 0}, #] < 1 & /@ arrows // Boole]] ~ N ~ 4;
Manipulate[
 Graphics[{White, Rectangle[{-5, -5}, {5, 5}], Red, Disk[{0, 0}, 1], 
   Black, Point[arrows[[;; i]]], 
   Text[Style[First@prob[[i]], Bold, 18, "Helvetica"], {-4.5, 4.5}]}, 
  ImageSize -> 200], {i, Range[2, 20000, 1]}, 
 ControlType -> Manipulator, SaveDefinitions -> True]