C = np.eye(n_st) fy = mtimes(C, xk2) + vk2 h = Function('h', [xk2, vk2], [fy]) Ch = Function('Ch', [vertcat(xk2, thetah2)], [jacobian(fy, vertcat(xk2, thetah2))]) Chx = Function('Chx', [xk2], [jacobian(fy, xk2)]) uk_opt = np.array([2.5 * 10**(-6) * discritize, 280]) xkp = np.array([V0, Ca0, Cb0, Cc0, T0, Tj0, Tj0_in]) theta_par = theta_nom xkh0 = xkp zkh0 = vertcat(xkh0, theta_par) Sigmak_p = Qz Jce, qu_ce, lbq, ubq, g, lbg, ubg, qu_init = Dual.ce_mpc( F_ode, n_pred, n_ctrl, n_st, n_par, n_ip, uk_lb, uk_ub, xk_lb, xk_ub, xk2, theta_par, uk2, Tsamp, xkh0, uk_opt) qp_mpc = {'x': vertcat(*qu_ce), 'f': Jce, 'g': vertcat(*g)} solver_mpc = nlpsol( 'solver_mpc', MySolver, qp_mpc, { 'ipopt': { 'max_iter': 1000, "check_derivatives_for_naninf": 'yes', "print_user_options": 'yes' } }) res_mpc = solver_mpc(x0=qu_init, lbx=lbq, ubx=ubq, lbg=lbg, ubg=ubg) res = res_mpc['x'].full().flatten() xce1 = res[0::n_st + n_ip] xce2 = res[1::n_st + n_ip]
xt = xt['xf'] x_t[i9,:] = xt.T #plt.plot(range(len(xce1)),xce1) #plt.plot(range(len(xce1)),xce2) plt.plot(range(run_time), x_t[:,0], ':') plt.plot(range(run_time), x_t[:,1], ':') #plt.plot(range(len(xce1)),xe[0]*np.ones((len(xce1),1))) #plt.plot(range(len(xce1)),xe[1]*np.ones((len(xce1),1))) plt.show() import pdb; pdb.set_trace() uk_opt = .55 Jce,qu_ce,lbq,ubq,g,lbg,ubg,qu_init=Dual.ce_mpc(M_ode,run_time,n_ctrl, n_st,n_par,n_ip,uk_lb,uk_ub,xk_lb, xk_ub,xk4,uk4,Tsamp,x0,uk_opt) qp_mpc = {'x':vertcat(*qu_ce), 'f':Jce, 'g':vertcat(*g)} solver_mpc = nlpsol('solver_mpc', MySolver, qp_mpc,{'ipopt': {'max_iter':1000,"check_derivatives_for_naninf": 'yes', "print_user_options":'yes' }}) res_mpc = solver_mpc(x0=qu_init, lbx=lbq, ubx=ubq, lbg=lbg, ubg=ubg) res = res_mpc['x'].full().flatten() xres = res[0:(run_time+1)*2] xce1 = xres[0::n_st] xce2 = xres[1::n_st] uce1 = res[(run_time+1)*2:] xt = x0 x_t = np.zeros((run_time,n_st))