mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-07 19:12:40 +02:00
Attempt to align numbers to right
This commit is contained in:
parent
5189ccaf38
commit
082ae150de
6 changed files with 2 additions and 504 deletions
|
|
@ -272,7 +272,7 @@ class Param(Parameterizable, ObsAr):
|
||||||
</tr>"""
|
</tr>"""
|
||||||
header = header_format.format(x=self.hierarchy_name(), c=__constraints_name__, i=__index_name__, t=__tie_name__, p=__priors_name__) # nice header for printing
|
header = header_format.format(x=self.hierarchy_name(), c=__constraints_name__, i=__index_name__, t=__tie_name__, p=__priors_name__) # nice header for printing
|
||||||
if not ties: ties = itertools.cycle([''])
|
if not ties: ties = itertools.cycle([''])
|
||||||
return "\n".join(['<table>'] + [header] + ["<tr><td>{i}</td><td>{x}</td><td>{c}</td><td>{p}</td><td>{t}</td></tr>".format(x=x, c=" ".join(map(str, c)), p=" ".join(map(str, p)), t=(t or ''), i=i) for i, x, c, t, p in itertools.izip(indices, vals, constr_matrix, ties, prirs)] + ["</table>"])
|
return "\n".join(['<table>'] + [header] + ["<tr><td>{i}</td><td align=\"right\">{x}</td><td>{c}</td><td>{p}</td><td>{t}</td></tr>".format(x=x, c=" ".join(map(str, c)), p=" ".join(map(str, p)), t=(t or ''), i=i) for i, x, c, t, p in itertools.izip(indices, vals, constr_matrix, ties, prirs)] + ["</table>"])
|
||||||
|
|
||||||
def __str__(self, constr_matrix=None, indices=None, prirs=None, ties=None, lc=None, lx=None, li=None, lp=None, lt=None, only_name=False):
|
def __str__(self, constr_matrix=None, indices=None, prirs=None, ties=None, lc=None, lx=None, li=None, lp=None, lt=None, only_name=False):
|
||||||
filter_ = self._current_slice_
|
filter_ = self._current_slice_
|
||||||
|
|
|
||||||
|
|
@ -370,7 +370,7 @@ class Parameterized(Parameterizable):
|
||||||
cl = max([len(str(x)) if x else 0 for x in constrs + ["Constraint"]])
|
cl = max([len(str(x)) if x else 0 for x in constrs + ["Constraint"]])
|
||||||
tl = max([len(str(x)) if x else 0 for x in ts + ["Tied to"]])
|
tl = max([len(str(x)) if x else 0 for x in ts + ["Tied to"]])
|
||||||
pl = max([len(str(x)) if x else 0 for x in prirs + ["Prior"]])
|
pl = max([len(str(x)) if x else 0 for x in prirs + ["Prior"]])
|
||||||
format_spec = "<tr><td>{{name:<{0}s}}</td><td>{{desc:>{1}s}}</td><td>{{const:^{2}s}}</td><td>{{pri:^{3}s}}</td><td>{{t:^{4}s}}</td></tr>".format(nl, sl, cl, pl, tl)
|
format_spec = "<tr><td>{{name:<{0}s}}</td><td align=\"right\">{{desc:>{1}s}}</td><td>{{const:^{2}s}}</td><td>{{pri:^{3}s}}</td><td>{{t:^{4}s}}</td></tr>".format(nl, sl, cl, pl, tl)
|
||||||
to_print = []
|
to_print = []
|
||||||
for n, d, c, t, p in itertools.izip(names, desc, constrs, ts, prirs):
|
for n, d, c, t, p in itertools.izip(names, desc, constrs, ts, prirs):
|
||||||
to_print.append(format_spec.format(name=n, desc=d, const=c, t=t, pri=p))
|
to_print.append(format_spec.format(name=n, desc=d, const=c, t=t, pri=p))
|
||||||
|
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
try:
|
|
||||||
import sympy as sym
|
|
||||||
sympy_available=True
|
|
||||||
except ImportError:
|
|
||||||
sympy_available=False
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
from symbolic import Symbolic
|
|
||||||
|
|
||||||
class Eq(Symbolic):
|
|
||||||
"""
|
|
||||||
The exponentiated quadratic covariance as a symbolic function.
|
|
||||||
|
|
||||||
"""
|
|
||||||
def __init__(self, input_dim, output_dim=1, variance=1.0, lengthscale=1.0, name='Eq'):
|
|
||||||
|
|
||||||
parameters = {'variance' : variance, 'lengthscale' : lengthscale}
|
|
||||||
x = sym.symbols('x_:' + str(input_dim))
|
|
||||||
z = sym.symbols('z_:' + str(input_dim))
|
|
||||||
variance = sym.var('variance',positive=True)
|
|
||||||
lengthscale = sym.var('lengthscale', positive=True)
|
|
||||||
dist_string = ' + '.join(['(x_%i - z_%i)**2' %(i, i) for i in range(input_dim)])
|
|
||||||
from sympy.parsing.sympy_parser import parse_expr
|
|
||||||
dist = parse_expr(dist_string)
|
|
||||||
|
|
||||||
# this is the covariance function
|
|
||||||
f = variance*sym.exp(-dist/(2*lengthscale**2))
|
|
||||||
# extra input dim is to signify the output dimension.
|
|
||||||
super(Eq, self).__init__(input_dim=input_dim, k=f, output_dim=output_dim, parameters=parameters, name=name)
|
|
||||||
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
try:
|
|
||||||
import sympy as sym
|
|
||||||
sympy_available=True
|
|
||||||
except ImportError:
|
|
||||||
sympy_available=False
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
from symbolic import Symbolic
|
|
||||||
|
|
||||||
class Heat_eqinit(Symbolic):
|
|
||||||
"""
|
|
||||||
A symbolic covariance based on laying down an initial condition of the heat equation with an exponentiated quadratic covariance. The covariance then has multiple outputs which are interpreted as observations of the diffused process with different diffusion coefficients (or at different times).
|
|
||||||
|
|
||||||
"""
|
|
||||||
def __init__(self, input_dim, output_dim=1, param=None, name='Heat_eqinit'):
|
|
||||||
|
|
||||||
x = sym.symbols('x_:' + str(input_dim))
|
|
||||||
z = sym.symbols('z_:' + str(input_dim))
|
|
||||||
scale = sym.var('scale_i scale_j',positive=True)
|
|
||||||
lengthscale = sym.var('lengthscale_i lengthscale_j', positive=True)
|
|
||||||
shared_lengthscale = sym.var('shared_lengthscale', positive=True)
|
|
||||||
dist_string = ' + '.join(['(x_%i - z_%i)**2' %(i, i) for i in range(input_dim)])
|
|
||||||
from sympy.parsing.sympy_parser import parse_expr
|
|
||||||
dist = parse_expr(dist_string)
|
|
||||||
|
|
||||||
# this is the covariance function
|
|
||||||
f = scale_i*scale_j*sym.exp(-dist/(2*(shared_lengthscale**2 + lengthscale_i*lengthscale_j)))
|
|
||||||
# extra input dim is to signify the output dimension.
|
|
||||||
super(Heat_eqinit, self).__init__(input_dim=input_dim+1, k=f, output_dim=output_dim, name=name)
|
|
||||||
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,367 +0,0 @@
|
||||||
import sys
|
|
||||||
import numpy as np
|
|
||||||
import sympy as sym
|
|
||||||
from sympy import Function, S, oo, I, cos, sin, asin, log, erf, pi, exp, sqrt, sign, gamma, polygamma
|
|
||||||
from sympy.matrices import Matrix
|
|
||||||
########################################
|
|
||||||
## Try to do some matrix functions: problem, you can't do derivatives
|
|
||||||
## with respect to matrix functions :-(
|
|
||||||
|
|
||||||
class GPySymMatrix(Matrix):
|
|
||||||
def __init__(self, indices):
|
|
||||||
Matrix.__init__(self)
|
|
||||||
def atoms(self):
|
|
||||||
return [e2 for e in self for e2 in e.atoms()]
|
|
||||||
|
|
||||||
class selector(Function):
|
|
||||||
"""A function that returns an element of a Matrix depending on input indices."""
|
|
||||||
nargs = 3
|
|
||||||
def fdiff(self, argindex=1):
|
|
||||||
return selector(*self.args)
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, X, i, j):
|
|
||||||
if i.is_Number and j.is_Number:
|
|
||||||
return X[i, j]
|
|
||||||
|
|
||||||
##################################################
|
|
||||||
class logistic(Function):
|
|
||||||
"""The logistic function as a symbolic function."""
|
|
||||||
nargs = 1
|
|
||||||
def fdiff(self, argindex=1):
|
|
||||||
x = self.args[0]
|
|
||||||
return logistic(x)*(1-logistic(x))
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, x):
|
|
||||||
if x.is_Number:
|
|
||||||
return 1/(1+exp(-x))
|
|
||||||
|
|
||||||
class logisticln(Function):
|
|
||||||
"""The log logistic, which can often be computed with more precision than the simply taking log(logistic(x)) when x is small or large."""
|
|
||||||
nargs = 1
|
|
||||||
|
|
||||||
def fdiff(self, argindex=1):
|
|
||||||
x = self.args[0]
|
|
||||||
return 1-logistic(x)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, x):
|
|
||||||
if x.is_Number:
|
|
||||||
return -np.log(1+exp(-x))
|
|
||||||
|
|
||||||
class erfc(Function):
|
|
||||||
"""The complementary error function, erfc(x) = 1-erf(x). Used as a helper function, particularly for erfcx, the scaled complementary error function. and the normal distributions cdf."""
|
|
||||||
nargs = 1
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, arg):
|
|
||||||
return 1-erf(arg)
|
|
||||||
|
|
||||||
class erfcx(Function):
|
|
||||||
nargs = 1
|
|
||||||
def fdiff(self, argindex=1):
|
|
||||||
x = self.args[0]
|
|
||||||
return x*erfcx(x)-2/sqrt(pi)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, x):
|
|
||||||
if x.is_Number:
|
|
||||||
return exp(x**2)*erfc(x)
|
|
||||||
|
|
||||||
class gammaln(Function):
|
|
||||||
"""The log of the gamma function, which is often needed instead of log(gamma(x)) for better accuracy for large x."""
|
|
||||||
nargs = 1
|
|
||||||
|
|
||||||
def fdiff(self, argindex=1):
|
|
||||||
x=self.args[0]
|
|
||||||
return polygamma(0, x)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, x):
|
|
||||||
if x.is_Number:
|
|
||||||
return log(gamma(x))
|
|
||||||
|
|
||||||
|
|
||||||
class normcdfln(Function):
|
|
||||||
"""The log of the normal cdf. Can often be computed with better accuracy than log(normcdf(x)), particulary when x is either small or large."""
|
|
||||||
nargs = 1
|
|
||||||
|
|
||||||
def fdiff(self, argindex=1):
|
|
||||||
x = self.args[0]
|
|
||||||
#return -erfcx(-x/sqrt(2))/sqrt(2*pi)
|
|
||||||
#return exp(-normcdfln(x) - 0.5*x*x)/sqrt(2*pi)
|
|
||||||
return sqrt(2/pi)*1/erfcx(-x/sqrt(2))
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, x):
|
|
||||||
if x.is_Number:
|
|
||||||
return log(normcdf(x))
|
|
||||||
|
|
||||||
def _eval_is_real(self):
|
|
||||||
return self.args[0].is_real
|
|
||||||
|
|
||||||
class normcdf(Function):
|
|
||||||
"""The cumulative distribution function of the standard normal. Provided as a convenient helper function. It is computed throught -0.5*erfc(-x/sqrt(2))."""
|
|
||||||
nargs = 1
|
|
||||||
def fdiff(self, argindex=1):
|
|
||||||
x = self.args[0]
|
|
||||||
return gaussian(x)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, x):
|
|
||||||
if x.is_Number:
|
|
||||||
return 0.5*(erfc(-x/sqrt(2)))
|
|
||||||
|
|
||||||
def _eval_is_real(self):
|
|
||||||
return self.args[0].is_real
|
|
||||||
|
|
||||||
class normalln(Function):
|
|
||||||
"""The log of the standard normal distribution."""
|
|
||||||
nargs = 1
|
|
||||||
def fdiff(self, argindex=1):
|
|
||||||
x = self.args[0]
|
|
||||||
return -x
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, x):
|
|
||||||
if x.is_Number:
|
|
||||||
return 0.5*sqrt(2*pi) - 0.5*x*x
|
|
||||||
|
|
||||||
|
|
||||||
def _eval_is_real(self):
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
class normal(Function):
|
|
||||||
"""The standard normal distribution. Provided as a convenience function."""
|
|
||||||
nargs = 1
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, x):
|
|
||||||
return 1/sqrt(2*pi)*exp(-0.5*x*x)
|
|
||||||
|
|
||||||
def _eval_is_real(self):
|
|
||||||
return True
|
|
||||||
|
|
||||||
class differfln(Function):
|
|
||||||
nargs = 2
|
|
||||||
|
|
||||||
def fdiff(self, argindex=2):
|
|
||||||
if argindex == 2:
|
|
||||||
x0, x1 = self.args
|
|
||||||
return -2/(sqrt(pi)*(erfcx(x1)-exp(x1**2-x0**2)*erfcx(x0)))
|
|
||||||
elif argindex == 1:
|
|
||||||
x0, x1 = self.args
|
|
||||||
return 2/(sqrt(pi)*(exp(x0**2-x1**2)*erfcx(x1)-erfcx(x0)))
|
|
||||||
else:
|
|
||||||
raise ArgumentIndexError(self, argindex)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, x0, x1):
|
|
||||||
if x0.is_Number and x1.is_Number:
|
|
||||||
return log(erfc(x1)-erfc(x0))
|
|
||||||
|
|
||||||
class dh_dd_i(Function):
|
|
||||||
nargs = 5
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, t, tprime, d_i, d_j, l):
|
|
||||||
if (t.is_Number
|
|
||||||
and tprime.is_Number
|
|
||||||
and d_i.is_Number
|
|
||||||
and d_j.is_Number
|
|
||||||
and l.is_Number):
|
|
||||||
|
|
||||||
diff_t = (t-tprime)
|
|
||||||
l2 = l*l
|
|
||||||
h = h(t, tprime, d_i, d_j, l)
|
|
||||||
half_l_di = 0.5*l*d_i
|
|
||||||
arg_1 = half_l_di + tprime/l
|
|
||||||
arg_2 = half_l_di - (t-tprime)/l
|
|
||||||
ln_part_1 = ln_diff_erf(arg_1, arg_2)
|
|
||||||
arg_1 = half_l_di
|
|
||||||
arg_2 = half_l_di - t/l
|
|
||||||
sign_val = sign(t/l)
|
|
||||||
ln_part_2 = ln_diff_erf(half_l_di, half_l_di - t/l)
|
|
||||||
|
|
||||||
base = ((0.5*d_i*l2*(d_i+d_j)-1)*h
|
|
||||||
+ (-diff_t*sign_val*exp(half_l_di*half_l_di
|
|
||||||
-d_i*diff_t
|
|
||||||
+ln_part_1)
|
|
||||||
+t*sign_val*exp(half_l_di*half_l_di
|
|
||||||
-d_i*t-d_j*tprime
|
|
||||||
+ln_part_2))
|
|
||||||
+ l/sqrt(pi)*(-exp(-diff_t*diff_t/l2)
|
|
||||||
+exp(-tprime*tprime/l2-d_i*t)
|
|
||||||
+exp(-t*t/l2-d_j*tprime)
|
|
||||||
-exp(-(d_i*t + d_j*tprime))))
|
|
||||||
return base/(d_i+d_j)
|
|
||||||
|
|
||||||
class dh_dd_j(Function):
|
|
||||||
nargs = 5
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, t, tprime, d_i, d_j, l):
|
|
||||||
if (t.is_Number
|
|
||||||
and tprime.is_Number
|
|
||||||
and d_i.is_Number
|
|
||||||
and d_j.is_Number
|
|
||||||
and l.is_Number):
|
|
||||||
diff_t = (t-tprime)
|
|
||||||
l2 = l*l
|
|
||||||
half_l_di = 0.5*l*d_i
|
|
||||||
h = h(t, tprime, d_i, d_j, l)
|
|
||||||
arg_1 = half_l_di + tprime/l
|
|
||||||
arg_2 = half_l_di - (t-tprime)/l
|
|
||||||
ln_part_1 = ln_diff_erf(arg_1, arg_2)
|
|
||||||
arg_1 = half_l_di
|
|
||||||
arg_2 = half_l_di - t/l
|
|
||||||
sign_val = sign(t/l)
|
|
||||||
ln_part_2 = ln_diff_erf(half_l_di, half_l_di - t/l)
|
|
||||||
sign_val = sign(t/l)
|
|
||||||
base = tprime*sign_val*exp(half_l_di*half_l_di-(d_i*t+d_j*tprime)+ln_part_2)-h
|
|
||||||
return base/(d_i+d_j)
|
|
||||||
|
|
||||||
class dh_dl(Function):
|
|
||||||
nargs = 5
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, t, tprime, d_i, d_j, l):
|
|
||||||
if (t.is_Number
|
|
||||||
and tprime.is_Number
|
|
||||||
and d_i.is_Number
|
|
||||||
and d_j.is_Number
|
|
||||||
and l.is_Number):
|
|
||||||
|
|
||||||
diff_t = (t-tprime)
|
|
||||||
l2 = l*l
|
|
||||||
h = h(t, tprime, d_i, d_j, l)
|
|
||||||
return 0.5*d_i*d_i*l*h + 2./(sqrt(pi)*(d_i+d_j))*((-diff_t/l2-d_i/2.)*exp(-diff_t*diff_t/l2)+(-tprime/l2+d_i/2.)*exp(-tprime*tprime/l2-d_i*t)-(-t/l2-d_i/2.)*exp(-t*t/l2-d_j*tprime)-d_i/2.*exp(-(d_i*t+d_j*tprime)))
|
|
||||||
|
|
||||||
class dh_dt(Function):
|
|
||||||
nargs = 5
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, t, tprime, d_i, d_j, l):
|
|
||||||
if (t.is_Number
|
|
||||||
and tprime.is_Number
|
|
||||||
and d_i.is_Number
|
|
||||||
and d_j.is_Number
|
|
||||||
and l.is_Number):
|
|
||||||
if (t is S.NaN
|
|
||||||
or tprime is S.NaN
|
|
||||||
or d_i is S.NaN
|
|
||||||
or d_j is S.NaN
|
|
||||||
or l is S.NaN):
|
|
||||||
return S.NaN
|
|
||||||
else:
|
|
||||||
half_l_di = 0.5*l*d_i
|
|
||||||
arg_1 = half_l_di + tprime/l
|
|
||||||
arg_2 = half_l_di - (t-tprime)/l
|
|
||||||
ln_part_1 = ln_diff_erf(arg_1, arg_2)
|
|
||||||
arg_1 = half_l_di
|
|
||||||
arg_2 = half_l_di - t/l
|
|
||||||
sign_val = sign(t/l)
|
|
||||||
ln_part_2 = ln_diff_erf(half_l_di, half_l_di - t/l)
|
|
||||||
|
|
||||||
|
|
||||||
return (sign_val*exp(half_l_di*half_l_di
|
|
||||||
- d_i*(t-tprime)
|
|
||||||
+ ln_part_1
|
|
||||||
- log(d_i + d_j))
|
|
||||||
- sign_val*exp(half_l_di*half_l_di
|
|
||||||
- d_i*t - d_j*tprime
|
|
||||||
+ ln_part_2
|
|
||||||
- log(d_i + d_j))).diff(t)
|
|
||||||
|
|
||||||
class dh_dtprime(Function):
|
|
||||||
nargs = 5
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, t, tprime, d_i, d_j, l):
|
|
||||||
if (t.is_Number
|
|
||||||
and tprime.is_Number
|
|
||||||
and d_i.is_Number
|
|
||||||
and d_j.is_Number
|
|
||||||
and l.is_Number):
|
|
||||||
if (t is S.NaN
|
|
||||||
or tprime is S.NaN
|
|
||||||
or d_i is S.NaN
|
|
||||||
or d_j is S.NaN
|
|
||||||
or l is S.NaN):
|
|
||||||
return S.NaN
|
|
||||||
else:
|
|
||||||
half_l_di = 0.5*l*d_i
|
|
||||||
arg_1 = half_l_di + tprime/l
|
|
||||||
arg_2 = half_l_di - (t-tprime)/l
|
|
||||||
ln_part_1 = ln_diff_erf(arg_1, arg_2)
|
|
||||||
arg_1 = half_l_di
|
|
||||||
arg_2 = half_l_di - t/l
|
|
||||||
sign_val = sign(t/l)
|
|
||||||
ln_part_2 = ln_diff_erf(half_l_di, half_l_di - t/l)
|
|
||||||
|
|
||||||
|
|
||||||
return (sign_val*exp(half_l_di*half_l_di
|
|
||||||
- d_i*(t-tprime)
|
|
||||||
+ ln_part_1
|
|
||||||
- log(d_i + d_j))
|
|
||||||
- sign_val*exp(half_l_di*half_l_di
|
|
||||||
- d_i*t - d_j*tprime
|
|
||||||
+ ln_part_2
|
|
||||||
- log(d_i + d_j))).diff(tprime)
|
|
||||||
|
|
||||||
|
|
||||||
class h(Function):
|
|
||||||
nargs = 5
|
|
||||||
def fdiff(self, argindex=5):
|
|
||||||
t, tprime, d_i, d_j, l = self.args
|
|
||||||
if argindex == 1:
|
|
||||||
return dh_dt(t, tprime, d_i, d_j, l)
|
|
||||||
elif argindex == 2:
|
|
||||||
return dh_dtprime(t, tprime, d_i, d_j, l)
|
|
||||||
elif argindex == 3:
|
|
||||||
return dh_dd_i(t, tprime, d_i, d_j, l)
|
|
||||||
elif argindex == 4:
|
|
||||||
return dh_dd_j(t, tprime, d_i, d_j, l)
|
|
||||||
elif argindex == 5:
|
|
||||||
return dh_dl(t, tprime, d_i, d_j, l)
|
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def eval(cls, t, tprime, d_i, d_j, l):
|
|
||||||
if (t.is_Number
|
|
||||||
and tprime.is_Number
|
|
||||||
and d_i.is_Number
|
|
||||||
and d_j.is_Number
|
|
||||||
and l.is_Number):
|
|
||||||
if (t is S.NaN
|
|
||||||
or tprime is S.NaN
|
|
||||||
or d_i is S.NaN
|
|
||||||
or d_j is S.NaN
|
|
||||||
or l is S.NaN):
|
|
||||||
return S.NaN
|
|
||||||
else:
|
|
||||||
half_l_di = 0.5*l*d_i
|
|
||||||
arg_1 = half_l_di + tprime/l
|
|
||||||
arg_2 = half_l_di - (t-tprime)/l
|
|
||||||
ln_part_1 = ln_diff_erf(arg_1, arg_2)
|
|
||||||
arg_1 = half_l_di
|
|
||||||
arg_2 = half_l_di - t/l
|
|
||||||
sign_val = sign(t/l)
|
|
||||||
ln_part_2 = ln_diff_erf(half_l_di, half_l_di - t/l)
|
|
||||||
|
|
||||||
|
|
||||||
return (sign_val*exp(half_l_di*half_l_di
|
|
||||||
- d_i*(t-tprime)
|
|
||||||
+ ln_part_1
|
|
||||||
- log(d_i + d_j))
|
|
||||||
- sign_val*exp(half_l_di*half_l_di
|
|
||||||
- d_i*t - d_j*tprime
|
|
||||||
+ ln_part_2
|
|
||||||
- log(d_i + d_j)))
|
|
||||||
|
|
||||||
|
|
||||||
# return (exp((d_j/2.*l)**2)/(d_i+d_j)
|
|
||||||
# *(exp(-d_j*(tprime - t))
|
|
||||||
# *(erf((tprime-t)/l - d_j/2.*l)
|
|
||||||
# + erf(t/l + d_j/2.*l))
|
|
||||||
# - exp(-(d_j*tprime + d_i))
|
|
||||||
# *(erf(tprime/l - d_j/2.*l)
|
|
||||||
# + erf(d_j/2.*l))))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue