def _eval(self, z): """ Solves the dynamical system for given parameters x. """ z = view_as_column(z) x = np.exp(z) # Points where the solution will be evaluated t = np.array([0., 1./6, 1./3, 1./2, 2./3, 5./6, 1.]) t = view_as_column(t) # Initial condition y0 = np.array([1., 0., 0., 0., 0., 0.]) y0 = view_as_column(y0) assert x.shape[0] == 5 sol = f(x[:,0], y0[:,0], t[:,0]) J = df(x[:,0], y0[:,0], t[:,0]) H = df2(x[:,0], y0[:,0], t[:,0]) y = np.delete(sol.reshape((7,6)), 2, 1).flatten() # The 3rd species is unobservable dy = np.array([np.delete(J[:,i].reshape((7,6)), 2, 1).reshape(35) for i in range(J.shape[1])]) # Delete the 3rd species d2y = np.zeros((35, H.shape[1], H.shape[2])) for i in range(H.shape[1]): for j in range(H.shape[2]): d2y[:,i,j]= np.delete(H[:,i,j].reshape((7,6)), 2, 1).reshape(35) # Delete the 3rd species state = {} state['f'] = y state['f_grad'] = dy.T * x.T xx = np.kron(x, x.T) state['f_grad_2'] = d2y * xx return state
def _eval(self, x): """ Solves the dynamical system for given parameters x. """ x = view_as_column(x) # Points where the solution will be evaluated t = np.array([0., 30., 60., 90., 120., 150., 180.]) t = view_as_column(t) # Initial condition y0 = np.array([500., 0., 0., 0., 0., 0.]) y0 = view_as_column(y0) assert x.shape[0] == 5 sol = f(x[:, 0], y0[:, 0], t[:, 0]) J = df(x[:, 0], y0[:, 0], t[:, 0]) H = df2(x[:, 0], y0[:, 0], t[:, 0]) y = np.delete(sol.reshape((7, 6)), 2, 1).flatten() # The 3rd species is unobservable dy = np.array([ np.delete(J[:, i].reshape((7, 6)), 2, 1).reshape(35) for i in range(J.shape[1]) ]) # Delete the 3rd species d2y = np.zeros((35, H.shape[1], H.shape[2])) for i in range(H.shape[1]): for j in range(H.shape[2]): d2y[:, i, j] = np.delete(H[:, i, j].reshape( (7, 6)), 2, 1).reshape(35) # Delete the 3rd species state = {} state['f'] = y state['f_grad'] = dy.T state['f_grad_2'] = d2y return state
def _eval(self, xs): """ Solves the advection equation for u and its derivatives for a given source location xs. """ xs = view_as_column(xs) assert xs.shape[0] == 2 nx = 50 ny = nx dx = 0.1 dy = dx mesh = fp.Grid2D(dx=dx, dy=dy, nx=nx, ny=ny) vx, vy = make_V_field(mesh) u = f(xs[:, 0], mesh, vx, vy) du1 = df(xs[:, 0], mesh, vx, vy, 1) du2 = df(xs[:, 0], mesh, vx, vy, 2) d2u11 = df2(xs[:, 0], mesh, vx, vy, 1, 1) d2u22 = df2(xs[:, 0], mesh, vx, vy, 1, 1) d2u12 = df2(xs[:, 0], mesh, vx, vy, 1, 2) dU = np.hstack([view_as_column(du1), view_as_column(du2)]) d2U = np.hstack([ view_as_column(d2u11), view_as_column(d2u12), view_as_column(d2u12), view_as_column(d2u22) ]) d2U = d2U.reshape((d2U.shape[0], 2, 2)) state = {} state['f'] = u #view_as_column(u) state['f_grad'] = dU state['f_grad_2'] = d2U return state
def _eval(self, xs): """ Solves the diffusion equations for u and its derivatives for a given source location xs. """ xs = view_as_column(xs) assert xs.shape[0] == 2 nx = 25 ny = nx dx = 0.04 dy = dx mesh = fp.Grid2D(dx=dx, dy=dy, nx=nx, ny=ny) u = f(xs[:,0], mesh) du1 = df(xs[:,0], mesh, 1) du2 = df(xs[:,0], mesh, 2) d2u11 = df2(xs[:,0], mesh, 1, 1) d2u22 = df2(xs[:,0], mesh, 1, 1) d2u12 = df2(xs[:,0], mesh, 1, 2) dU = np.hstack([view_as_column(du1), view_as_column(du2)]) d2U = np.hstack([view_as_column(d2u11), view_as_column(d2u12), view_as_column(d2u12), view_as_column(d2u22)]) d2U = d2U.reshape((d2U.shape[0], 2, 2)) state = {} state['f'] = u #view_as_column(u) state['f_grad'] = dU state['f_grad_2'] = d2U return state
def _eval(self, x): """ Solves the dynamical system for given parameters x. """ x = view_as_column(x) # Points where the solution will be evaluated t = np.array([0., 1. / 6, 1. / 3, 1. / 2, 2. / 3, 5. / 6, 1.]) t = view_as_column(t) # Initial condition y0 = np.array([1., 0., 0., 0., 0., 0.]) y0 = view_as_column(y0) assert x.shape[0] == 5 sol = f(x[:, 0], y0[:, 0], t[:, 0]) J = df(x[:, 0], y0[:, 0], t[:, 0]) H = df2(x[:, 0], y0[:, 0], t[:, 0]) y = np.delete(sol.reshape((7, 6)), 2, 1).flatten() # The 3rd species is unobservable sol_y = np.delete(y.reshape((7, 5)), 0, 0).reshape( 30) # Delete the initial conditions from the data dy = np.array([ np.delete(J[:, i].reshape((7, 6)), 2, 1).reshape(35) for i in range(J.shape[1]) ]) # Delete the 3rd species sol_dy = np.array([ np.delete(dy[i, :].reshape((7, 5)), 0, 0).flatten() for i in range(dy.shape[0]) ]) # Delete the initial cond. sol_d2y = np.zeros((30, H.shape[1], H.shape[2])) for i in range(H.shape[1]): for j in range(H.shape[2]): d2y = np.delete(H[:, i, j].reshape((7, 6)), 2, 1).reshape(35) # Delete the 3rd species sol_d2y[:, i, j] = np.delete(d2y.reshape((7, 5)), 0, 0).flatten() state = {} state['f'] = sol_y state['f_grad'] = sol_dy.T state['f_grad_2'] = sol_d2y return state
def _eval_u(self, xs): """ Solves only the diffusion equation for u for a given source location xs. """ xs = view_as_column(xs) assert xs.shape[0] == 2 nx = 25 ny = nx dx = 0.04 dy = dx mesh = fp.Grid2D(dx=dx, dy=dy, nx=nx, ny=ny) u = f(xs[:,0], mesh) return u