• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Python integrate.odeint函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Python中scipy.integrate.odeint函数的典型用法代码示例。如果您正苦于以下问题:Python odeint函数的具体用法?Python odeint怎么用?Python odeint使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了odeint函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。

示例1: crystal_embed

def crystal_embed(e,eta):
    """
    Evaluates crystal embedding potential by solving the one-dimensional
    Schroedinger equation through one unit cell in both directions.
    """
    y0=[1.0,0.0,0.0,0.0]
    z1=np.linspace(-z_left,-z_left+alat,101)
    sol1=odeint(schroed,y0,z1,args=(e,eta))
    z2=np.linspace(-z_left+alat,-z_left,101)
    sol2=odeint(schroed,y0,z2,args=(e,eta))
    psi1=complex(sol1[50,0],sol1[50,1])
    psi1_prime=complex(sol1[50,2],sol1[50,3])
    psi2=complex(sol2[50,0],sol2[50,1])
    psi2_prime=complex(sol2[50,2],sol2[50,3])
    wronskian=psi1*psi2_prime-psi2*psi1_prime
    psi1=complex(sol1[100,0],sol1[100,1])
    psi2=complex(sol2[100,0],sol2[100,1])
    cos_ka=0.5*(psi1+psi2)
    ka=arccos(cos_ka)
    if ka.imag<0: ka=np.conj(ka)
    exp_ka=cos_ka+1.0j*sqrt(1.0-cos_ka**2)
    emb_cryst=0.5*wronskian/(exp_ka-psi2)
    if emb_cryst.imag>0.0:
        exp_ka=cos_ka-1.0j*sqrt(1.0-cos_ka**2)
        emb_cryst=0.5*wronskian/(exp_ka-psi2)
    return emb_cryst
开发者ID:johninglesfield,项目名称:embedding-notebooks,代码行数:26,代码来源:surface.py


示例2: getEta

def getEta(data,t,xi):
	global samp, ETA, time, agent, XI
	if t < len(data):
		return data[t]
	else:
		XI   = xi # update input function from paramteter
		if len(data) == 0:
			ETA0 = getInitialEta(agent.beta,agent.gamma,XI)
			data.append(ETA0[:])

		for T in range(len(data),t+1):
			# TODO: should this be samp*t so that accuracy is not lost far from 0???
			logging.info('solving ode @ t='+str(T)+', using '+str(samp)+' sub-samples')
			time = linspace(0,T,samp) #(start,end,nSamples)
			etadot_0 = [0,0,0,0,0]	#assumption of 1st order model
			#get arrays of data len=samp*t
			ETA[0] = integrate.odeint(eta1Func,[data[0][0],etadot_0[0]],time)
			ETA[1] = integrate.odeint(eta2Func,[data[0][1],etadot_0[1]],time)
			ETA[2] = integrate.odeint(eta3Func,[data[0][2],etadot_0[2]],time)
			ETA[3] = integrate.odeint(eta4Func,[data[0][3],etadot_0[3]],time)
			ETA[4] = integrate.odeint(eta5Func,[data[0][4],etadot_0[4]],time)
			logging.debug('len(result)='+str(len(ETA[0][:,0])))
			# restructure ETA using [eta#][time , eta_or_dEta] )
			E = [ETA[0][-1,0],\
			     ETA[1][-1,0],\
			     ETA[2][-1,0],\
			     ETA[3][-1,0],\
			     ETA[4][-1,0]]
			data.append(E)
		return data[t]
开发者ID:PIELab,项目名称:behaviorSim,代码行数:30,代码来源:model_firstOrder.py


示例3: ode_wrapper

def ode_wrapper(fun,x0,tsp):
    # array of times at which dynamic uncertainty happens
    tdisc = np.arange(tsp[0],tsp[-1]+DT,DT)

    # determine (ad hoc) whether the called function takes 2 or 3 args
    flag_stoch = False
    try:
        dy = fun(x0,tsp[0],0.0)
        flag_stoch = True
    except TypeError:
        dy = fun(x0,tsp[0])
        flag_stoch = False

    yt = np.zeros((len(tdisc),len(x0)))
    y0 = x0.copy()
    for k in range(len(tdisc)-1):
        if flag_stoch:
            # compute the noise
            v = np.random.normal(scale=q_w)
            yp = sp.odeint(fun,y0,tdisc[k:k+2],args=(v,))
        else:
            yp = sp.odeint(fun,y0,tdisc[k:k+2])
        yt[k,:] = y0.copy()
        y0 = yp[-1,:].copy()
    yt[-1,:] = y0.copy()
    # interpolate in the new history to match the passed-in history tsp
    ysp = np.zeros((len(tsp),len(x0)))
    for k in range(len(x0)):
        ysp[:,k] = np.interp(tsp,tdisc,yt[:,k])
    return ysp
开发者ID:fatadama,项目名称:estimation,代码行数:30,代码来源:cp_dynamics.py


示例4: compute_jacobian

def compute_jacobian(star, differences, surface_guesses, core_guesses, core_masses, surface_masses, mass_step):
    jacobian =(np.zeros((4,4)))

    for i in range(0,4):
        guess_star = copy(star)
        if i == 0:
            step_size = core_guesses[0]*0.01
            guess_star.core_pressure = core_guesses[0] + step_size
        elif i == 1:
            step_size = core_guesses[1]*0.01
            guess_star.core_temp     = core_guesses[1] + step_size
        elif i == 2:
            step_size = surface_guesses[2]*0.01
            guess_star.total_radius  = surface_guesses[2] + step_size
        elif i == 3:
            step_size = surface_guesses[3]*0.01
            guess_star.total_lum     = surface_guesses[3] + step_size

        new_surface = inward_start(guess_star)
        new_core = outward_start(guess_star, mass_step)

        new_differences = difference_is(odeint(derivatives, new_core, core_masses, args=(guess_star,)),
                            odeint(derivatives, new_surface, surface_masses, args=(guess_star,)))
        jacobian[:,i] = np.asarray((new_differences - differences)/step_size)

    return np.linalg.inv(jacobian)
开发者ID:AlexaVillaume,项目名称:StellarEvolution,代码行数:26,代码来源:shootf.py


示例5: __init__

    def __init__(self, f, u0, s, t, dfdu=None):
        self.f = f
        self.t = np.array(t, float).copy()
        self.s = np.array(s, float).copy()

        if self.s.ndim == 0:
            self.s = self.s[np.newaxis]

        if dfdu is None:
            dfdu = ddu(f)
        self.dfdu = dfdu

        u0 = np.array(u0, float)
        if u0.ndim == 1:
            # run up to t[0]
            f = lambda u, t : self.f(u, s)
            assert t[0] >= 0 and t.size > 1
            N0 = int(t[0] / (t[-1] - t[0]) * t.size)
            u0 = odeint(f, u0, np.linspace(0, t[0], N0+1))[-1]

            # compute a trajectory
            self.u = odeint(f, u0, t - t[0])
        else:
            assert (u0.shape[0],) == t.shape
            self.u = u0.copy()

        self.dt = t[1:] - t[:-1]
        self.uMid = 0.5 * (self.u[1:] + self.u[:-1])
        self.dudt = (self.u[1:] - self.u[:-1]) / self.dt[:,np.newaxis]
开发者ID:qiqi,项目名称:lssode,代码行数:29,代码来源:lssode.py


示例6: Advect

    def Advect(self, flow_type = None, t0 = 0, dt = 0, extra_args = None):

        if flow_type is not None:
    
            # Number of particles
            num_particles = len(self.Particles);
        
            # Get the positions of all of the particles
            x0, y0, z0 = self.GetCoordinates();
        
            # Time vector
            tf = t0 + dt;
        
            # Time vector
            t = np.array([t0, tf]);
        
            # Initial positions as a numpy vector
            # in the form compatible with the 
            # velocity functions
            xy0 = np.array(x0 + y0);
            # xy0 = np.array([x0, y0]);
    
            # Choose between fields
            if "hama" in flow_type.lower():
                xy = (odeint(HamaVelocity, y0 = xy0, t = t, args = (extra_args,)))[-1, :];
                
            elif "cpipe" in flow_type.lower():
                xy = (odeint(cpipe, y0 = xy0, t = t, args = (extra_args,)))[-1, :];
                
            # Extract the new positions
            x_new, y_new = Parse_Vector_2d(xy);
            
            # Set the new coordinates
            self.SetCoordinates(x = x_new, y = y_new);
开发者ID:li1503,项目名称:plot-flows-objective,代码行数:34,代码来源:particles.py


示例7: exercise3part1

def exercise3part1(T=200, Deltat=0.1, epsilon=0.5):
    
    "In this exercise we want to perturb the parameters of the Lorenz system to see how the shape of the Lorenz attractor change"
    
    y0=np.random.randn(3)
    t = np.arange(0.,T, Deltat)
    data = integrate.odeint(vectorfield, y0, t=t,args=(10,28,8/3))
    data_sigma=integrate.odeint(vectorfield, y0, t=t,args=(10+epsilon,28,8/3))
    data_rho=integrate.odeint(vectorfield, y0, t=t,args=(10,28+epsilon,8/3))
    data_beta=integrate.odeint(vectorfield, y0, t=t,args=(10,28,8/3+epsilon))
    fig = plt.figure()
    ax0 = fig.add_subplot(2, 2, 1, projection='3d')
    ax1 = fig.add_subplot(2, 2, 2, projection='3d')
    ax2 = fig.add_subplot(2, 2, 3, projection='3d')
    ax3 = fig.add_subplot(2, 2, 4, projection='3d')
    
    ax0.plot(data[:,0],data[:,1],data[:,2])
    ax1.plot(data_sigma[:,0],data_sigma[:,1],data_sigma[:,2])
    ax2.plot(data_rho[:,0],data_rho[:,1],data_rho[:,2])
    ax3.plot(data_beta[:,0],data_beta[:,1],data_beta[:,2])

    ax0.set_title('Standard parameters')
    ax1.set_title('Sigma perturbed')
    ax2.set_title('Rho perturbed')
    ax3.set_title('Beta perturbed')

    pylab.show()
    print 'From the plot, the system seems to be more sensibile in beta perturbations'
开发者ID:carlocafaro,项目名称:Data-and-uncertainty,代码行数:28,代码来源:ergodic.py


示例8: test_repeated_t_values

def test_repeated_t_values():
    """Regression test for gh-8217."""

    def func(x, t):
        return -0.25*x

    t = np.zeros(10)
    sol = odeint(func, [1.], t)
    assert_array_equal(sol, np.ones((len(t), 1)))

    tau = 4*np.log(2)
    t = [0]*9 + [tau, 2*tau, 2*tau, 3*tau]
    sol = odeint(func, [1, 2], t, rtol=1e-12, atol=1e-12)
    expected_sol = np.array([[1.0, 2.0]]*9 +
                            [[0.5, 1.0],
                             [0.25, 0.5],
                             [0.25, 0.5],
                             [0.125, 0.25]])
    assert_allclose(sol, expected_sol)

    # Edge case: empty t sequence.
    sol = odeint(func, [1.], [])
    assert_array_equal(sol, np.array([], dtype=np.float64).reshape((0, 1)))

    # t values are not monotonic.
    assert_raises(ValueError, odeint, func, [1.], [0, 1, 0.5, 0])
    assert_raises(ValueError, odeint, func, [1, 2, 3], [0, -1, -2, 3])
开发者ID:BranYang,项目名称:scipy,代码行数:27,代码来源:test_integrate.py


示例9: computeTrajectories

def computeTrajectories(func, E0=np.zeros(3), **keywords):
  """Movement of electron and ion under a constant magnetic field.
  
  Positional arguments:
  func -- the name of the function computing dy/dt at time t0
  Keyword arguments:
  E0 -- Constant component of the electric field
  All other keyword arguments are collected in a 'keywords' dictionary 
  and are specific to each func."""
    
  from scipy.integrate import odeint
    
  # Processes the func specific arguments
  re0, rp0 = "ri" in keywords.keys() and keywords["ri"] or [np.zeros(3),np.zeros(3)]
  if "vi" in keywords.keys():   # Initial velocity
    v0 = keywords["vi"]
  else:
    v0 = np.array([0,1,0])
  wce, wcp = "wc" in keywords.keys() and keywords["wc"] or [0,0]

  tf = 350; NPts = 10*tf; t = np.linspace(0,tf,NPts)  # Time points

  # Integration of the equations of movement
  Q0 = np.concatenate((re0,v0))                  # Initial values
  if "wc" in keywords.keys():
    keywords["wc"] = wce
  Qe = odeint(func, Q0, t, args=(-q/me,E0,B0,keywords))  # Trajectory for the "electron"
  Q0 = np.concatenate((rp0,v0))                  # Initial values
  if "wc" in keywords.keys():
    keywords["wc"] = wcp
  Qp = odeint(func, Q0, t, args=(q/Mp,E0,B0,keywords))   # Trajectory for the "ion"
  
  return Qe, Qp
开发者ID:npinhao,项目名称:APPLAuSE-lectures,代码行数:33,代码来源:trajectories.py


示例10: Rhalf

def Rhalf(Rp,Rn,a,b):
    Rn /= Rp
    c = (a*a + b*b)**0.5 / Rp
    r = linspace(0.001,1,100)

    def numer(f,r):
        lo,hi = theta_lohi(Rn,c,0,r)
        return r*r * (sin(lo)-sin(hi))

    def denom(f,r):
        lo,hi = theta_lohi(Rn,c,0,r)
        return r * (hi - lo)

    def arc(f,r):
        lo,hi = theta_lohi(Rn,c,d,r)
        return r * (hi - lo)

    up = odeint(numer,[0],r)
    dn = odeint(denom,[0],r)

    d = up[-1,0]/dn[-1,0]
    area = odeint(arc,[0],r)

    for i in range(1,len(r)):
        if area[i-1] < 0.5*area[-1] and area[i] > 0.5*area[-1]:
            return Rp * r[i]
开发者ID:psaha,项目名称:microlens,代码行数:26,代码来源:circles.py


示例11: integrate

def integrate(state, N_t=20, T=1., pts=None):
    """
    flow forward integration

    Points pts are carried along the flow without affecting it
    """
    assert(N)
    assert(DIM)
    assert(SIGMA)
    gaussian.N = N
    gaussian.DIM = DIM
    gaussian.SIGMA = SIGMA

    t_span = np.linspace(0. ,T , N_t )
    #print 'forward integration: SIGMA = ' + str(SIGMA) + ', N = ' + str(N) + ', DIM = ' + str(DIM) + ', N_t = ' + str(N_t) + ', T = ' + str(T)

    if parallel:
        odef = ode_function
    else:
        odef = ode_function_single
    
    if pts == None:
        y_span = odeint( odef , state , t_span)
        return (t_span, y_span)
    else:
        y_span = odeint( odef , np.hstack((state,pts.flatten())) , t_span)
        return (t_span, y_span[:,0:get_dim_state()], y_span[:,get_dim_state():])
开发者ID:YuanhaoGong,项目名称:jetflows,代码行数:27,代码来源:two_jets.py


示例12: poly

def poly(n,zi,dz,filename):
    '''
    Integrates the L-E equation and returns and writes to a file the important values.
    n is the index, zi is the interval to use the polynomial solution, dz is the step size, filename is the prefix for the output file (filename+.fits)
    '''
    #set up equation and variables
    LEeq = LEeqn(n)
    zs = np.arange(0.,zi,dz)
    nz = np.size(zs)

    #integrate over initial interval using polynomial
    y = intg.odeint(thPN,np.array([1.,0.]),zs)

    #integrate until th<0
    while y[-1,0]>0.:
        zs2 = np.arange(zs[-1],zs[-1]+200.*dz,dz)
        zs = np.append(zs,zs2)
        y = np.append(y,intg.odeint(LEeq,y[-1],zs2),axis=0)
        #write progress
        sys.stdout.write("\rz={0},th={1}".format(zs[-1],y[-1,0]))
        sys.stdout.flush()
    sys.stdout.write("\n")

    #only keep values where th>0
    ngood= np.size(np.where(y[:,0]>0.))
    zs = zs[:ngood]
    y = y[:ngood]

    #prepare output array
    data = np.array([zs,y[:,0],-(zs**2)*y[:,1],(-3./zs)*y[:,1]])

    #write and return data
    fits.writeto(filename+'.fits',data)
    return data
开发者ID:smfactor,项目名称:StellarNumericalProj,代码行数:34,代码来源:polytrope.py


示例13: delta_r

	def delta_r(self):
		"""
		returns the coeficient delta indicating the RADIAL stability of the movement
		"""
		time = np.linspace(0, 5, 1000)
		def sm1(x, t):
			if x[0] < 0:
				return np.array([x[1], 0]) 
			else:
				return np.array([x[1], self.eta*self.Ez0(x[0])])
		traj = odeint(sm1,[0,1.],time)
		if traj[-1,0] < 0:
			ind = np.where(traj[:,0] > 0)[0][-1]
			tm = [time[ind+1],time[ind]]
			zm = [traj[ind+1,0],traj[ind,0]]
			period = np.interp(0,zm,tm)
			def sm2(x, t):
				t = t - np.floor(t/period)*period
				pos = np.interp(t, time, traj[:,0])
				psi = self.alpha + self.b**2/4. + (self.eta/2.)*self.d2V(pos)
				return np.array([x[1], psi*x[0], x[3], psi*x[2]])
			x0 = [1, 0, 0, 1]
			sol = odeint(sm2, x0, np.linspace(0, period, 1000))
			delta = np.abs((sol[-1,0] + sol[-1,3])/2)
			beta  = np.arccos((sol[-1,0] + sol[-1,3])/2)/np.pi
			if self.b == 0.:
				return delta
			else:
				out = np.log(delta + np.sqrt(np.abs(delta**2-1)))/period - self.b
				return out
		else:
			return 1.0
开发者ID:vallettea,项目名称:pytrap,代码行数:32,代码来源:__init__.py


示例14: runClock

def runClock(dut, t_start, init_cond):
        global ts, dt, sig_jit
        global p0, z0
        global t_ab, t_ba

        alpha = random.normal(0, sig_jit)
        beta  = random.normal(0, sig_jit)
        print (alpha, beta) 
        t1 = arange(0, t_ab + alpha, dt)
        t2 = arange(0, t_ba + beta,  dt)

        concatenate((t1, [t_ab + alpha])) # 0 ~ t_ab + jitter
        concatenate((t2, [t_ba + beta ])) # 0 ~ t_ba + jitter
        t2 = map(lambda x: x + t1[-1], t2) # 0 ~ t_ab+jitter, t_ab+jitter ~ (t_ab+t_ba+2*jitter)
        
        state_half = odeint(dut, init_cond,      t1, args=(t_start, p0, z0))
        eventAtA(state_half[-1,:]) # comparator / DAC
        
        if(t_ba > dt): # when t_ba = 0 sec (NRZ DAC)
                state_full = odeint(dut, state_half[-1], t2, args=(t_start, p0, z0))
                eventAtB(state_full[-1,:]) # DAC (RZ)
                t     = concatenate((t1,         t2        ))
                state = concatenate((state_half, state_full))
        else:
                t     = t1 
                state = state_half 

        return (t, state)
开发者ID:7akase,项目名称:delsig,代码行数:28,代码来源:ctdsm.py


示例15: Gate

def Gate(x,t):
  global pars
  xinf = ActivationCurve(V[:,1], pars[0], pars[1])
  tau = Kinetic(V[:,1], pars[2], pars[3], pars[4], pars[5])
  return (xinf-x)/tau

  # the following function is the optimisation part of the algorithm. The two chanels are modeled with initial conditions 
  # and the result is compared to the data, taking account the parameter physiological ranges for identificationdef FullTrace(p,time,y):
  pars = p[0:6]
  rinit1 = ActivationCurve(V[:,0], pars[0], pars[1]) # initial values
  r1 = odeint(Gate,rinit1,time)
  pars = p[7:13]
  rinit2 = ActivationCurve(V[:,0], pars[0], pars[1]) # initial values
  r2 = odeint(Gate,rinit2,time)
  I = p[6]*r1*(V[:,1]-E)+p[13]*r2*(V[:,1]-E)
  
  
  # this plot is to see in real time the reconstructed curves trying to fit the data (very fun)
  plot(time,y,'b'); hold(True)
  plot(time,I,'--r');hold(False)
  draw()  
  
  # this part is added to constrain the algorithm with physiological search ranges
  A = 0
  for a in arange(len(p)):
    if p[a] > HB[a] :
      A = A + (p[a] - HB[a])*1e8
    if p[a] < LB[a] :
      A = A + (LB[a]-p[a])*1e8
  return sum(array(y - I)*array(y - I))+A
开发者ID:micchr,项目名称:Identification-algorithm,代码行数:30,代码来源:FullTrace.py


示例16: solve_leg_transient

    def solve_leg_transient(self):

        """Solves leg based on array of transient BC's."""

        self.delta_x = self.x[1] - self.x[0]

        self.y0 = self.T_x

        try: 
            self.T_xt

        except AttributeError:
            self.odeint_output = odeint(
                self.get_dTx_dt, y0=self.y0, t=self.t_array,
                full_output=1 
                )
            self.T_xt = self.odeint_output[0]

        else:
            self.y0 = self.T_xt[-1,:]
            self.odeint_output = odeint(
                self.get_dTx_dt, y0=self.y0, t=self.t_array,
                full_output=1 
                )
            self.T_xt = np.concatenate((self.T_xt, self.odeint_output[0]))
开发者ID:calbaker,项目名称:TE_Model,代码行数:25,代码来源:leg.py


示例17: modelrun

 def modelrun(self):
     """
     Method to integrate a specific size-based model variant.
     The integration it is done with the module "integrate.odeint",
     from the library scipy.
     """
     try:
         if self.Model == "Imm":
             outarray = odeint(self.sizemodel_imm, self.initcond, self.timedays)
             return outarray      
         elif self.Model == "TraitDif":
             outarray = odeint(self.sizemodel_traitdif, self.initcond, self.timedays)
             return outarray      
         elif self.Model == "FixVar":
             outarray = odeint(self.sizemodel_fixvar, self.initcond, self.timedays)
             return outarray  
         elif self.Model == "UnsustVar":
             outarray = odeint(self.sizemodel_unvar, self.initcond, self.timedays)
             return outarray      
         elif self.Model == "FullModel":
             outarray = odeint(self.fullmodel, self.initcond, self.timedays, rtol=1e-12, atol=1e-12)
             return outarray
         raise Exception("InputError:", "it is not a valid size model variant. Please specify one model variant "
                                        "from: Imm, TraitDif, Fixvar, UnsustVar or FullModel.\n")
     except Exception as expt:
         print expt.args[0], self.Model, expt.args[1]
         raise 
开发者ID:SEGGroup,项目名称:PhytoSFDM,代码行数:27,代码来源:sizemodels.py


示例18: newton_ang_func

def newton_ang_func(L_val,c2,m):

   L = L_val

   slope = (m*(m+1)+c2-L)/(m+1)/2.
   z0 = [1+step*slope,slope]

   z = odeint(f,z0,x_ang,args=(c2,L,m))

   temp=1-pow(x_ang,2.0)
   temp=pow(temp,m/2.)

   zz=temp*z[:,0]

   first_zz = np.array([1])
   zz=np.append(first_zz, zz)

   sloper = -(m*(m+1)+c2-L)/(m+1)/2.
   z0r = [1-step*sloper,sloper]

   zr = odeint(f,z0r,x_angr,args=(c2,L,m))

   zzr=temp*zr[:,0]
   zzr=np.append(first_zz, zzr)
 
   return  z[:,1][-1]
开发者ID:eronca,项目名称:PYQCTools,代码行数:26,代码来源:h2p_solver.py


示例19: get_pressure

def get_pressure(Planet,layers):
    radii   = Planet.get('radius')
    density = Planet.get('density')
    gravity = Planet.get('gravity')

    num_mantle_layers, num_core_layers, number_h2o_layers = layers


    # convert radii to depths
    depths       = radii[-1] - radii
    depths_core  = depths[:num_core_layers]
    gravity_core = gravity[:num_core_layers]
    density_core = density[:num_core_layers]

    depths_mant  = depths[num_core_layers:(num_core_layers+num_mantle_layers)]
    gravity_mant = gravity[num_core_layers:(num_core_layers+num_mantle_layers)]
    density_mant = density[num_core_layers:(num_core_layers+num_mantle_layers)]



    # Make a spline fit of density as a function of depth
    rhofunc_mant = interpolate.UnivariateSpline(depths_mant[::-1], density_mant[::-1])
    # Make a spline fit of gravity as a function of depth
    gfunc_mant   = interpolate.UnivariateSpline(depths_mant[::-1], gravity_mant[::-1])

    rhofunc_core = interpolate.UnivariateSpline(depths_core[::-1], density_core[::-1])
    gfunc_core   = interpolate.UnivariateSpline(depths_core[::-1], gravity_core[::-1])

    if number_h2o_layers > 0:
        depths_water  = depths[(num_core_layers + num_mantle_layers):]
        gravity_water = gravity[(num_core_layers + num_mantle_layers):]
        density_water = density[(num_core_layers + num_mantle_layers):]

        rhofunc_water = interpolate.UnivariateSpline(depths_water[::-1], density_water[::-1])
        gfunc_water   = interpolate.UnivariateSpline(depths_water[::-1], gravity_water[::-1])

        #integrate from 1 bar
        pressure_water = np.ravel(odeint((lambda p, x: gfunc_water(x) * rhofunc_water(x)),(1./10000.)*1.e9, depths_water[::-1]))
        WMB_pres       = pressure_water[-1] #does not account for very small water layers and ends up breaking code
        WMB_pres = 5.e8


    else:
        WMB_pres = 5.e8



    # integrate the hydrostatic equation
    pressure_mant = np.ravel(odeint((lambda p, x: gfunc_mant(x) * rhofunc_mant(x)),WMB_pres, depths_mant[::-1]))
    CMB_pres      = pressure_mant[-1]
    pressure_core = np.ravel(odeint((lambda p, x: gfunc_core(x) * rhofunc_core(x)),CMB_pres, depths_core[::-1]))

    if number_h2o_layers > 0:
        pressure = np.concatenate((pressure_water,pressure_mant,pressure_core),axis=0)
        pressure = [((i/1.e9)*10000.) for i in pressure]
        return np.asarray(pressure[::-1])
    else:
        pressure = np.concatenate((pressure_mant,pressure_core),axis=0)
        pressure = [((i/1.e9)*10000.) for i in pressure]
        return np.asarray(pressure[::-1])
开发者ID:amloren1,项目名称:ExoPlex,代码行数:60,代码来源:minphys.py


示例20: draw

    def draw(self,file=None):
        """
        Trace l'ensemble des lignes de champ passant par les points de départ 
        stockés dans Startpoints. Si un nom de fichier est donné, enregistre 
        la figure dans le fichier mais n'affiche rien à l'écran
        """

        def fun(P,t):
            B = self.B(P)
            Bx = B[0]
            By = B[1]
            B = np.sqrt(Bx*Bx+By*By)
            return [Bx/pow(B,4./3.),By/pow(B,4./3.)]

        t = np.linspace(0,self.k*self.maxint,self.numpoints/2)
        t2 = - t
        for P0 in self.startpoints:
            sol = odeint(fun,P0,t)
            x = sol[:,0]
            y = sol[:,1]
            pl.plot(x,y,'-',color='k')
            sol = odeint(fun,P0,t2)
            x = sol[1:,0]
            y = sol[1:,1]
            pl.plot(x,y,'-',color='k')
            pl.arrow(x[1],y[1],x[0]-x[1],y[0]-y[1],color='k')
        pl.title(self.title)
        pl.xlim([-self.size,self.size])
        pl.ylim([-self.size,self.size])
        if file:
            pl.savefig(file)
            pl.close()
        else:
            pl.show()
开发者ID:cjorssen,项目名称:py4phys,代码行数:34,代码来源:I1_lignes_champ_magnetique.py



注:本文中的scipy.integrate.odeint函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Python integrate.quad函数代码示例发布时间:2022-05-27
下一篇:
Python integrate.ode函数代码示例发布时间:2022-05-27
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap