@@ -141,7 +141,7 @@ function x_grad(expr, vars, width, height; Δx = 1)
141
141
if Δx == 0
142
142
return 0
143
143
else
144
- if idx_x > 1 && idx_x < width
144
+ if idx_x > 1 && idx_x <= width - Δx
145
145
vars_plus_Δx = merge (Dict (k => (isa (v, Matrix) ? v[idx_x + Δx, idx_y] : v) for (k, v) in vars), Dict (:x => idx_x + Δx))
146
146
x_plus = custom_eval (expr, vars_plus_Δx, width, height)
147
147
return (x_plus - center) / Δx
@@ -166,7 +166,7 @@ function y_grad(expr, vars, width, height; Δy = 1)
166
166
if Δy == 0
167
167
return 0
168
168
else
169
- if idx_y > 1 && idx_y < height
169
+ if idx_y > 1 && idx_y <= height - Δy
170
170
vars_plus_Δy = merge (Dict (k => (isa (v, Matrix) ? v[idx_x, idx_y + Δy] : v) for (k, v) in vars), Dict (:y => idx_y + Δy))
171
171
y_plus = custom_eval (expr, vars_plus_Δy, width, height)
172
172
return (y_plus - center) / Δy
@@ -231,8 +231,15 @@ function neighbor_max(expr, vars, width, height; Δx = 1, Δy = 1)
231
231
for j in filter (y -> y > 0 && y != idx_y && y <= height, idx_y- Δy: idx_y+ Δy)
232
232
new_vars = merge (Dict (k => (isa (v, Matrix) ? v[i, j] : v) for (k, v) in vars), Dict (:x => i, :y => j))
233
233
val = custom_eval (expr, new_vars, width, height)
234
- if val > max_val
235
- max_val = val
234
+
235
+ if isreal (val) && isreal (max_val)
236
+ if val > max_val
237
+ max_val = val
238
+ end
239
+ else
240
+ if abs (val) > abs (max_val)
241
+ max_val = val
242
+ end
236
243
end
237
244
end
238
245
end
0 commit comments