@@ -198,10 +198,11 @@ def divergence_rate(mesh, num_iter=10, radius=2):
198
198
z = mesh.copy()
199
199
diverge_len = np.zeros(mesh.shape) # Keep tally of the number of iterations
200
200
201
+ # Iterate on element if and only if |element| < radius (Otherwise assume divergence)
201
202
for i in range(num_iter):
202
- # Iterate on element if and only if |element| < radius (Otherwise assume divergence)
203
- diverge_len[np.abs(z) < radius ] += 1
204
- z[np.abs(z) < radius ] = f(z[np.abs(z) < radius ])
203
+ conv_mask = np.abs(z) < radius
204
+ diverge_len[conv_mask ] += 1
205
+ z[conv_mask ] = f(z[conv_mask ])
205
206
206
207
return diverge_len
207
208
```
@@ -252,8 +253,9 @@ def julia(mesh, c=-1, num_iter=10, radius=2):
252
253
diverge_len = np.zeros(z.shape)
253
254
254
255
for i in range(num_iter):
255
- z[np.abs(z) < radius] = np.square(z[np.abs(z) < radius]) + c
256
- diverge_len[np.abs(z) < radius] += 1
256
+ conv_mask = np.abs(z) < radius
257
+ z[conv_mask] = np.square(z[conv_mask]) + c
258
+ diverge_len[conv_mask] += 1
257
259
258
260
return diverge_len
259
261
```
@@ -325,8 +327,9 @@ def mandelbrot(mesh, num_iter=10, radius=2):
325
327
diverge_len = np.zeros(z.shape)
326
328
327
329
for i in range(num_iter):
328
- z[np.abs(z) < radius] = np.square(z[np.abs(z) < radius]) + c[np.abs(z) < radius]
329
- diverge_len[np.abs(z) < radius] += 1
330
+ conv_mask = np.abs(z) < radius
331
+ z[conv_mask] = np.square(z[conv_mask]) + c[conv_mask]
332
+ diverge_len[conv_mask] += 1
330
333
331
334
return diverge_len
332
335
```
@@ -349,8 +352,9 @@ def general_julia(mesh, c=-1, f=np.square, num_iter=100, radius=2):
349
352
diverge_len = np.zeros(z.shape)
350
353
351
354
for i in range(num_iter):
352
- z[np.abs(z) < radius] = f(z[np.abs(z) < radius]) + c
353
- diverge_len[np.abs(z) < radius] += 1
355
+ conv_mask = np.abs(z) < radius
356
+ z[conv_mask] = f(z[conv_mask]) + c
357
+ diverge_len[conv_mask] += 1
354
358
355
359
return diverge_len
356
360
```
@@ -391,10 +395,11 @@ def newton_fractal(mesh, f, df, num_iter=10, r=2):
391
395
diverge_len = np.zeros(z.shape)
392
396
393
397
for i in range(num_iter):
394
- pz = f(z[np.abs(z) < r])
395
- dp = df(z[np.abs(z) < r])
396
- z[np.abs(z) < r] = z[np.abs(z) < r] - pz/dp
397
- diverge_len[np.abs(z) < r] += 1
398
+ conv_mask = np.abs(z) < r
399
+ pz = f(z[conv_mask])
400
+ dp = df(z[conv_mask])
401
+ z[conv_mask] = z[conv_mask] - pz/dp
402
+ diverge_len[conv_mask] += 1
398
403
399
404
return diverge_len
400
405
```
0 commit comments