Skip to content

Commit 98771ac

Browse files
authored
Merge pull request #8108 from ycopin/Issue8094
Fix ``Moffat1D`` and ``Moffat2D`` derivatives. [#8094]
2 parents 3435b77 + 83412a2 commit 98771ac

2 files changed

Lines changed: 12 additions & 9 deletions

File tree

‎CHANGES.rst‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,8 @@ astropy.io.votable
366366
astropy.modeling
367367
^^^^^^^^^^^^^^^^
368368

369+
- Fix ``Moffat1D`` and ``Moffat2D`` derivatives. [#8094]
370+
369371
- Add a ``Multiply`` model which preserves unit through evaluate, unlike
370372
``Scale`` which is dimensionless. [#7210]
371373

‎astropy/modeling/functional_models.py‎

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2269,12 +2269,12 @@ def evaluate(x, amplitude, x_0, gamma, alpha):
22692269
def fit_deriv(x, amplitude, x_0, gamma, alpha):
22702270
"""One dimensional Moffat model derivative with respect to parameters"""
22712271

2272-
d_A = (1 + (x - x_0) ** 2 / gamma ** 2) ** (-alpha)
2273-
d_x_0 = (-amplitude * alpha * d_A * (-2 * x + 2 * x_0) /
2274-
(gamma ** 2 * d_A ** alpha))
2275-
d_gamma = (2 * amplitude * alpha * d_A * (x - x_0) ** 2 /
2276-
(gamma ** 3 * d_A ** alpha))
2277-
d_alpha = -amplitude * d_A * np.log(1 + (x - x_0) ** 2 / gamma ** 2)
2272+
fac = (1 + (x - x_0) ** 2 / gamma ** 2)
2273+
d_A = fac ** (-alpha)
2274+
d_x_0 = (2 * amplitude * alpha * (x - x_0) * d_A / (fac * gamma ** 2))
2275+
d_gamma = (2 * amplitude * alpha * (x - x_0) ** 2 * d_A /
2276+
(fac * gamma ** 3))
2277+
d_alpha = -amplitude * d_A * np.log(fac)
22782278
return [d_A, d_x_0, d_gamma, d_alpha]
22792279

22802280
@property
@@ -2349,12 +2349,13 @@ def fit_deriv(x, y, amplitude, x_0, y_0, gamma, alpha):
23492349

23502350
rr_gg = ((x - x_0) ** 2 + (y - y_0) ** 2) / gamma ** 2
23512351
d_A = (1 + rr_gg) ** (-alpha)
2352-
d_x_0 = (-amplitude * alpha * d_A * (-2 * x + 2 * x_0) /
2352+
d_x_0 = (2 * amplitude * alpha * d_A * (x - x_0) /
23532353
(gamma ** 2 * (1 + rr_gg)))
2354-
d_y_0 = (-amplitude * alpha * d_A * (-2 * y + 2 * y_0) /
2354+
d_y_0 = (2 * amplitude * alpha * d_A * (y - y_0) /
23552355
(gamma ** 2 * (1 + rr_gg)))
23562356
d_alpha = -amplitude * d_A * np.log(1 + rr_gg)
2357-
d_gamma = 2 * amplitude * alpha * d_A * (rr_gg / (gamma * (1 + rr_gg)))
2357+
d_gamma = (2 * amplitude * alpha * d_A * rr_gg /
2358+
(gamma ** 3 * (1 + rr_gg)))
23582359
return [d_A, d_x_0, d_y_0, d_gamma, d_alpha]
23592360

23602361
@property

0 commit comments

Comments
 (0)