StateTransformationLinearize[asys]
linearizes the AffineStateSpaceModel asys by state transformation.
StateTransformationLinearize[asys,{z,lform}]
specifies the new states z and form of linearization lform.
StateTransformationLinearize[asys,…,"prop"]
computes the property "prop".
StateTransformationLinearize
StateTransformationLinearize[asys]
linearizes the AffineStateSpaceModel asys by state transformation.
StateTransformationLinearize[asys,{z,lform}]
specifies the new states z and form of linearization lform.
StateTransformationLinearize[asys,…,"prop"]
computes the property "prop".
Details and Options
- StateTransformationLinearize attempts to transform an affine system to a linear one so that linear control techniques can be used on the linearized dynamics.
- Using a state transformation x->p[z], the original affine system with dynamics
and output
gets transformed to an input-output, input-state, or state-output linear system. - The following forms of exact linearization lform can be used:
-
Automatic automatically linearize "InputOutput"
, 
"InputState"
, 
"StateOutput"
, 
- The Automatic setting will attempt "InputOutput", "InputState", or "StateOutput".
- StateTransformationLinearize returns a LinearizingTransformationData object that can be used to extract detailed properties for further analysis and design.
- Properties related to the state transformation include:
-
"InverseStateTransformation" inverse state transformation "StateTransformation" state transformation "TransformedSystem" linearized or partially linearized transformed system tsys "Linearization" form of linearization "lform" - Properties related to controller and estimator design include:
-
{"OriginalSystemController",cs} controller for asys based on controller cs designed for tsys {"OriginalSystemEstimator",es} estimator for asys based on estimator es designed for tsys {"ClosedLoopSystem",cs} closed-loop system based on the linear controller cs
Examples
open all close allBasic Examples (1)
Linearize an affine system using state transformation:
ℒ = StateTransformationLinearize[AffineStateSpaceModel[
{{(-4*Subscript[x, 1]^2 + 6*Subscript[x, 1]*
Subscript[x, 2])/(Subscript[x, 1] + Subscript[x, 2]),
2*(3*Subscript[x, 1] - 2*Subscript[x, 2])*
(Subscript[x, 2]/(Subscript[x, 1] + Subscript[x, 2]))},
{{(1 - Subscript[x, 1])/(Subscript[x, 1] +
Subscript[x, 2])}, {(1 + Subscript[x, 2])/
(Subscript[x, 1] + Subscript[x, 2])}},
{Subscript[x, 1]*(-1 + Subscript[x, 2]) +
Subscript[x, 2]}, {{0}}}, {Subscript[x, 1],
Subscript[x, 2]}, {Subscript[, 1]}, {Automatic}, Automatic,
SamplingPeriod -> None]]The transformed system is completely linear:
ℒ["TransformedSystem"]Compute feedback gains for the system, using the linearized system:
κ = StateFeedbackGains[%, {-4 + 2 I, -4 - 2I}]ℒ[{"ClosedLoopSystem", κ}]//SimplifyThe closed-loop system is stable:
OutputResponse[{%, {2, 1}}, UnitStep[t], {t, 0, 10}];
Plot[%, {t, 0, 3}, PlotRange -> All]Scope (12)
Basic Uses (5)
ℒ = StateTransformationLinearize[AffineStateSpaceModel[{{Subscript[x, 2] - 2*Subscript[x, 2]*
Subscript[x, 3] + Subscript[x, 3]^2, Subscript[x, 3],
0}, {{4*Subscript[x, 2]*Subscript[x, 3]},
{-2*Subscript[x, 3]}, {1}}, {Subscript[x, 1]}, {{0}}},
{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]},
{Subscript[, 1]}, {Automatic}, Automatic, SamplingPeriod -> None]]The transformed system shows that the state-to-output dynamics have been linearized:
ℒ["TransformedSystem"]Explicitly obtain the type of linearization:
ℒ["Linearization"]Specify the new state variables to use:
ℒ = StateTransformationLinearize[AffineStateSpaceModel[{{Subscript[x, 2] - 2*Subscript[x, 2]*
Subscript[x, 3] + Subscript[x, 3]^2, Subscript[x, 3],
0}, {{4*Subscript[x, 2]*Subscript[x, 3]},
{-2*Subscript[x, 3]}, {1}}, {Subscript[x, 1]}, {{0}}},
{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]},
{Subscript[, 1]}, {Automatic}, Automatic, SamplingPeriod -> None], {Subscript[z, 1], Subscript[z, 2], Subscript[z, 3]}];ℒ["TransformedSystem"]Specify the type of linearization to use:
ℒ = StateTransformationLinearize[AffineStateSpaceModel[{{Subscript[x, 2] - 2*Subscript[x, 2]*
Subscript[x, 3] + Subscript[x, 3]^2, Subscript[x, 3],
0}, {{4*Subscript[x, 2]*Subscript[x, 3]},
{-2*Subscript[x, 3]}, {1}}, {Subscript[x, 1]}, {{0}}},
{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]},
{Subscript[, 1]}, {Automatic}, Automatic, SamplingPeriod -> None], {{Subscript[z, 1], Subscript[z, 2], Subscript[z, 3]}, "InputState"}];The input dynamics are linear, but the output is nonlinear:
ℒ["TransformedSystem"]ℒ["Linearization"]StateTransformationLinearize[AffineStateSpaceModel[{{Subscript[x, 2] - 2*Subscript[x, 2]*
Subscript[x, 3] + Subscript[x, 3]^2, Subscript[x, 3],
0}, {{4*Subscript[x, 2]*Subscript[x, 3]},
{-2*Subscript[x, 3]}, {1}}, {Subscript[x, 1]}, {{0}}},
{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]},
{Subscript[, 1]}, {Automatic}, Automatic, SamplingPeriod -> None], {{Subscript[z, 1], Subscript[z, 2], Subscript[z, 3]}, "InputState"}, "TransformedSystem"]Multiple properties can be specified:
asys = AffineStateSpaceModel[{{Subscript[x, 2] - 2*Subscript[x, 2]*
Subscript[x, 3] + Subscript[x, 3]^2, Subscript[x, 3],
0}, {{4*Subscript[x, 2]*Subscript[x, 3]},
{-2*Subscript[x, 3]}, {1}}, {Subscript[x, 1]}, {{0}}},
{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]},
{Subscript[, 1]}, {Automatic}, Automatic, SamplingPeriod -> None];ℒ = StateTransformationLinearize[asys, {{Subscript[z, 1], Subscript[z, 2], Subscript[z, 3]}, "InputState"}];ℒ[{"StateTransformation", "InverseStateTransformation"}]Input-Output Linearize (3)
Get transformation-related properties:
ℒ = StateTransformationLinearize[AffineStateSpaceModel[{{5*Subscript[x, 1] + Subscript[x, 2] +
Subscript[x, 2]^2, Subscript[x, 2]*
((1 + Subscript[x, 2])/(1 + 2*Subscript[x, 2]))},
{{1, 0}, {0, (1 + 2*Subscript[x, 2])^(-1)}}, {Subscript[x, 1]},
{{0, 0}}}, {Subscript[x, 1], Subscript[x, 2]},
{{Subscript[, 1], 0}, {Subscript[, 2], 0}}, {Automatic}, Automatic, SamplingPeriod -> None]]Forward and inverse state transformations:
{ℒ["StateTransformation"], ℒ["InverseStateTransformation"]}The transformed linear system:
ℒ["TransformedSystem"]Design controllers using exact and approximate linearization, and compare:
asys = AffineStateSpaceModel[{{(Subscript[x, 1]*(1 - 4*Subscript[x, 2]) -
Subscript[x, 2]*(3 + 14*Subscript[x, 2] +
16*Subscript[x, 2]^2))/(2 + 4*Subscript[x, 2]),
(3*(Subscript[x, 1] + Subscript[x, 2] +
2*Subscript[x, 2]^2))/(2 + 4*Subscript[x, 2])},
{{1, -(2 + 4*Subscript[x, 2])^(-1)},
{0, -(2 + 4*Subscript[x, 2])^(-1)}},
{Subscript[x, 1] - Subscript[x, 2]}, {{0, 0}}},
{Subscript[x, 1], Subscript[x, 2]},
{{Subscript[, 1], 0}, {Subscript[, 2], 0}}, {Automatic}, Automatic, SamplingPeriod -> None];ℒ = StateTransformationLinearize[asys];tsys = ℒ["TransformedSystem"]Design a controller and observer for the linearized system:
egains = EstimatorGains[tsys, {-8, -10}];
rgains = StateFeedbackGains[tsys, {-2, -3}];EstimatorRegulator[tsys, {egains, rgains}, "EstimatorRegulatorFeedbackModel"]csys1 = ℒ[{"ClosedLoopSystem", %}]The simulation of the closed-loop system:
res1 = OutputResponse[{csys1, {0.2, 0.1, 0, 0}}, {0, 0}, {t, 0, 3}];Plot[res1, {t, 0, 3}, PlotRange -> All]A controller based on approximate linearization, using same specifications:
lsys = StateSpaceModel[asys];egains = EstimatorGains[lsys, {-8, -10}];
rgains = StateFeedbackGains[lsys, {-2, -3}];EstimatorRegulator[lsys, {egains, rgains}, "EstimatorRegulatorFeedbackModel"]csys2 = SystemsModelFeedbackConnect[asys, %];res2 = OutputResponse[{csys2, {0.2, 0.1, 0, 0}}, {0, 0}, {t, 0, 3}];Plot[res2, {t, 0, 3}, PlotRange -> All]Plot[{res1, res2}, {t, 0, 3}, PlotLegends -> {"exact linearization", "approximate linearization"}]Design estimators using exact and approximate linearization, and compare:
ℒ = StateTransformationLinearize[asys = AffineStateSpaceModel[{{(-(1 + Subscript[x, 1]))*
((3*Subscript[x, 1] - 2*Subscript[x, 2])/
(1 + Subscript[x, 1] + Subscript[x, 2])),
(-1 + 2*Subscript[x, 1] - 3*Subscript[x, 2])*
(Subscript[x, 2]/(1 + Subscript[x, 1] +
Subscript[x, 2]))},
{{-Subscript[x, 1]/(1 + Subscript[x, 1] +
Subscript[x, 2])}, {(1 + Subscript[x, 2])/
(1 + Subscript[x, 1] + Subscript[x, 2])}},
{Subscript[x, 1]*(-1 + Subscript[x, 2]) +
2*Subscript[x, 2]}, {{0}}}, {Subscript[x, 1],
Subscript[x, 2]}, {Subscript[, 1]}, {Automatic}, Automatic,
SamplingPeriod -> None]]tsys = ℒ["TransformedSystem"]The estimator for the original system:
EstimatorGains[tsys, {-6 + 4I, -6 - 4I}];estim = ℒ[{"OriginalSystemEstimator", StateOutputEstimator[tsys, %]}]The trajectories of the estimated states:
or = OutputResponse[{asys, {-2, -1}}, 0, {t, 0, 5}];res1 = OutputResponse[SystemsModelDelete[estim, None, 3], Join[{0}, or], {t, 0, 5}];Plot[res1, {t, 0, 5}, PlotRange -> All]An estimator based on approximate linearization, using the same specification:
lsys = StateSpaceModel[asys];aestim = StateOutputEstimator[asys, EstimatorGains[lsys, {-6 + 4I, -6 - 4I}]]The trajectories of the estimated states, based on approximate linearization:
res2 = OutputResponse[SystemsModelDelete[aestim, None, 3], Join[{0}, or], {t, 0, 5}];Plot[Evaluate[%], {t, 0, 5}, PlotRange -> All]Compute the actual state trajectories:
res = StateResponse[{asys, {-2, -1}}, 0, {t, 0, 10}];Compare the actual and estimated trajectories of the first state:
Plot[Evaluate[First /@ {res, res1, res2}], {t, 0, 4}, PlotRange -> All, PlotLegends -> {"Actual", "Exact linearization", "Approximate linearization"}]Compare the actual and estimated trajectories of the second state:
Plot[Evaluate[Last /@ {res, res1, res2}], {t, 0, 4}, PlotRange -> All, PlotLegends -> {"Actual", "Exact linearization", "Approximate linearization"}]State-Output Linearize (2)
Get transformation-related properties:
ℒ = StateTransformationLinearize[AffineStateSpaceModel[
{{((-1 + Subscript[x, 1])*(Subscript[x, 1]*
(-2 + Subscript[x, 2]) + Subscript[x, 2]))/
(-1 + Subscript[x, 1] - 2*Subscript[x, 2]),
(-(-1 + Subscript[x, 1] - 2*Subscript[x, 2])^(-1))*
Subscript[x, 2]*(-3 - 5*Subscript[x, 2] +
Subscript[x, 1]*(1 + Subscript[x, 2]))},
{{(2 + Subscript[x, 1])/(1 - Subscript[x, 1] +
2*Subscript[x, 2])},
{(-1 + Subscript[x, 1] - 2*Subscript[x, 2])^(-1)}},
{Subscript[x, 1]*(1 + 2*Subscript[x, 2])}, {{0}}},
{Subscript[x, 1], Subscript[x, 2]}, {{Subscript[, 1], 0}},
{Automatic}, Automatic, SamplingPeriod -> None]]Forward and inverse state transformations:
ℒ["StateTransformation"]ℒ["InverseStateTransformation"]The transformed system with linear dynamics from state to output:
ℒ["TransformedSystem"]Design an estimator using exact linearization:
asys = AffineStateSpaceModel[{{(Subscript[x, 1]*(2 - 8*Subscript[x, 2]) -
6*Subscript[x, 2]^2)/(-1 + 2*Subscript[x, 2]),
(2*(Subscript[x, 1] - (-2 + Subscript[x, 2])*
Subscript[x, 2]))/(-1 + 2*Subscript[x, 2])},
{{(-(-1 + 2*Subscript[x, 2])^(-1))*(Subscript[x, 1] +
(1 + Subscript[x, 2])^2)},
{(2 + Subscript[x, 1] + Subscript[x, 2]^2)/
(-1 + 2*Subscript[x, 2])}},
{2*Subscript[x, 1] + Subscript[x, 2] + Subscript[x, 2]^2},
{{0}}}, {Subscript[x, 1], Subscript[x, 2]}, Automatic, {Automatic},
Automatic, SamplingPeriod -> None];ℒ = StateTransformationLinearize[asys]tsys = ℒ["TransformedSystem"]The estimator for the original system:
EstimatorGains[StateSpaceModel@tsys, {-6, -7}];estim = ℒ[{"OriginalSystemEstimator", StateOutputEstimator[StateSpaceModel@tsys, %]}]The trajectories of the estimated states:
or = OutputResponse[{asys, {0.1, 0.2}}, 0, {t, 0, 10}];res1 = OutputResponse[SystemsModelDelete[estim, None, 3], Join[{0}, or], {t, 0, 2}];Plot[res1, {t, 0, 2}, PlotRange -> All]The actual state trajectories:
res = StateResponse[{asys, {0.1, 0.2}}, 0, {t, 0, 2}];Compare the estimated and actual state trajectories:
Plot[Evaluate@Join[res, res1], {t, 0, 2}, PlotRange -> All, PlotLegends -> {"State 1", "State 2", "Estimated State 1", "Estimated State 2"}]Input-State Linearize (2)
Get transformation-related properties:
ℒ = StateTransformationLinearize[AffineStateSpaceModel[{{4*Subscript[x, 1], 7*Subscript[x, 1]^2 +
Subscript[x, 2]}, {{1}, {-1 + 2*Subscript[x, 1]}},
{Subscript[x, 1] - Subscript[x, 2]}, {{0}}},
{Subscript[x, 1], Subscript[x, 2]}, {{Subscript[, 1], 0}},
{Automatic}, Automatic, SamplingPeriod -> None]]Forward and inverse state transformations:
{ℒ["StateTransformation"], ℒ["InverseStateTransformation"]}The transformed system with linear dynamics from input to state:
ℒ["TransformedSystem"]//SimplifyDesign controllers using exact and approximate linearization, and compare:
ℒ = StateTransformationLinearize[asys = AffineStateSpaceModel[{{Subscript[x, 1] - 5*Subscript[x, 2]^2 +
Subscript[x, 2]*Subscript[x, 3] + 2*Subscript[x, 3]^2,
-Subscript[x, 2] - 2*Subscript[x, 3],
5*Subscript[x, 2] + Subscript[x, 3]},
{{1, (Subscript[x, 2] + Subscript[x, 3])/3}, {0, -1/3}, {0, -1/3}},
{Subscript[x, 1]}, {{0, 0}}}, {Subscript[x, 1],
Subscript[x, 2], Subscript[x, 3]},
{{Subscript[, 1], 0}, {Subscript[, 2], 0}}, {Automatic}, Automatic, SamplingPeriod -> None]]tsys = ℒ["TransformedSystem"]A controller based on exact linearization:
κ1 = LQRegulatorGains[StateSpaceModel[N@tsys], {IdentityMatrix[3], 5 IdentityMatrix[2]}];ℒ[{"OriginalSystemController", κ1}]//Expandcsys1 = ℒ[{"ClosedLoopSystem", κ1}]//SimplifyThe design based on approximate linearization:
lsys = StateSpaceModel[asys];k2 = LQRegulatorGains[lsys, {IdentityMatrix[3], 5 IdentityMatrix[2]}]//NThe closed-loop system with feedback, based on approximate linearization:
csys2 = SystemsModelStateFeedbackConnect[asys, k2]//Simplify//ChopOutputResponse[AffineStateSpaceModel[#, {Subscript[x, 1] -> -6, Subscript[x, 2] -> 4, Subscript[x, 3] -> -1}], {0, 0}, {t, 0, 10}]& /@ {csys1, csys2};Plot[Evaluate[%], {t, 0, 10}, PlotLegends -> {"Exact linearization", "Approximate linearization"}, PlotRange -> All]Properties & Relations (4)
The transformed system is related to the input system by StateSpaceTransform:
asys = AffineStateSpaceModel[{{3*(1 + Subscript[x, 1])*Subscript[x, 2],
((2 - 3*Subscript[x, 2])*Subscript[x, 2] +
Subscript[x, 1]*(1 + 2*Subscript[x, 2] -
3*Subscript[x, 2]^2))/(1 + Subscript[x, 1])},
{{-1}, {Subscript[x, 2]/(1 + Subscript[x, 1])}},
{-2*(Subscript[x, 2] + Subscript[x, 1]*
(1 + Subscript[x, 2]))}, {{0}}}, {Subscript[x, 1],
Subscript[x, 2]}, {{Subscript[, 1], 0}}, {Automatic}, Automatic,
SamplingPeriod -> None];ℒ = StateTransformationLinearize[asys, {Subscript[z, 1], Subscript[z, 2]}];{AffineStateSpaceModel@ℒ["TransformedSystem"],
StateSpaceTransform[asys, ℒ[{"StateTransformation", "InverseStateTransformation"}]]}The input-output linearized system is controllable and observable:
asys = AffineStateSpaceModel[{{3*(1 + Subscript[x, 1])*Subscript[x, 2],
((2 - 3*Subscript[x, 2])*Subscript[x, 2] +
Subscript[x, 1]*(1 + 2*Subscript[x, 2] -
3*Subscript[x, 2]^2))/(1 + Subscript[x, 1])},
{{-1}, {Subscript[x, 2]/(1 + Subscript[x, 1])}},
{-2*(Subscript[x, 2] + Subscript[x, 1]*
(1 + Subscript[x, 2]))}, {{0}}}, {Subscript[x, 1],
Subscript[x, 2]}, {{Subscript[, 1], 0}}, {Automatic}, Automatic,
SamplingPeriod -> None];ℒ = StateTransformationLinearize[asys, {{Subscript[z, 1], Subscript[z, 2]}, "InputOutput"}];{ControllableModelQ[ℒ["TransformedSystem"]], ObservableModelQ[ℒ["TransformedSystem"]]}The state-output linearized system is observable:
asys = AffineStateSpaceModel[{{(4*Subscript[x, 1] - 6*Subscript[x, 1]^2 +
6*Subscript[x, 2])/(1 + 6*Subscript[x, 1]),
(30*Subscript[x, 1]^2 - 2*Subscript[x, 2] +
24*Subscript[x, 1]*Subscript[x, 2])/
(1 + 6*Subscript[x, 1])}, {{0}, {1 + Subscript[x, 1]}},
{Subscript[x, 1] - 3*Subscript[x, 1]^2 +
2*Subscript[x, 2]}, {{0}}}, {Subscript[x, 1],
Subscript[x, 2]}, {{Subscript[, 1], 0}}, {Automatic}, Automatic,
SamplingPeriod -> None];ℒ = StateTransformationLinearize[asys, {{Subscript[z, 1], Subscript[z, 2]}, "StateOutput"}];ObservableModelQ[ℒ["TransformedSystem"]]The input-state linearized system is controllable:
asys = AffineStateSpaceModel[{{4*Subscript[x, 1], 7*Subscript[x, 1]^2 +
Subscript[x, 2]}, {{1}, {-1 + 2*Subscript[x, 1]}},
{Subscript[x, 2]}, {{0}}}, {Subscript[x, 1],
Subscript[x, 2]}, {{Subscript[, 1], 0}}, {Automatic}, Automatic,
SamplingPeriod -> None];ℒ = StateTransformationLinearize[asys, {{Subscript[z, 1], Subscript[z, 2]}, "InputState"}];ControllableModelQ[ℒ["TransformedSystem"]]Related Guides
History
Text
Wolfram Research (2014), StateTransformationLinearize, Wolfram Language function, https://reference.wolfram.com/language/ref/StateTransformationLinearize.html.
CMS
Wolfram Language. 2014. "StateTransformationLinearize." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/StateTransformationLinearize.html.
APA
Wolfram Language. (2014). StateTransformationLinearize. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/StateTransformationLinearize.html
BibTeX
@misc{reference.wolfram_2026_statetransformationlinearize, author="Wolfram Research", title="{StateTransformationLinearize}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/StateTransformationLinearize.html}", note=[Accessed: 13-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_statetransformationlinearize, organization={Wolfram Research}, title={StateTransformationLinearize}, year={2014}, url={https://reference.wolfram.com/language/ref/StateTransformationLinearize.html}, note=[Accessed: 13-June-2026]}