def update_operator(self, t: float, mesh: Mesh):
        diffusion = self._pde.diffusion(t, mesh.get_points())
        convection = self._pde.convection(t, mesh.get_points(), diffusion)
        source = self._pde.source(t, mesh.get_points())

        self._laplacian.update_operator(t, mesh)
        self._gradient.update_operator(t, mesh)

        Tools.update_diagonal(diffusion,
                              convection,
                              source,
                              self._gradient.diagonal(),
                              self._laplacian.diagonal(),
                              self.diagonal())

        Tools.update_diagonal_upper(diffusion,
                                    convection,
                                    self._gradient.diagonal_upper(),
                                    self._laplacian.diagonal_upper(),
                                    self.diagonal_upper())

        Tools.update_diagonal_lower(diffusion,
                                    convection,
                                    self._gradient.diagonal_lower(),
                                    self._laplacian.diagonal_lower(),
                                    self.diagonal_lower())
示例#2
0
def f_ln_payoff(mesh: Mesh, k: float) -> np_ndarray:
    return np.maximum(np.exp(mesh.get_points()) - k, 0.0)