SS.ControlSystems 1.2.0
Legacy response/PID fundamentals plus proper transfer functions, controllable companion conversion and SISO inverse conversion, scaled controllability/observability rank, closed-loop PID step simulation, continuous/discrete state-space analysis and controller design
Language compatibility: >=1.0.0 <2.0.0
Runtime compatibility: >=1.0.0 <2.0.0
Dependencies: SS.LinearAlgebra ^1.7.0
Public API
ControlSystems.analyze
export function analyze(StateSpace system, double tolerance, int maximumIterations)->LtiAnalysisParameters: system: StateSpace, tolerance: double, maximumIterations: int
export function closedLoopFirstOrder(double forwardGain, double timeConstant, double feedback, double time)->doubleParameters: forwardGain: double, timeConstant: double, feedback: double, time: double
export function controllabilityRank(StateSpace system, double tolerance)->intParameters: system: StateSpace, tolerance: double
export function controllerStepResponse(StateSpace plant, double setpoint, double kp, double ki, double kd, double timeStep, int samples, double minimumControl, double maximumControl)->ControllerStepResultParameters: plant: StateSpace, setpoint: double, kp: double, ki: double, kd: double, timeStep: double, samples: int, minimumControl: double, maximumControl: double
export record ControllerStepResult(public double[] times, public double[] outputs, public double[] controls, public double[] errors, public double[] finalState, public bool saturated, public bool stable, public string diagnostic)Parameters: times: double[], outputs: double[], controls: double[], errors: double[], finalState: double[], saturated: bool, stable: bool, diagnostic: string
ControlSystems.dcGain
export function dcGain(double numerator, double denominator)->doubleParameters: numerator: double, denominator: double
export function diagonalFrequencyResponse(StateSpace system, double[] angularFrequencies)->MimoFrequencySweepParameters: system: StateSpace, angularFrequencies: double[]
export record DiscreteStateSpace(public double[] a, public double[] b, public double[] c, public double[] d, public int states, public int inputs, public int outputs, public double samplePeriod, public string provenance)Parameters: a: double[], b: double[], c: double[], d: double[], states: int, inputs: int, outputs: int, samplePeriod: double, provenance: string
export function firstOrderFrequency(double gain, double timeConstant, double angularFrequency)->FrequencyPointParameters: gain: double, timeConstant: double, angularFrequency: double
ControlSystems.firstOrderStep
export function firstOrderStep(double gain, double timeConstant, double time)->doubleParameters: gain: double, timeConstant: double, time: double
export record FrequencyPoint(public double real, public double imaginary, public double magnitude, public double phase)Parameters: real: double, imaginary: double, magnitude: double, phase: double
ControlSystems.frequencyResponse
export function frequencyResponse(StateSpace system, double[] angularFrequencies)->MimoFrequencySweepParameters: system: StateSpace, angularFrequencies: double[]
export function isStableSecondOrder(double a2, double a1, double a0)->boolParameters: a2: double, a1: double, a0: double
ControlSystems.lqr
export function lqr(StateSpace system, double[] q, double[] r, double tolerance, int maximumIterations)->LqrDesignParameters: system: StateSpace, q: double[], r: double[], tolerance: double, maximumIterations: int
ControlSystems.LqrDesign
export record LqrDesign(public double[] gain, public double[] riccati, public double[] poleReal, public double[] poleImaginary, public int iterations, public double residual, public bool converged, public string diagnostic)Parameters: gain: double[], riccati: double[], poleReal: double[], poleImaginary: double[], iterations: int, residual: double, converged: bool, diagnostic: string
export record LtiAnalysis(public double[] poleReal, public double[] poleImaginary, public int controllabilityRank, public int observabilityRank, public bool stable, public double eigenResidual, public string diagnostic)Parameters: poleReal: double[], poleImaginary: double[], controllabilityRank: int, observabilityRank: int, stable: bool, eigenResidual: double, diagnostic: string
export record MimoFrequencyPoint(public double angularFrequency, public double[] real, public double[] imaginary, public double[] magnitude, public double[] phase, public double residual)Parameters: angularFrequency: double, real: double[], imaginary: double[], magnitude: double[], phase: double[], residual: double
export record MimoFrequencySweep(public MimoFrequencyPoint[] points, public int inputs, public int outputs, public bool solved, public string diagnostic)Parameters: points: MimoFrequencyPoint[], inputs: int, outputs: int, solved: bool, diagnostic: string
ControlSystems.negativeFeedback
export function negativeFeedback(StateSpace plant, StateSpace controller, string provenance)->StateSpaceParameters: plant: StateSpace, controller: StateSpace, provenance: string
ControlSystems.observabilityRank
export function observabilityRank(StateSpace system, double tolerance)->intParameters: system: StateSpace, tolerance: double
export function parallelInterconnection(StateSpace left, StateSpace right, string provenance)->StateSpaceParameters: left: StateSpace, right: StateSpace, provenance: string
ControlSystems.pid
export function pid(double error, double accumulatedError, double errorRate, double kp, double ki, double kd, double minimum, double maximum)->PidTermsParameters: error: double, accumulatedError: double, errorRate: double, kp: double, ki: double, kd: double, minimum: double, maximum: double
ControlSystems.PidTerms
export record PidTerms(public double proportional, public double integral, public double derivative, public double output)Parameters: proportional: double, integral: double, derivative: double, output: double
ControlSystems.placePoles
export function placePoles(StateSpace system, double[] desiredRealPoles, double tolerance, int maximumIterations)->PolePlacementParameters: system: StateSpace, desiredRealPoles: double[], tolerance: double, maximumIterations: int
export record PolePlacement(public double[] gain, public double[] poleReal, public double[] poleImaginary, public double residual, public bool placed, public string diagnostic)Parameters: gain: double[], poleReal: double[], poleImaginary: double[], residual: double, placed: bool, diagnostic: string
export function secondOrderProperties(double naturalFrequency, double dampingRatio)->SecondOrderPropertiesParameters: naturalFrequency: double, dampingRatio: double
export record SecondOrderProperties(public double naturalFrequency, public double dampingRatio, public double dampedFrequency, public double percentOvershoot, public double settlingTime)Parameters: naturalFrequency: double, dampingRatio: double, dampedFrequency: double, percentOvershoot: double, settlingTime: double
ControlSystems.secondOrderStep
export function secondOrderStep(double naturalFrequency, double dampingRatio, double time)->doubleParameters: naturalFrequency: double, dampingRatio: double, time: double
ControlSystems.series
export function series(StateSpace first, StateSpace second, string provenance)->StateSpaceParameters: first: StateSpace, second: StateSpace, provenance: string
export function simulateDiagonalConstantInput(DiscreteStateSpace system, double[] input, int samples, double[] initialState)->StateTrajectoryParameters: system: DiscreteStateSpace, input: double[], samples: int, initialState: double[]
export function simulateDiagonalDiscrete(DiscreteStateSpace system, double[] inputs, double[] initialState)->StateTrajectoryParameters: system: DiscreteStateSpace, inputs: double[], initialState: double[]
ControlSystems.simulateDiscrete
export function simulateDiscrete(DiscreteStateSpace system, double[] inputs, double[] initialState)->StateTrajectoryParameters: system: DiscreteStateSpace, inputs: double[], initialState: double[]
ControlSystems.simulateState2
export function simulateState2(double a11, double a12, double a21, double a22, double b1, double b2, double input, double initial1, double initial2, double timeStep, int steps)->State2Parameters: a11: double, a12: double, a21: double, a22: double, b1: double, b2: double, input: double, initial1: double, initial2: double, timeStep: double, steps: int
export function stableDiagonalSystem(int states, int inputs, int outputs)->StateSpaceParameters: states: int, inputs: int, outputs: int
ControlSystems.State2
export record State2(public double first, public double second, public int steps)Parameters: first: double, second: double, steps: int
ControlSystems.stateSpace
export function stateSpace(double[] a, double[] b, double[] c, double[] d, int states, int inputs, int outputs, string provenance)->StateSpaceParameters: a: double[], b: double[], c: double[], d: double[], states: int, inputs: int, outputs: int, provenance: string
export record StateSpace(public double[] a, public double[] b, public double[] c, public double[] d, public int states, public int inputs, public int outputs, public string provenance)Parameters: a: double[], b: double[], c: double[], d: double[], states: int, inputs: int, outputs: int, provenance: string
export function stateSpaceToTransfer(StateSpace system, string provenance)->TransferFunctionParameters: system: StateSpace, provenance: string
export record StateTrajectory(public double[] times, public double[] states, public double[] outputs, public int stateCount, public int outputCount, public int samples, public bool finite, public string diagnostic)Parameters: times: double[], states: double[], outputs: double[], stateCount: int, outputCount: int, samples: int, finite: bool, diagnostic: string
ControlSystems.transferFunction
export function transferFunction(double[] numerator, double[] denominator, string provenance)->TransferFunctionParameters: numerator: double[], denominator: double[], provenance: string
export record TransferFunction(public double[] numerator, public double[] denominator, public string provenance)Parameters: numerator: double[], denominator: double[], provenance: string
export function transferToStateSpace(TransferFunction transfer, string provenance)->StateSpaceParameters: transfer: TransferFunction, provenance: string
ControlSystems.tustin
export function tustin(StateSpace system, double samplePeriod)->DiscreteStateSpaceParameters: system: StateSpace, samplePeriod: double
Documentation version
Language 1.0.0, compiler 1.0.0, runtime 1.0.0. This reference is generated from the official SS documentation so package and language details stay consistent with the release.