Skip to content

Commit 46509c9

Browse files
committed
Update minimise.py
1 parent d482f30 commit 46509c9

File tree

1 file changed

+40
-31
lines changed

1 file changed

+40
-31
lines changed

src/pysoplot/minimise.py

Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,11 @@ def fmin(t, x, y, Th232_U238, ThU_melt, fPaU, alpha, Lam238, Lam235,
224224

225225
def dfmin(t, x, y, Th232_U238, ThU_melt, fPaU, alpha, Lam238, Lam235,
226226
coef238, coef235):
227-
228-
raise ValueError('not yet coded')
227+
# TODO: code analytical derivative
228+
h = t * 1e-08
229+
args = (x, y, Th232_U238, ThU_melt, fPaU, alpha, Lam238, Lam235,
230+
coef238, coef235)
231+
return misc.cdiff(t, fmin, h, *args)
229232

230233
else:
231234
def fmin(t, x, y, Pb208_206, ThU_melt, fPaU, alpha, Lam238, Lam235,
@@ -235,7 +238,8 @@ def fmin(t, x, y, Pb208_206, ThU_melt, fPaU, alpha, Lam238, Lam235,
235238
y : measured 207Pb/206Pb
236239
alpha : common 207Pb/206Pb
237240
"""
238-
Th232_U238 = x * Pb208_206 * (1. / (np.exp(cfg.lam232 * t) - 1.))
241+
242+
Th232_U238 = (1. / x) * Pb208_206 * (1. / (np.exp(cfg.lam232 * t) - 1.))
239243
ThU_min = Th232_U238 * (exp(cfg.lam232 * t)
240244
/ (exp(cfg.lam238 * t) + np.exp(cfg.lam235 * t) / cfg.U))
241245
fThU = ThU_min / ThU_melt
@@ -250,34 +254,39 @@ def dfmin(t, x, y, Pb208_206, ThU_melt, fPaU, alpha, Lam238, Lam235,
250254
"""
251255
252256
"""
253-
num = np.exp(cfg.lam232 * t) / (np.exp(cfg.lam232 * t) - 1.)
254-
den = np.exp(cfg.lam238 * t) + np.exp(cfg.lam235 * t) / cfg.U
255-
fThU = x * Pb208_206 * (num / den) / ThU_melt
256-
257-
dnum = -cfg.lam232 * np.exp(cfg.lam232 * t) / (
258-
np.exp(cfg.lam232 * t) - 1.) ** 2
259-
dden = cfg.lam238 * np.exp(cfg.lam238 * t) \
260-
+ cfg.lam235 * np.exp(cfg.lam235 * t) / cfg.U
261-
dfThU = x * Pb208_206 / ThU_melt * (dnum * den
262-
- num * dden) / den ** 2
263-
264-
num = ludwig.g(t, fPaU, Lam235, coef235) / cfg.U - (y - alpha) / x
265-
dnum = ludwig.dgdt(t, fPaU, Lam235, coef235) / cfg.U
266-
267-
den = ludwig.f(t, [cfg.a234_238_eq, fThU, cfg.a226_238_eq],
268-
Lam238, coef238)
269-
df1, df2, _, df4 = ludwig.dfdt_comp(t, [cfg.a234_238_eq, np.nan,
270-
cfg.a226_238_eq], Lam238, coef238)
271-
df3 = dfThU * Lam238[0] / Lam238[2] * (
272-
coef238[7] * exp((Lam238[0] - Lam238[2]) * t)
273-
+ coef238[8] * exp((Lam238[0] - Lam238[3]) * t) + exp(Lam238[0] * t)) \
274-
+ fThU * Lam238[0] / Lam238[2] * (
275-
coef238[7] * (Lam238[0] - Lam238[2]) * exp((Lam238[0] - Lam238[2]) * t)
276-
+ coef238[8] * (Lam238[0] - Lam238[3]) * exp((Lam238[0] - Lam238[3]) * t)
277-
+ Lam238[0] * exp(Lam238[0] * t))
278-
dden = df1 + df2 + df3 + df4
279-
280-
return (dnum * den - num * dden) / den ** 2
257+
# TODO: double chek this
258+
# num = np.exp(cfg.lam232 * t) / (np.exp(cfg.lam232 * t) - 1.)
259+
# den = np.exp(cfg.lam238 * t) + np.exp(cfg.lam235 * t) / cfg.U
260+
# fThU = x * Pb208_206 * (num / den) / ThU_melt
261+
#
262+
# dnum = -cfg.lam232 * np.exp(cfg.lam232 * t) / (
263+
# np.exp(cfg.lam232 * t) - 1.) ** 2
264+
# dden = cfg.lam238 * np.exp(cfg.lam238 * t) \
265+
# + cfg.lam235 * np.exp(cfg.lam235 * t) / cfg.U
266+
# dfThU = x * Pb208_206 / ThU_melt * (dnum * den
267+
# - num * dden) / den ** 2
268+
#
269+
# num = ludwig.g(t, fPaU, Lam235, coef235) / cfg.U - (y - alpha) / x
270+
# dnum = ludwig.dgdt(t, fPaU, Lam235, coef235) / cfg.U
271+
#
272+
# den = ludwig.f(t, [cfg.a234_238_eq, fThU, cfg.a226_238_eq],
273+
# Lam238, coef238)
274+
# df1, df2, _, df4 = ludwig.dfdt_comp(t, [cfg.a234_238_eq, np.nan,
275+
# cfg.a226_238_eq], Lam238, coef238)
276+
# df3 = dfThU * Lam238[0] / Lam238[2] * (
277+
# coef238[7] * exp((Lam238[0] - Lam238[2]) * t)
278+
# + coef238[8] * exp((Lam238[0] - Lam238[3]) * t) + exp(Lam238[0] * t)) \
279+
# + fThU * Lam238[0] / Lam238[2] * (
280+
# coef238[7] * (Lam238[0] - Lam238[2]) * exp((Lam238[0] - Lam238[2]) * t)
281+
# + coef238[8] * (Lam238[0] - Lam238[3]) * exp((Lam238[0] - Lam238[3]) * t)
282+
# + Lam238[0] * exp(Lam238[0] * t))
283+
# dden = df1 + df2 + df3 + df4
284+
#
285+
# return (dnum * den - num * dden) / den ** 2
286+
h = t * 1e-08
287+
args = (x, y, Pb208_206, ThU_melt, fPaU, alpha, Lam238, Lam235,
288+
coef238, coef235)
289+
return misc.cdiff(t, fmin, h, *args)
281290

282291
return fmin, dfmin
283292

0 commit comments

Comments
 (0)