def fit(X, Y, sigma, lmbda, L_X, L_Y, cg_tol=1e-3, cg_maxiter=None, alpha0=None):
    if cg_maxiter is None:
        # CG needs at max dimension many iterations
        cg_maxiter = L_X.shape[0]

    NX = X.shape[0]

    # set up and solve regularised linear system via bicgstab
    # this never stores an NxN matrix
    b = compute_b(X, Y, L_X, L_Y, sigma)
    matvec = lambda v: apply_left_C(v, X, Y, L_X, L_Y, lmbda)
    C_operator = LinearOperator((NX, NX), matvec=matvec, dtype=np.float64)

    # for printing number of CG iterations
    global counter
    counter = 0

    def callback(x):
        global counter
        counter += 1

    # start optimisation from alpha0, if present
    if alpha0 is not None:
        logger.debug("Starting bicgstab from previous alpha0")
    solution, info = bicgstab(C_operator, b, tol=cg_tol, maxiter=cg_maxiter, callback=callback, x0=alpha0)
    logger.debug("Ran bicgstab for %d iterations." % counter)
    if info > 0:
        logger.warning("Warning: CG not convergence in %.3f tolerance within %d iterations" % (cg_tol, cg_maxiter))
    a = -sigma / 2.0 * solution
    return a
def fit_sym(Z, sigma, lmbda, L, cg_tol=1e-3, cg_maxiter=None):
    if cg_maxiter is None:
        # CG needs at max dimension many iterations
        cg_maxiter = L.shape[0]

    N = Z.shape[0]

    # set up and solve regularised linear system via bicgstab
    # this never stores an NxN matrix
    b = compute_b_sym(Z, L, sigma)
    matvec = lambda v: apply_left_C_sym(v, Z, L, lmbda)
    C_operator = LinearOperator((N, N), matvec=matvec, dtype=np.float64)
    solution, info = bicgstab(C_operator, b, tol=cg_tol, maxiter=cg_maxiter)
    if info > 0:
        print "Warning: CG not terminated within specified %d iterations" % cg_maxiter
    a = -sigma / 2.0 * solution

    return a
Example #3
0
def fit(X,
        Y,
        sigma,
        lmbda,
        L_X,
        L_Y,
        cg_tol=1e-3,
        cg_maxiter=None,
        alpha0=None):
    if cg_maxiter is None:
        # CG needs at max dimension many iterations
        cg_maxiter = L_X.shape[0]

    NX = X.shape[0]

    # set up and solve regularised linear system via bicgstab
    # this never stores an NxN matrix
    b = compute_b(X, Y, L_X, L_Y, sigma)
    matvec = lambda v: apply_left_C(v, X, Y, L_X, L_Y, lmbda)
    C_operator = LinearOperator((NX, NX), matvec=matvec, dtype=np.float64)

    # for printing number of CG iterations
    global counter
    counter = 0

    def callback(x):
        global counter
        counter += 1

    # start optimisation from alpha0, if present
    if alpha0 is not None:
        logger.debug("Starting bicgstab from previous alpha0")
    solution, info = bicgstab(C_operator,
                              b,
                              tol=cg_tol,
                              maxiter=cg_maxiter,
                              callback=callback,
                              x0=alpha0)
    logger.debug("Ran bicgstab for %d iterations." % counter)
    if info > 0:
        logger.warning("Warning: CG not convergence in %.3f tolerance within %d iterations" % \
                       (cg_tol, cg_maxiter))
    a = -sigma / 2. * solution
    return a
Example #4
0
def score_matching_low_rank(X, Y, sigma, lmbda, L_X, L_Y,
                                                    cg_tol=1e-3,
                                                    cg_maxiter=None):
        if cg_maxiter is None:
            # CG needs at max dimension many iterations
            cg_maxiter = L_X.shape[0]
        
        NX = X.shape[0]
        
        # set up and solve regularised linear system via bicgstab
        # this never stores an NxN matrix
        b = _compute_b_low_rank(X, Y, L_X, L_Y, sigma)
        matvec = lambda v:_apply_left_C_low_rank(v, X, Y, L_X, L_Y, lmbda)
        C_operator = LinearOperator((NX, NX), matvec=matvec, dtype=np.float64)
        solution, info = bicgstab(C_operator, b, tol=cg_tol, maxiter=cg_maxiter)
        if info > 0:
            print "Warning: CG not terminated within specified %d iterations" % cg_maxiter
        a = -sigma / 2. * solution
        
        return a
Example #5
0
def fit_sym(Z, sigma, lmbda, L,
                                                    cg_tol=1e-3,
                                                    cg_maxiter=None):
        if cg_maxiter is None:
            # CG needs at max dimension many iterations
            cg_maxiter = L.shape[0]
        
        N = Z.shape[0]
        
        # set up and solve regularised linear system via bicgstab
        # this never stores an NxN matrix
        b = compute_b_sym(Z, L, sigma)
        matvec = lambda v:apply_left_C_sym(v, Z, L, lmbda)
        C_operator = LinearOperator((N, N), matvec=matvec, dtype=np.float64)
        solution, info = bicgstab(C_operator, b, tol=cg_tol, maxiter=cg_maxiter)
        if info > 0:
            print "Warning: CG not terminated within specified %d iterations" % cg_maxiter
        a = -sigma / 2. * solution
        
        return a
Example #6
0
    momY_M = Myc - Myd
    # RHS:
    momX_F = -(Fxc - Fxd) - gradP[:, 0] * mesh.cells_areas
    momY_F = -(Fyc - Fyd) - gradP[:, 1] * mesh.cells_areas

    print "Initial continuity residual:", np.linalg.norm(edgeDiv(phi))      # spr spelnienie RC w obszarze
    print "Initial Ux residual:", np.linalg.norm(momX_M.dot(Ux.data) - momX_F)
    print "Initial Uy residual:", np.linalg.norm(momY_M.dot(Uy.data) - momY_F)

    momX_M.relaxM1(momX_F, Ux, mom_relax)
    momY_M.relaxM1(momY_F, Uy, mom_relax)

    # 2.  rozwiazuje rownania pedu:
    # obliczam i uaktualniam pole predkosci (setValues()):

    Ux.setValues(bicgstab(A=momX_M.sparse, b=momX_F, x0=Ux.data, tol=1e-8)[0])
    Uy.setValues(bicgstab(A=momY_M.sparse, b=momY_F, x0=Uy.data, tol=1e-8)[0])

    edgeU = EdgeField.vector(einterp(Ux), einterp(Uy))       # pole predkosci na krawedziach my mamy w centrach (tak ukladam i rozwiazuje uklad rownan)
    phi = edgeU.dot(mesh.normals)

    A = np.array([np.array(momX_M.diag), np.array(momY_M.diag)]).T

    coeffFieldX = SurfField(mesh, Neuman)
    coeffFieldX.setValues(mesh.cells_areas / A[:, 0])

    coeffFieldY = SurfField(mesh, Neuman)
    coeffFieldY.setValues(mesh.cells_areas / A[:, 1])

    coeffEdge = EdgeField.vector(EdgeField.interp(coeffFieldX), EdgeField.interp(coeffFieldY))          # interpoluje wsp ze srodkow komorek na fejsy
Example #7
0
# print "Mc diag", Mc.diag
# print "Mc data",Mc.data
#
# print "Md data",Md.data
# print "Md diag",Md.diag

# print "Fc",Fc
# print "Fd",Fd
# print "F",F

# print "M data",M.data
# print "M diag",M.diag
# print M.sparse



res, info = bicgstab(A=M.sparse, b=F, x0=T.data, tol=1e-8, maxiter=250e3)

T.setValues(res)

print ">>>> info: ", info

# animate_contour_plot([T.data.reshape(n, n)], skip=10, repeat=False, interval=75)
animate_contour_plot([inter(mesh.xy, mesh.cells, T.data).reshape((n+1, n+1))], skip=10, nLevels=16, repeat=False, interval=75, nN=n, diff=diffusivity, adj=adj)

# magU = np.sqrt(Ux.data**2 + Uy.data**2)
# print magU.shape, n*n, Ux.data.shape
# animate_contour_plot([magU.reshape(n, n)], skip=10, repeat=False, interval=75)

plt.show()
Example #8
0
print ">>>> Equations generated in " , time.clock()-start
start = time.clock()

Results = list()
Tn = T.data.reshape((n, n))
Results.append(Tn)

from scipy.sparse.linalg.isolve.iterative import bicgstab

licznik = 0
step = 10

for iter in range(int(nt)):
    licznik = licznik + 1

    solution = bicgstab(A=M.sparse, b=F + source(mesh, T.data/dt), x0=T.data, tol=1e-8)[0]

    T.setValues(solution)
    if licznik == step:
        Results.append(T.data.reshape((n, n)))
        licznik = 0
        step += 10 + 1
    print "pozostalo: ", int(nt - iter)

anim = animate_contour_plot(Results, skip=2, repeat=False, interval=75, nLevels=20, nN=n, dataRange=[0., 10], diff=diffusivity, dt=dt, adj=adj)

# from interpolacja import inter
# from matplotlib.pyplot import quiver
# q = quiver(mesh.cell_centers[:, 0], mesh.cell_centers[:, 1], Ux[:], Uy[:])

# animate_contour_plot([inter(mesh.xy, mesh.cells, T.data).reshape((n+1, n+1))], skip=10, repeat=False, interval=75, dataRange=[0, 10])
Example #9
0
    momY_M = Myc - Myd * viscosity

    momX_F = -(Fxc - Fxd * viscosity) - gradP[:, 0]*mesh.cells_areas
    momY_F = -(Fyc - Fyd * viscosity) - gradP[:, 1]*mesh.cells_areas

    # momX_M = Mxd * (-viscosity)
    # momY_M = Myd * (-viscosity)
    #
    # momX_F = Fxd * viscosity - gradP[:, 0]*mesh.cells_areas
    # momY_F = Fyd * viscosity - gradP[:, 1]*mesh.cells_areas


    momX_M.relax(0.7)
    momY_M.relax(0.7)

    xSol = bicgstab(A=momX_M.sparse, b=momX_F, x0=Ux.data)[0]
    ySol = bicgstab(A=momY_M.sparse, b=momY_F, x0=Uy.data)[0]

    Ux.setValues(xSol)
    Uy.setValues(ySol)
    # Ux.setValues(0.3*Ux.data + 0.7*xSol)
    # Uy.setValues(0.3*Uy.data + 0.7*ySol)

    A = np.array(momX_M.diag)

    Hx = - momX_M.offdiagmul(Ux.data)           # offdiagnal to sÄ…siedzi
    Hy = - momY_M.offdiagmul(Uy.data)

    # tmpX = Ux.data
    # tmpY = Uy.data
Example #10
0
M = I - M

print ">>>> Equations generated in " , time.clock()-start
start = time.clock()

Results = list()
Tn = T.data.reshape((n, n))
Results.append(Tn)

from scipy.sparse.linalg.isolve.iterative import bicgstab

for iter in range(nt):
    print 'time iteration:',iter

    T.setValues( bicgstab(A=M.sparse, b=F+T.data*mesh.cells_areas/dt, x0=T.data,  tol=1e-8)[0] )

    Tn = T.data.reshape((n, n))
    Results.append(Tn)

print ">>>> Solved in ", time.clock()-start

# Animate results:
import matplotlib.pyplot as plt

# X, Y = np.meshgrid(np.linspace(0, 1, n), np.linspace(0, 1, n))
# fig = plt.figure()
# plt.axes().set_aspect('equal', 'datalim')
# ticks = np.linspace(0, 10, 11)
# cs = plt.contourf(X, Y, T.data.reshape((n,n)), )
# cbar = fig.colorbar(cs, ticks=ticks)
Example #11
0

Results = list()
Tn = T.data.reshape((n, n))
Results.append(Tn)


from scipy.sparse.linalg.isolve.iterative import bicgstab


for iter in range(int(nt)):
    print 'time iteration:',iter

    F = Fconst + T.data
    # T.data = np.array(np.linalg.solve(M, F))
    T.data = bicgstab(A=M.sparse, b=F, x0=T.data)[0]

    T.data = T.data.reshape((len(F), 1))

    Tn = T.data.reshape((n, n))
    Results.append(Tn)

# Animate results:
#animate_contour_plot(Results, skip=10, repeat=False, interval=75, dataRange=[0, 10])

gradT = cellGrad(T)     # liczymy gradienty obliczonych wartosci temp do wizualizacji

from interpolacja import inter
from matplotlib.pyplot import quiver
from matplotlib.pyplot import contourf
from numpy import meshgrid