示例#1
0
 def sample(self, n=1):
     phi_std = self.phi_std*self.phi_std_factor
     phi = stats.norm.rvs(loc=self.phi_mean, scale=phi_std, size=n)
     
     rho_mean = RP.rho(phi, self.rho_gr, self.rho_fl)
     rho_std = self.rho_std*self.rho_std_factor
     rho = stats.norm.rvs(loc=rho_mean, scale=rho_std, size=n)
     
     vp_mean = RP.Vp(self.Km, self.Gm, phi, self.alpha, self.Kfl, rho)
     vp_std = self.vp_std*self.vp_std_factor
     vp = stats.norm.rvs(loc=vp_mean, scale=vp_std, size=n)
     
     if self.otherspm is not None:
         others = self.otherspm.sample(n)
         return np.vstack([phi, rho, vp, others.T]).T
     else:
         return np.vstack([phi, rho, vp]).T
示例#2
0
 def prob(self, x):
     phi = x[:, 0]
     rho = x[:, 1]
     vp = x[:, 2]
     
     phi_std = self.phi_std*self.phi_std_factor
     p_phi = stats.norm.pdf(phi, loc=self.phi_mean, scale=phi_std)
     
     rho_mean = RP.rho(phi, self.rho_gr, self.rho_fl)
     rho_std = self.rho_std*self.rho_std_factor
     p_rho = stats.norm.pdf(rho, loc=rho_mean, scale=rho_std)
     
     vp_mean = RP.Vp(self.Km, self.Gm, phi, self.alpha, self.Kfl, rho)
     vp_std = self.vp_std*self.vp_std_factor
     p_vp = stats.norm.pdf(vp, loc=vp_mean, scale=vp_std)
     
     p_others = 1.0
     if self.otherspm is not None:
         p_others = self.otherspm.prob(x[:, 3:])
     
     return p_phi*p_rho*p_vp*p_others
示例#3
0
    def calibrate_rho(self):
        method = 'L-BFGS-B'
        options = dict()
        
        rho0 = (self.rho_gr0, self.rho_fl0)
        rho_bounds = ((self.rho_gr_min, self.rho_gr_max), (self.rho_fl_min, self.rho_fl_max))

        rho_par = minimize(self.rho_residual, rho0, method=method, bounds=rho_bounds, options=options)
        
        self.rho_gr = rho_par.x[0]
        self.rho_fl = rho_par.x[1]
        
        if self.rho_std is None:
            self.rho_std = np.std(self.rho - RP.rho(self.phi, self.rho_gr, self.rho_fl), ddof=0)
示例#4
0
 def calibrate_vp(self):
     method = 'L-BFGS-B'
     options = dict()
     
     vp0 = (self.km0, self.gm0, self.alpha0, self.kfl0)
     vp_bounds = ((self.km_min, self.km_max), (self.gm_min, self.gm_max), (self.alpha_min, self.alpha_max), (self.kfl_min, self.kfl_max))
     
     vp_par = minimize(self.vp_residual, vp0, method=method, bounds=vp_bounds, options=options)
     
     self.Km = vp_par.x[0]
     self.Gm = vp_par.x[1]
     self.alpha = vp_par.x[2]
     self.Kfl = vp_par.x[3]
     
     if self.vp_std is None:
         self.vp_std = np.std(self.vp - RP.Vp(self.Km, self.Gm, self.phi, self.alpha, self.Kfl, self.rho), ddof=0)
示例#5
0
 def vp_residual(self, x):
     return np.mean((self.vp - RP.Vp(x[0], x[1], self.phi, x[2], x[3], self.rho))**2)
示例#6
0
 def rho_residual(self, x):
     return np.mean((self.rho - RP.rho(self.phi, x[0], x[1]))**2)