def quaddobl_real_sweep(pols, sols, par='s', start=0.0, target=1.0): r""" A real sweep homotopy is a family of n equations in n+1 variables, where one of the variables is the artificial parameter s which moves from 0.0 to 1.0. The last equation can then be of the form (1 - s)*(lambda - L[0]) + s*(lambda - L[1]) = 0 so that, at s = 0, the natural parameter lambda has the value L[0], and at s = 1, the natural parameter lambda has the value L[1]. Thus: as s moves from 0 to 1, lambda goes from L[0] to L[1]. All solutions in the list *sols* must have then the value L[0] for the variable lambda. The sweep stops when the target value for s is reached or when a singular solution is encountered. Computations happen in quad double precision. """ from phcpy.interface import store_quaddobl_solutions as storesols from phcpy.interface import store_quaddobl_system as storesys nvar = len(pols) + 1 storesys(pols, nbvar=nvar) storesols(nvar, sols) # print 'done storing system and solutions ...' from phcpy.interface import load_quaddobl_solutions as loadsols from phcpy.phcpy2c2 \ import py2c_sweep_define_parameters_symbolically as define from phcpy.phcpy2c2 \ import py2c_sweep_set_quaddobl_start as set_start from phcpy.phcpy2c2 \ import py2c_sweep_set_quaddobl_target as set_target (nbq, nbp) = (len(pols), 1) pars = [par] parnames = ' '.join(pars) nbc = len(parnames) # print 'defining the parameters ...' define(nbq, nvar, nbp, nbc, parnames) set_start(nbp, str([start, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])) set_target(nbp, str([target, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])) from phcpy.phcpy2c2 import py2c_sweep_quaddobl_real_run as run run() result = loadsols() return result
def quaddobl_real_sweep(pols, sols, par='s', start=0.0, target=1.0): r""" A real sweep homotopy is a family of n equations in n+1 variables, where one of the variables is the artificial parameter s which moves from 0.0 to 1.0. The last equation can then be of the form (1 - s)*(lambda - L[0]) + s*(lambda - L[1]) = 0 so that, at s = 0, the natural parameter lambda has the value L[0], and at s = 1, the natural parameter lambda has the value L[1]. Thus: as s moves from 0 to 1, lambda goes from L[0] to L[1]. All solutions in the list *sols* must have then the value L[0] for the variable lambda. The sweep stops when the target value for s is reached or when a singular solution is encountered. Computations happen in quad double precision. """ from phcpy.interface import store_quaddobl_solutions as storesols from phcpy.interface import store_quaddobl_system as storesys nvar = len(pols) + 1 storesys(pols, nbvar=nvar) storesols(nvar, sols) print 'done storing system and solutions ...' from phcpy.interface import load_quaddobl_solutions as loadsols from phcpy.phcpy2c2 \ import py2c_sweep_define_parameters_symbolically as define from phcpy.phcpy2c2 \ import py2c_sweep_set_quaddobl_start as set_start from phcpy.phcpy2c2 \ import py2c_sweep_set_quaddobl_target as set_target (nbq, nbp) = (len(pols), 1) pars = [par] parnames = ' '.join(pars) nbc = len(parnames) print 'defining the parameters ...' define(nbq, nvar, nbp, nbc, parnames) set_start(nbp, str([start, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])) set_target(nbp, str([target, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])) from phcpy.phcpy2c2 import py2c_sweep_quaddobl_real_run as run run() result = loadsols() return result
def quaddobl_complex_sweep(pols, sols, nvar, pars, start, target): r""" For the polynomials in the list of strings *pols* and the solutions in *sols* for the values in the list *start*, a sweep through the parameter space will be performed in quad double precision to the target values of the parameters in the list *target*. The number of variables in the polynomials and the solutions must be the same and be equal to the value of *nvar*. The list of symbols in *pars* contains the names of the variables in the polynomials *pols* that serve as parameters. The size of the lists *pars*, *start*, and *target* must be same. """ from phcpy.interface import store_quaddobl_solutions as storesols from phcpy.interface import store_quaddobl_system as storesys storesys(pols, nbvar=nvar) storesols(nvar, sols) from phcpy.interface import load_quaddobl_solutions as loadsols from phcpy.phcpy2c2 \ import py2c_sweep_define_parameters_symbolically as define from phcpy.phcpy2c2 \ import py2c_sweep_set_quaddobl_start as set_start from phcpy.phcpy2c2 \ import py2c_sweep_set_quaddobl_target as set_target from phcpy.phcpy2c2 import py2c_sweep_quaddobl_complex_run as run (nbq, nbp) = (len(pols), len(pars)) parnames = ' '.join(pars) nbc = len(parnames) define(nbq, nvar, nbp, nbc, parnames) print 'setting the start and the target ...' set_start(nbp, str(start)) set_target(nbp, str(target)) print 'calling run in quad double precision ...' run(0, 0.0, 0.0) result = loadsols() return result