linearize_discretize
LinearizeDiscretize
¶
Bases: Discretizer
Linearize-then-discretize via augmented ODE integration.
Computes continuous-time Jacobians (df/dx, df/du) via JAX forward-mode autodiff, then integrates them alongside the nonlinear dynamics through an augmented state vector using a multi-shooting approach to produce discrete-time matrices.
Supports ZOH (zero-order hold) and FOH (first-order hold) control interpolation between nodes.
This is the default discretization scheme in OpenSCvx.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
dis_type
|
Union[str, Sequence[str]]
|
Control hold type. |
'FOH'
|
ode_solver
|
str
|
Diffrax solver name. Any solver from
|
'Tsit5'
|
diffrax_kwargs
|
Optional[dict[str, Any]]
|
Preferred Diffrax keyword overrides. These map to
:func: |
None
|
Source code in openscvx/discretization/linearize_discretize.py
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | |
citation() -> List[str]
¶
Return BibTeX citations for the linearize-then-discretize discretization method.
Returns:
| Type | Description |
|---|---|
List[str]
|
List containing the BibTeX entries |
Source code in openscvx/discretization/linearize_discretize.py
get_solver(dynamics: Dynamics, settings: Config) -> callable
¶
Create a multi-shoot discretization solver.
Computes Jacobians of dynamics.f via jax.jacfwd, vmaps all
functions for batch evaluation across nodes, and returns a callable
that integrates the augmented variational equations.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
dynamics
|
Dynamics
|
System dynamics. Only |
required |
settings
|
Config
|
Problem configuration. |
required |
Returns:
| Type | Description |
|---|---|
callable
|
Callable |
Source code in openscvx/discretization/linearize_discretize.py
calculate_impulsive_discretization(x_nodes: np.ndarray, u_nodes: np.ndarray, state_dot_discrete: callable, A_discrete: callable, B_discrete: callable, params: dict) -> tuple[jnp.ndarray, jnp.ndarray, jnp.ndarray, jnp.ndarray]
¶
Evaluate discrete/impulsive dynamics and Jacobians at all nodes.
Source code in openscvx/discretization/linearize_discretize.py
get_impulsive_discretization_solver(dyn_discrete: Dynamics) -> callable
¶
Create a solver for discrete/impulsive dynamics linearization.