API Reference

class control_systems.mimoTool.app.MIMOApp(level: int = 20)[source]

Coordinates analysis, plotting, and I/O for MIMO examples.

render(cfg: RunConfig, result: RunResult) None[source]
run(cfg: RunConfig) RunResult[source]
class control_systems.mimoTool.apis.PlantSummary(name: 'PlantName', poles: 'list')[source]
name: Literal['two_tank', 'two_zone_thermal']
poles: list
class control_systems.mimoTool.apis.RunConfig(plants: 'List[PlantName]', tfinal: 'float' = 200.0, dt: 'float' = 0.25, wmin: 'float' = 0.001, wmax: 'float' = 31.622776601683793, npts: 'int' = 400, plot_steps: 'bool' = True, plot_sigma: 'bool' = True, show: 'bool' = True, save_png: 'Optional[str]' = None, save_json: 'Optional[str]' = None, title_prefix: 'str' = 'Step')[source]
dt: float = 0.25
npts: int = 400
plants: List[Literal['two_tank', 'two_zone_thermal']]
plot_sigma: bool = True
plot_steps: bool = True
save_json: str | None = None
save_png: str | None = None
show: bool = True
tfinal: float = 200.0
title_prefix: str = 'Step'
wgrid() ndarray[source]
wmax: float = 31.622776601683793
wmin: float = 0.001
class control_systems.mimoTool.apis.RunResult(summaries: 'List[PlantSummary]')[source]
summaries: List[PlantSummary]
to_jsonable() Dict[str, Any][source]
class control_systems.mimoTool.core.MIMOAnalyzer[source]

Numerical analyses for MIMO LTI systems.

static poles(sys: StateSpace) ndarray[source]
static sigma_over_frequency(sys: StateSpace, w: ndarray) SigmaOut[source]
static step_for_each_input(sys: StateSpace, tfinal: float, dt: float) Tuple[StepOut, ...][source]
class control_systems.mimoTool.core.MIMOPlantBuilder[source]

Factory for small educational MIMO plants.

static two_tank() StateSpace[source]
static two_zone_thermal() StateSpace[source]
class control_systems.mimoTool.core.SigmaOut(w: 'np.ndarray', sv: 'np.ndarray')[source]
sv: ndarray
w: ndarray
class control_systems.mimoTool.core.StepOut(T: 'np.ndarray', Y: 'np.ndarray')[source]
T: ndarray
Y: ndarray
class control_systems.mimoTool.design.MIMOPlotter[source]

Plotting helpers (Matplotlib).

static sigma(sout: SigmaOut, cfg: PlotConfig) None[source]
static steps_per_input(steps: Iterable[StepOut], cfg: PlotConfig) None[source]
class control_systems.mimoTool.design.PlotConfig(title_prefix: 'str' = 'Step', sigma_title: 'str' = '$\\sigma(G(j\\omega))$', show: 'bool' = True)[source]
show: bool = True
sigma_title: str = '$\\sigma(G(j\\omega))$'
title_prefix: str = 'Step'
control_systems.mimoTool.io.write_json(obj: Any, path: str | None, default_dir: str, default_name: str) str | None[source]
control_systems.mimoTool.utils.coerce_outputs_m_by_N(Y, N_time: int)[source]
Make output array shape (m, N_time) robust across python-control versions:

(N,) -> (1,N) (m,N) ok (N,m) -> (m,N) (m,1,N) or (1,m,N) -> (m,N)

control_systems.mimoTool.utils.ensure_dir(path: str) str[source]

Ensure directory exists and return it.

control_systems.mimoTool.utils.ensure_out_path(path: str | None, default_dir: str, default_name: str) str[source]
Return a writable file path.
  • None -> default_dir/default_name

  • Dir -> dir/default_name

  • File -> ensure parent and return as-is

control_systems.mimoTool.utils.get_poles(sys)[source]

Return poles, compatible across python-control versions.