|
Size: 8300
Comment:
|
Size: 8075
Comment: more efficient version
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 275: | Line 275: |
| from numpy import zeros |
|
| Line 278: | Line 276: |
| '''Generates the Sierpiński Triangle fractal to N iterations using the Rule 90 elementary cellular automaton. N is in powers of 2 because these produce "whole" triangles.''' M=zeros( (N,2*N+1), dtype=int) M[0,N]=1 rule=[0, 1, 0, 1, 1, 0, 1, 0] for j in range(1,N): for k in range(N-j,N+j+1): l = 4*M[j-1,k-1] + 2*M[j-1,k] + M[j-1,k+1] M[j,k]=rule[ l ] return M @interact def _(N=slider([2**a for a in range(0, 12)], label='Number of iterations',default=128), size = slider(1, 20, label= 'Size', step_size=1, default=9 )): M = sierpinski(N) |
'''Generates the Sierpinski triangle by taking the modulo-2 of each element in Pascal's triangle''' return [([0] * (N // 2 - a // 2)) + [binomial(a, b) % 2 for b in range(a + 1)] + ([0] * (N // 2 - a // 2)) for a in range(0, N, 2)] @interact def _(N=slider([2 ** a for a in range(12)], label='Number of iterations', default=64), size=slider(1, 20, label='Size', step_size=1, default=9)): M = sierpinski(2 * N) |
| Line 293: | Line 283: |
| plot_M.show( figsize=[size,size]) | plot_M.show(figsize=[size, size]) |
Sage Interactions - Fractal
goto interact main page
Contents
-
Sage Interactions - Fractal
- Mandelbrot's Fractal Binomial Distribution
- Fractals Generated By Digit Sets and Dilation Matrices
- Demonstrating that the Twin Dragon Matrix is likely to yield a Tiling of a Compact Interval of R^2 as k->infinity (It does!)
- Now in 3D
- Exploring Mandelbrot
- Mandelbrot & Julia Interact with variable exponent
- Sierpiński Triangle
Mandelbrot's Fractal Binomial Distribution
Fractals Generated By Digit Sets and Dilation Matrices
(Sage Days 9 - Avra Laarakker)
Attempt at Generating all integer vectors with Digits D and Matrix A (How about vector([0,-1])?)
Demonstrating that the Twin Dragon Matrix is likely to yield a Tiling of a Compact Interval of R^2 as k->infinity (It does!)
Now in 3D
Exploring Mandelbrot
Pablo Angulo
%cython
import numpy as np
cimport numpy as np
def mandelbrot_cython(float x0,float x1,float y0,float y1,
int N=200, int L=50, float R=3):
'''returns an array NxN to be plotted with matrix_plot
'''
cdef double complex c, z, I
cdef float deltax, deltay, R2 = R*R
cdef int h, j, k
cdef np.ndarray[np.uint16_t, ndim=2] m
m = np.zeros((N,N), dtype=np.uint16)
I = complex(0,1)
deltax = (x1-x0)/N
deltay = (y1-y0)/N
for j in range(N):
for k in range(N):
c = (x0+j*deltax)+ I*(y0+k*deltay)
z=0
h=0
while (h<L and
z.real**2 + z.imag**2 < R2):
z=z*z+c
h+=1
m[j,k]=h
return mimport pylab
x0_default = -2
y0_default = -1.5
side_default = 3.0
side = side_default
x0 = x0_default
y0 = y0_default
options = ['Reset','Upper Left', 'Upper Right', 'Stay', 'Lower Left', 'Lower Right']
@interact
def show_mandelbrot(option = selector(options, nrows = 2, width=8),
N = slider(100, 1000,100, 300),
L = slider(20, 300, 20, 60),
plot_size = slider(2,10,1,6),
auto_update = False):
global x0, y0, side
if option == 'Lower Right':
x0 += side/2
y0 += side/2
elif option == 'Upper Right':
y0 += side/2
elif option == 'Lower Left':
x0 += side/2
if option=='Reset':
side = side_default
x0 = x0_default
y0 = y0_default
elif option != 'Stay':
side = side/2
time m=mandelbrot_cython(x0 ,x0 + side ,y0 ,y0 + side , N, L )
# p = (matrix_plot(m) +
# line2d([(N/2,0),(N/2,N)], color='red', zorder=2) +
# line2d([(0,N/2),(N,N/2)], color='red', zorder=2))
# time show(p, figsize = (plot_size, plot_size))
pylab.clf()
pylab.imshow(m, cmap = pylab.cm.gray)
time pylab.savefig('mandelbrot.png')
Mandelbrot & Julia Interact with variable exponent
published notebook: http://sagenb.org/pub/1299/
Mandelbrot
by Harald Schilly
Julia
by Harald Schilly
julia_plot(-7,30,0.5,0.5,(-1.5,1.5), (-1.5,1.5))
Sierpiński Triangle
by Eviatar Bach
