modelObj and dataObj --> eval

This commit is contained in:
rowanc1
2014-05-18 17:09:44 -07:00
parent c153183894
commit 8f69670fce
5 changed files with 26 additions and 28 deletions
+12 -12
View File
@@ -22,8 +22,8 @@ class BaseDataMisfit(object):
Utils.setKwargs(self,**kwargs)
@Utils.timeIt
def dataObj(self, m, u=None):
"""dataObj(m, u=None)
def eval(self, m, u=None):
"""eval(m, u=None)
:param Problem,Survey forward: forward simulation
:param numpy.array m: geophysical model
@@ -35,8 +35,8 @@ class BaseDataMisfit(object):
raise NotImplementedError('This method should be overwritten.')
@Utils.timeIt
def dataObjDeriv(self, m, u=None):
"""dataObjDeriv(m, u=None)
def evalDeriv(self, m, u=None):
"""evalDeriv(m, u=None)
:param Problem,Survey forward: forward simulation
:param numpy.array m: geophysical model
@@ -49,8 +49,8 @@ class BaseDataMisfit(object):
@Utils.timeIt
def dataObj2Deriv(self, m, v, u=None):
"""dataObj2Deriv(m, v, u=None)
def eval2Deriv(self, m, v, u=None):
"""eval2Deriv(m, v, u=None)
:param Problem,Survey forward: forward simulation
:param numpy.array m: geophysical model
@@ -116,24 +116,24 @@ class l2_DataMisfit(BaseDataMisfit):
self._Wd = value
@Utils.timeIt
def dataObj(self, m, u=None):
"dataObj2Deriv(m, u=None)"
def eval(self, m, u=None):
"eval(m, u=None)"
prob = self.prob
survey = self.survey
R = self.Wd * survey.residual(m, u=u)
return 0.5*np.vdot(R, R)
@Utils.timeIt
def dataObjDeriv(self, m, u=None):
"dataObj2Deriv(m, u=None)"
def evalDeriv(self, m, u=None):
"evalDeriv(m, u=None)"
prob = self.prob
survey = self.survey
if u is None: u = prob.fields(m)
return prob.Jtvec(m, self.Wd * (self.Wd * survey.residual(m, u=u)), u=u)
@Utils.timeIt
def dataObj2Deriv(self, m, v, u=None):
"dataObj2Deriv(m, v, u=None)"
def eval2Deriv(self, m, v, u=None):
"eval2Deriv(m, v, u=None)"
prob = self.prob
if u is None: u = prob.fields(m)
return prob.Jtvec_approx(m, self.Wd * (self.Wd * prob.Jvec_approx(m, v, u=u)), u=u)
+2 -2
View File
@@ -126,8 +126,8 @@ class BetaEstimate_ByEig(InversionDirective):
u = self.invProb.u_current or self.prob.fields(m)
x0 = np.random.rand(*m.shape)
t = x0.dot(self.dmisfit.dataObj2Deriv(m,x0,u=u))
b = x0.dot(self.reg.modelObj2Deriv(m, v=x0))
t = x0.dot(self.dmisfit.eval2Deriv(m,x0,u=u))
b = x0.dot(self.reg.eval2Deriv(m, v=x0))
self.beta0 = self.beta0_ratio*(t/b)
self.invProb.beta = self.beta0
+8 -8
View File
@@ -50,8 +50,8 @@ class BaseInvProblem(object):
self.m_current = m0
print 'SimPEG.InvProblem is setting bfgsH0 to the inverse of the modelObj2Deriv. \n ***Done using direct methods***'
self.opt.bfgsH0 = Solver(self.reg.modelObj2Deriv(self.m_current))
print 'SimPEG.InvProblem is setting bfgsH0 to the inverse of the eval2Deriv. \n ***Done using direct methods***'
self.opt.bfgsH0 = Solver(self.reg.eval2Deriv(self.m_current))
@Utils.timeIt
def evalFunction(self, m, return_g=True, return_H=True):
@@ -66,8 +66,8 @@ class BaseInvProblem(object):
u = self.prob.fields(m)
self.u_current = u
phi_d = self.dmisfit.dataObj(m, u=u)
phi_m = self.reg.modelObj(m)
phi_d = self.dmisfit.eval(m, u=u)
phi_m = self.reg.eval(m)
self.dpred = self.survey.dpred(m, u=u) # This is a cheap matrix vector calculation.
@@ -78,16 +78,16 @@ class BaseInvProblem(object):
out = (f,)
if return_g:
phi_dDeriv = self.dmisfit.dataObjDeriv(m, u=u)
phi_mDeriv = self.reg.modelObjDeriv(m)
phi_dDeriv = self.dmisfit.evalDeriv(m, u=u)
phi_mDeriv = self.reg.evalDeriv(m)
g = phi_dDeriv + self.beta * phi_mDeriv
out += (g,)
if return_H:
def H_fun(v):
phi_d2Deriv = self.dmisfit.dataObj2Deriv(m, v, u=u)
phi_m2Deriv = self.reg.modelObj2Deriv(m, v=v)
phi_d2Deriv = self.dmisfit.eval2Deriv(m, v, u=u)
phi_m2Deriv = self.reg.eval2Deriv(m, v=v)
return phi_d2Deriv + self.beta * phi_m2Deriv
+3 -5
View File
@@ -12,8 +12,6 @@ class BaseRegularization(object):
__metaclass__ = Utils.SimPEGMetaClass
counter = None
mapPair = Maps.IdentityMap #: A SimPEG.Map Class
@@ -60,12 +58,12 @@ class BaseRegularization(object):
@Utils.timeIt
def modelObj(self, m):
def eval(self, m):
r = self.W * ( self.mapping * (m - self.mref) )
return 0.5*r.dot(r)
@Utils.timeIt
def modelObjDeriv(self, m):
def evalDeriv(self, m):
"""
The regularization is:
@@ -86,7 +84,7 @@ class BaseRegularization(object):
return mD.T * ( self.W.T * r )
@Utils.timeIt
def modelObj2Deriv(self, m, v=None):
def eval2Deriv(self, m, v=None):
"""
:param numpy.array m: geophysical model
+1 -1
View File
@@ -23,7 +23,7 @@ class RegularizationTests(unittest.TestCase):
reg = r(self.mesh2, mapping=mapping)
m = np.random.rand(mapping.nP)
reg.mref = m[:]*0
passed = checkDerivative(lambda m : [reg.modelObj(m), reg.modelObjDeriv(m)], m, plotIt=False)
passed = checkDerivative(lambda m : [reg.eval(m), reg.evalDeriv(m)], m, plotIt=False)
self.assertTrue(passed)