141 lines
3.0 KiB
Python
141 lines
3.0 KiB
Python
import pybertini as pb
|
|
|
|
from pybertini import Variable, VariableGroup, System
|
|
import pybertini.system.start_system as ss
|
|
|
|
from pybertini.function_tree.symbol import Rational
|
|
|
|
from pybertini.endgame import *
|
|
from pybertini.endgame.config import *
|
|
|
|
from pybertini.tracking import *
|
|
from pybertini.tracking.config import *
|
|
|
|
from pybertini.multiprec import Float as mpfr_float
|
|
from pybertini.multiprec import Complex as mpfr_complex
|
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
ambient_precision = 50;
|
|
|
|
|
|
|
|
x = Variable("x");
|
|
y = Variable("y");
|
|
t = Variable("t");
|
|
#
|
|
sys = System();
|
|
#
|
|
var_grp = VariableGroup();
|
|
var_grp.append(x);
|
|
var_grp.append(y);
|
|
|
|
sys.add_variable_group(var_grp);
|
|
|
|
sys.add_function((x-1)**3)
|
|
sys.add_function((y-1)**2)
|
|
|
|
sys.homogenize();
|
|
sys.auto_patch();
|
|
|
|
assert (sys.is_patched() == 1)
|
|
assert (sys.is_homogeneous() == 1)
|
|
|
|
td = ss.TotalDegree(sys);
|
|
|
|
assert (td.is_patched() == 1)
|
|
assert (td.is_homogeneous() == 1)
|
|
|
|
gamma = Rational.rand();
|
|
|
|
|
|
final_system = (1-t)*sys + gamma*t*td;
|
|
final_system.add_path_variable(t);
|
|
|
|
print(final_system)
|
|
prec_config = AMPConfig(final_system);
|
|
|
|
stepping_pref = SteppingConfig();
|
|
newton_pref = NewtonConfig();
|
|
|
|
|
|
|
|
tracker = AMPTracker(final_system);
|
|
|
|
tracker.setup(Predictor.RK4, 1e-5, 1e5, stepping_pref, newton_pref);
|
|
tracker.precision_setup(prec_config);
|
|
|
|
num_paths_to_track = td.num_start_points();
|
|
n = int(str(num_paths_to_track));
|
|
|
|
t_start = mpfr_complex(1);
|
|
t_endgame_boundary = mpfr_complex("0.1");
|
|
t_final = mpfr_complex(0);
|
|
|
|
|
|
print('tracking to the endgame boundary')
|
|
|
|
|
|
bdry_points = [np.empty(dtype=mpfr_complex, shape=(3,)) for i in range(n)]
|
|
|
|
for i in range(n):
|
|
|
|
pb.default_precision(ambient_precision);
|
|
final_system.precision(ambient_precision);
|
|
|
|
print('here')
|
|
|
|
td.precision(ambient_precision)
|
|
start_point = td.start_point_mp(i);
|
|
|
|
print('there')
|
|
print(pb.multiprec.precision(start_point))
|
|
|
|
|
|
bdry_pt = np.zeros(dtype=mpfr_complex, shape=(3));
|
|
track_success_code = tracker.track_path(bdry_pt,t_start, t_endgame_boundary, start_point);
|
|
print(bdry_pt.flags)
|
|
bdry_points[i] = bdry_pt;
|
|
|
|
assert (track_success_code == SuccessCode.Success)
|
|
|
|
|
|
|
|
tracker.setup(Predictor.HeunEuler, 1e-6, 1e5, stepping_pref, newton_pref);
|
|
my_endgame = AMPCauchyEG(tracker);
|
|
|
|
|
|
print('running the endgame')
|
|
|
|
final_homogenized_solutions = [np.empty(dtype=mpfr_complex, shape=(3,)) for i in range(n)]
|
|
for i in range(n):
|
|
p = bdry_points[i]
|
|
|
|
print("RIGHT HERE V")
|
|
|
|
print(p[0].precision())
|
|
|
|
|
|
print('moving to precision {} to match precision of boundary point'.format(pb.multiprec.precision(p)))
|
|
|
|
|
|
pb.default_precision(p[0].precision());
|
|
final_system.precision(p[0].precision());
|
|
|
|
print(p.flags)
|
|
|
|
t = mpfr_complex(0)
|
|
t = t_endgame_boundary
|
|
t.precision(p[0].precision())
|
|
|
|
q = np.zeros(dtype=mpfr_complex, shape=(3));
|
|
print(p.flags)
|
|
track_success_code = my_endgame.run(t,p);
|
|
print(track_success_code)
|
|
|
|
|
|
final_homogenized_solutions[i] = my_endgame.final_approximation();
|
|
print(final_system.dehomogenize_point(final_homogenized_solutions[i]));
|
|
assert (track_success_code == SuccessCode.Success) |