import numpy as np from time import time import sys sys.path.append('../') from density_sdsos import compute_reach_picos, compute_reach_mosek from plot_2d import * # Initialize symbolic variables t, x1, x2, d = sp.symbols('t,x1,x2,d') tmax = 1 data = {'t_var': [t], 'x_vars': [x1, x2], 'd_vars': [], 'maxdeg_rho' : 8, 'rho_0': 0.5 - x1**2 - x2**2, 'vector_field': [t*x2, -x1], 'domain': [2-x1**2, 2-x2**2,t*(tmax-t)], 'tol': 1e-5, 'r': 0} # (rho, error) = compute_reach_picos(data, solver = 'mosek') (rho, error) = compute_reach_mosek(data) print "Density found: rho(t,x1,x2) = ", rho print "Error:", error animate([t,x1,x2], [t*x2, -x1], rho, error, 1.1*tmax)
} plt.figure() max_deg = 16 min_deg = 6 step = 2 for (i, maxdeg) in enumerate(range(min_deg,max_deg,step)): print "Solving for degree ", maxdeg data['maxdeg_rho'] = maxdeg t0 = time() (sol, error) = compute_reach_mosek(data) t1 = time() print "Solved in ", t1-t0, ", error is ", error sol_fcn = lambdify([t,x1], sol) sol_fcn_lower = lambdify([t,x1], sol-t*error) sol_fcn_upper = lambdify([t,x1], sol+t*error) T, X = np.mgrid[-0:1:1000j, -1.2:1.2:1000j] plt.contour(X, T, sol_fcn_upper(T,X), levels=[0.], colors=[plt.get_cmap('autumn', (max_deg-min_deg)/step)(i)] ) plt.contour(X, T, sol_fcn_lower(T,X), levels=[0.], colors=[plt.get_cmap('autumn', (max_deg-min_deg)/step)(i)] ) # plot DE solution vf = lambdify([t,x1], data['vector_field'])