Source code for cmdtools.systems.diffusion
import numpy as np
from ..estimation import sqra
[docs]class AbstractDiffusion:
def __init__(self, nx, ny, xlims, ylims, beta=1, phi=1):
xs = np.linspace(*xlims, nx)
ys = np.linspace(*ylims, ny)
self.xs, self.ys = np.meshgrid(xs, ys, sparse=True)
self.beta = beta
self.phi = phi
self.u = self.potential()
self.sqra = sqra.SQRA(self.u, beta=self.beta, phi=self.phi)
self.Q = self.sqra.Q
[docs]class DoubleWell(AbstractDiffusion):
def __init__(self, nx=5, ny=1, xlims=(-2.5, 2.5), ylims=(-1, 1), **kwargs):
super().__init__(nx=nx, ny=ny, xlims=xlims, ylims=ylims, **kwargs)
[docs] def potential(self):
return (self.xs**2-1)**2 + self.ys**2
[docs]class TripleWell(AbstractDiffusion):
def __init__(self, nx=4, ny=3, xlims=(-2, 2), ylims=(-1, 2), **kwargs):
super().__init__(nx=nx, ny=ny, xlims=xlims, ylims=ylims, **kwargs)
[docs] def potential(self):
x = self.xs
y = self.ys
V = (3/4 * np.exp(-x**2 - (y-1/3)**2)
- 3/4 * np.exp(-x**2 - (y-5/3)**2)
- 5/4 * np.exp(-(x-1)**2 - y**2)
- 5/4 * np.exp(-(x+1)**2 - y**2)
+ 1/20 * x**4 + 1/20 * (y-1/3)**4)
return V