types.contraction.ContractionAnalysisResult
types.contraction.ContractionAnalysisResult()Contraction analysis result.
Determines if system is contracting and computes contraction rate.
Fields
is_contracting : bool True if system is contracting contraction_rate : ContractionRate Exponential rate β metric : ContractionMetric Contraction metric M(x) metric_type : str Metric type (‘constant’, ‘state_dependent’, ‘control_dependent’) verification_method : str Method used (‘LMI’, ‘SOS’, ‘optimization’, ‘analytic’) convergence_bound : Optional[Callable] Upper bound ||δx(t)|| ≤ bound(t, ||δx(0)||) exponential_convergence : bool True if exponential (vs polynomial) incremental_stability : bool True if incrementally asymptotically stable condition_number : Optional[float] Condition number κ(M) if constant metric
Examples
>>> # Analyze system contraction
>>> result: ContractionAnalysisResult = analyze_contraction(
... dynamics=lambda x: -A @ x,
... method='LMI'
... )
>>>
>>> if result['is_contracting']:
... beta = result['contraction_rate']
... M = result['metric']
...
... print(f"System is contracting!")
... print(f"Rate β = {beta:.3f}")
... print(f"Method: {result['verification_method']}")
...
... # Convergence bound
... if 'convergence_bound' in result:
... bound = result['convergence_bound']
... t = np.linspace(0, 10, 100)
... delta_bound = [bound(ti, 1.0) for ti in t]
...
... import matplotlib.pyplot as plt
... plt.plot(t, delta_bound)
... plt.xlabel('Time')
... plt.ylabel('||δx|| bound')
... else:
... print("System is not contracting")