New in Wolfram
Mathematica
8: Mejoras en el rendimiento del compilador
◄
previous
|
next
►
Desarrollo de Software
Explore los detalles en el conjunto de Mandelbrot
Por el incremento en la velocidad computacional, las computaciones que pueden llevar mucho tiempo, ahora pueden hacerse en tiempo real.
Explore detalles del conjunto de Mandelbrot.
Dado que la computación es rápida, la visualización del resultado es interactiva.
Como se usa sintaxis de
Mathematica
, la velocidad de retorno es rápida.
In[1]:=
X
mandelComp = Compile[{{c, _Complex}}, Module[{num = 1}, FixedPoint[(num++; #^2 + c) &, 0, 800, SameTest -> (Re[#]^2 + Im[#]^2 >= 4 &)]; num], CompilationTarget -> "C", RuntimeAttributes -> {Listable}, Parallelization -> True]; With[{x = 0, y = 1, draghold = {0.0524687, 0.749809}}, Panel[ Module[{dragstart = {0, 0}, dragval = {0, 0}, xrange, yrange, m = 10.2, scale = 0.000850147}, {xshift, yshift} = (dragstart - dragval + draghold) {1, -1}; {ylo, yhi} = yshift + scale*{-1, 1}; {xlo, xhi} = xshift + scale*{-1, 1}; xrange = {b, xlo, xhi, .0025 scale}; yrange = {a, ylo, yhi, .0025*scale}; data = Table[a + I b, Evaluate[yrange], Evaluate[xrange]]; ArrayPlot[mandelComp[data], ImageSize -> 300] ] ] ]
Out[1]=
In[2]:=
X
mandelComp = Compile[{{c, _Complex}}, Module[{num = 1}, FixedPoint[(num++; #^2 + c) &, 0, 30, SameTest -> (Re[#]^2 + Im[#]^2 >= 4 &)]; num], CompilationTarget -> "C", RuntimeAttributes -> {Listable}, Parallelization -> True]; doPlotDrag[{x_, y_}] := Panel[ DynamicModule[{dragstart = {0, 0}, dragval = {0, 0}, draghold = {x, y}, xrange, yrange, m = -Log[2, 1.5], scale = 1.5}, Column[{ Row[{"Zoom ", Slider[Dynamic[m, Function[scale = 2.^-#; m = #]], {-1, 50}], Dynamic[m]}], EventHandler[ Dynamic[{xshift, yshift} = (dragstart - dragval + draghold) {1, -1}; {ylo, yhi} = yshift + scale*{-1, 1}; {xlo, xhi} = xshift + scale*{-1, 1}; xrange = {b, xlo, xhi, .01 scale}; yrange = {a, ylo, yhi, .01*scale}; data = Table[a + I b, Evaluate[yrange], Evaluate[xrange]]; ArrayPlot[mandelComp[data], ImageSize -> 300]], "MouseDown" :> (dragval = dragstart = scale*MousePosition["GraphicsScaled"]), "MouseDragged" :> (dragval = scale*MousePosition["GraphicsScaled"]), "MouseUp" :> (draghold = draghold + dragstart - dragval; dragstart = dragval = {0, 0})]}]] ] doPlotDrag[{0, 1}]
Out[2]=
In[3]:=
X
mandelComp = Compile[{{c, _Complex}, {ii, _Real}}, Module[{num = 1}, FixedPoint[(num++; #^ii + c) &, 0, 30, SameTest -> (Re[#]^2 + Im[#]^2 >= 4 &)]; num], CompilationTarget -> "C", RuntimeAttributes -> {Listable}, Parallelization -> True]; doPlotDrag[{x_, y_}] := Panel[ DynamicModule[{dragstart = {0, 0}, dragval = {0, 0}, draghold = {x, y}, xrange, yrange, m = -Log[2, 1.5], scale = 2.0, ii = 2.0}, Column[{ Row[{"Power ", Slider[Dynamic[ii], {1.0, 10.0, 0.001}], Dynamic[ii]}], Row[{"Zoom ", Slider[Dynamic[m, Function[scale = 2.^-#; m = #]], {-1, 50}], Dynamic[m]}], EventHandler[ Dynamic[{xshift, yshift} = (dragstart - dragval + draghold) {1, -1}; {ylo, yhi} = yshift + scale*{-1, 1}; {xlo, xhi} = xshift + scale*{-1, 1}; xrange = {b, xlo, xhi, .01 scale}; yrange = {a, ylo, yhi, .01*scale}; data = Table[a + I b, Evaluate[yrange], Evaluate[xrange]]; ArrayPlot[mandelComp[data, ii], ImageSize -> 300]], "MouseDown" :> (dragval = dragstart = scale*MousePosition["GraphicsScaled"]), "MouseDragged" :> (dragval = scale*MousePosition["GraphicsScaled"]), "MouseUp" :> (draghold = draghold + dragstart - dragval; dragstart = dragval = {0, 0})]}]] ] doPlotDrag[{0, 1}]
Out[3]=