1+ % ---------------------------------------------------------------------------------------------------
2+ % For Paper
3+ % "Robust Performance Analysis of Source-Seeking Dynamics with Integral Quadratic Constraints"
4+ % by Adwait Datar and Herbert Werner
5+ % Copyright (c) Institute of Control Systems, Hamburg University of Technology. All rights reserved.
6+ % Licensed under the GPLv3. See LICENSE in the project root for license information.
7+ % Author(s): Adwait Datar
8+ % ---------------------------------------------------------------------------------------------------
9+
110function [alpha_best ,P_ret ]=bisection_exponent(G_veh ,m ,L ,alpha_lims ,tolerences ,multiplier_class )
211% This function runs a bisection algorithm for obtaining the best
312% exponent alpha by calling the analysis routine for a fixed alpha
413% multiple times.
5-
14+ % G_veh -> Plant model (typically of a vehicle)
15+ % m -> strong convexity parameter (lower bound)
16+ % L -> Lipschitz constant for gradients (upper bound)
17+ % alpha_lims -> Initial search space for bisection
18+ % tolerences -> tolerences for the optimization: bisection, LMI_tol, condition no tol
19+ % multiplier_class -> IQC multipliers such as Circle Criterion, Zames Falb, etc.
20+
621 % Get tolernces
722 cond_tol= tolerences .cond_tol ;
823 cvx_tol= tolerences .cvx_tol ;
1631 [status ,P_ret ]=verify_exp_stab_FBCC(G_veh ,alpha_lims(1 ),m ,L ,cond_tol ,cvx_tol );
1732 case 3 % Zames Falb Multipliers with CC
1833 [status ,P_ret ]=verify_exp_stab_ZF(G_veh ,alpha_lims(1 ),m ,L ,cond_tol ,cvx_tol );
19- case 6
34+ case 6 % Zames Falb Multipliers with a basis for LTI systems
2035 rho= multiplier_class .rho ;
2136 psi_order= multiplier_class .psi_order ;
2237 odd_flag= multiplier_class .odd_flag ;
2338 causal_flag= multiplier_class .causal_flag ; % 1: causal, -1:anti-causal, 0:non-causal
2439 [status ,P_ret ]=verify_exp_stab_ZF_basis(G_veh ,alpha_lims(1 ),m ,L ,odd_flag ,causal_flag ,rho ,psi_order ,cond_tol ,cvx_tol );
25- case 7
40+ case 7 % Zames Falb Multipliers with a basis for LPV systems
2641 rho= multiplier_class .rho ;
2742 psi_order= multiplier_class .psi_order ;
2843 odd_flag= multiplier_class .odd_flag ;
2944 causal_flag= multiplier_class .causal_flag ; % 1: causal, -1:anti-causal, 0:non-causal
3045 [status ,P_ret ]=verify_exp_stab_ZF_basis_LPV_example(G_veh ,alpha_lims(1 ),m ,L ,odd_flag ,causal_flag ,rho ,psi_order ,cond_tol ,cvx_tol );
3146 end
32-
33- if ~status
47+
48+ if ~status % return -1 and stop if Infeasible for alpha_low
3449 % error('Infeasible for alpha_low. Choose a smaller alpha_low')
3550 alpha_best= -1 ;
3651 return
4459 [status ,P ]=verify_exp_stab_FBCC(G_veh ,alpha_lims(2 ),m ,L ,cond_tol ,cvx_tol );
4560 case 3 % Zames Falb Multipliers with CC
4661 [status ,P ]=verify_exp_stab_ZF(G_veh ,alpha_lims(2 ),m ,L ,cond_tol ,cvx_tol );
47- case 6
62+ case 6 % Zames Falb Multipliers with a basis for LTI systems
4863 [status ,P ]=verify_exp_stab_ZF_basis(G_veh ,alpha_lims(2 ),m ,L ,odd_flag ,causal_flag ,rho ,psi_order ,cond_tol ,cvx_tol );
49- case 7
64+ case 7 % Zames Falb Multipliers with a basis for LPV systems
5065 [status ,P ]=verify_exp_stab_ZF_basis_LPV_example(G_veh ,alpha_lims(2 ),m ,L ,odd_flag ,causal_flag ,rho ,psi_order ,cond_tol ,cvx_tol );
51- end
52- if status
66+ end
67+ if status
5368 alpha_best= alpha_lims(2 ); % Return alpha_high if feasible
5469 P_ret= P ;
55- else
56-
57- % Start the bisection
58- while alpha_lims( 2 )- alpha_lims( 1 )> bisect_tol
59- alpha_mid = mean( alpha_lims );
60- switch multiplier_class . id
61- case 1 % Circle Criterion
62- [ status , P ]=verify_exp_stab_CC( G_veh , alpha_mid , m , L , cond_tol , cvx_tol );
63- case 2 % Full block circle criterion
64- [ status , P ]=verify_exp_stab_FBCC( G_veh , alpha_mid , m , L , cond_tol , cvx_tol );
65- case 3 % Zames Falb Multipliers
66- [ status , P ]=verify_exp_stab_ZF( G_veh , alpha_mid , m , L , cond_tol , cvx_tol );
67- case 6
68- [ status , P ]=verify_exp_stab_ZF_basis( G_veh , alpha_mid , m , L , odd_flag , causal_flag , rho , psi_order , cond_tol , cvx_tol );
69- case 7
70- [ status , P ]=verify_exp_stab_ZF_basis_LPV_example( G_veh , alpha_mid , m , L , odd_flag , causal_flag , rho , psi_order , cond_tol , cvx_tol );
71- end
72- if status
73- alpha_lims( 1 )= alpha_mid ;
74- P_ret = P ;
75- else
76- alpha_lims( 2 )= alpha_mid ;
70+ else
71+ % Start the bisection and repeat until the limits are within bisect_tol
72+ while alpha_lims( 2 )-alpha_lims( 1 )> bisect_tol
73+ alpha_mid = mean( alpha_lims ); % bisect the current limits
74+ switch multiplier_class . id
75+ case 1 % Circle Criterion
76+ [ status , P ]=verify_exp_stab_CC( G_veh , alpha_mid , m , L , cond_tol , cvx_tol );
77+ case 2 % Full block circle criterion
78+ [ status , P ]=verify_exp_stab_FBCC( G_veh , alpha_mid , m , L , cond_tol , cvx_tol );
79+ case 3 % Zames Falb Multipliers
80+ [ status , P ]=verify_exp_stab_ZF( G_veh , alpha_mid , m , L , cond_tol , cvx_tol );
81+ case 6 % Zames Falb Multipliers with a basis for LTI systems
82+ [ status , P ]=verify_exp_stab_ZF_basis( G_veh , alpha_mid , m , L , odd_flag , causal_flag , rho , psi_order , cond_tol , cvx_tol );
83+ case 7 % Zames Falb Multipliers with a basis for LPV systems
84+ [ status , P ]=verify_exp_stab_ZF_basis_LPV_example( G_veh , alpha_mid , m , L , odd_flag , causal_flag , rho , psi_order , cond_tol , cvx_tol );
85+ end
86+ if status % Choose the upper half as the new limits if feasible
87+ alpha_lims( 1 )= alpha_mid ;
88+ P_ret = P ;
89+ else % Choose the lower half as the new limits if infeasible
90+ alpha_lims( 2 )= alpha_mid ;
91+ end
7792 end
78- end
79- alpha_best= alpha_lims(1 );
93+ alpha_best= alpha_lims(1 );
8094 end
8195end
0 commit comments