SystemModelLinearize[model]
给出均衡 model 的线性化的 StateSpaceModel.
SystemModelLinearize[model,op]
在运算点 op 处进行线性化.
SystemModelLinearize
SystemModelLinearize[model]
给出均衡 model 的线性化的 StateSpaceModel.
SystemModelLinearize[model,op]
在运算点 op 处进行线性化.
更多信息和选项
- SystemModelLinearize 给出运算点附近 model 的线性近似.
- 线性模型一般用于控制设计、优化和频率分析.
- 带有方程
和输出方程
的系统在操作点
和
被线性化应该满足 f(0,x0,u0)0. - 返回的线性 StateSpaceModel 具有状态
,输入
和输出
,其中状态方程
和输出方程
. 矩阵由
、
、
、
和
给出,均在
、
和
处计算. - SystemModelLinearize[model] 等价于 SystemModelLinearize[model,"EquilibriumValues"].
- op 的规范为运算点使用以下值:
-
"InitialValues" 来自 model 的初始值 "EquilibriumValues" FindSystemModelEquilibrium[model] sim or {sim,"StopTime"} 来自 SystemModelSimulationData sim 的最终值 {sim,"StartTime"} sim 的初始值 {sim,time} 来自 sim 在 time 的值 {{{x1,x10},…},{{u1,u10},…}} 状态值 xi0 和输入值 ui0 - 可以使用 SystemModelSimulate[model,All,…] 获取仿真 sim.
- SystemModelLinearize 符号线性化 DAE 系统,或首先简化为 ODE 系统并数值化线性 ODE 结果.
- 可给出以下选项:
-
Method Automatic 线性化算法的方法 ProgressReporting $ProgressReporting 控制进程的显示 - Method 选项有以下可能的设置:
-
"NumericDerivative" 简化为 ODE,然后数值线性化 "SymbolicDerivative" 来自 DAE 系统的符号线性化 - Method{"SymbolicDerivative","ReduceIndex"False} 关闭指标约简.
范例
打开所有单元 关闭所有单元基本范例 (3)
SystemModelLinearize[[image]]SystemModelLinearize[[image], {{{"H", 0.75}}, {{"u1", 5.23}}}]线性化包含的 introductory hierarchical 示例中的一个模型:
model = Last@SystemModelExamples["Models", "IntroductoryExamples.Hierarchical.*"]SystemModelLinearize[model]范围 (19)
模型类型 (5)
SystemModelLinearize[[image]]SystemModelLinearize[[image]]SystemModelLinearize[[image]]SystemModelLinearize[\!\(\*GraphicsBox[«8»]\)]SystemModelLinearize[\!\(\*GraphicsBox[«8»]\), Method -> {"SymbolicDerivative", "SymbolicParameters" -> {"R1", "R2", "L"}}]极限情况 (3)
线性化值 (5)
SystemModelLinearize[[image], "EquilibriumValues"]SystemModelLinearize[[image], "InitialValues"]SystemModelLinearize[[image], {{{"H1", 2.03}, {"T1", 318.15}, {"T2", 318.15}}, {{"u1", 5}, {"u2", 5}}}, "EquilibriumValues"]SystemModelLinearize[[image], {{{"H1", 5}, {"T1", 318.15}, {"T2", 318.15}}, {}}, "EquilibriumValues"]在给定部分状态和输入的情况下进行线性化,剩下的值则使用初值:
SystemModelLinearize[[image], {{{"H1", 3.03}, {"T1", 318.15}, {"T2", 318.15}}, {{"u1", 5}, {"u2", 5}}}, "InitialValues"]运算点 (6)
SystemModelLinearize[[image], "EquilibriumValues"]SystemModelLinearize[[image], "InitialValues"]SystemModelLinearize[[image], {{{"H1", 2.03}, {"T1", 318.15}, {"T2", 318.15}}, {{"u1", 5}, {"u2", 5}}}, "EquilibriumValues"]sim = SystemModelSimulate[[image], All, {0, 0}]SystemModelLinearize[[image], {sim, "StartTime"}]sim = SystemModelSimulate[[image], All]SystemModelLinearize[[image], {sim, "StopTime"}]sim = SystemModelSimulate[[image], All, Method -> {"StopAtSteadyState" -> True}]SystemModelLinearize[[image], {sim, "StopTime"}]推广和延伸 (1)
隐藏所得 StateSpaceModel 中的标签:
SystemModelLinearize[[image], SystemsModelLabels -> None]选项 (5)
Method (4)
"SymbolicDerivative" 方法使用来自于仿真的完全指定的运算点:
sim = SystemModelSimulate[[image], All, {0, 0}]SystemModelLinearize[[image], sim, Method -> "SymbolicDerivative"]"NumericDerivative" 方法使用由状态和输入点指定的运算点:
SystemModelLinearize[[image], {{{"capacitor.v", 0.}, {"inductor.i", 0.}}, {{"v", 0.}}}, Method -> "NumericDerivative"]SystemModelLinearize[[image], Method -> {"SymbolicDerivative", "SymbolicParameters" -> {"R", "L", "C"}}]用 "ReduceIndex" 在符号线性化时关闭指标约简:
sim = SystemModelSimulate[[image], All, {0, 0}];关闭指标约简得到一个描述 StateSpaceModel:
SystemModelLinearize[[image], sim, Method -> {"SymbolicDerivative", "ReduceIndex" -> False}]ProgressReporting (1)
用 ProgressReporting 控制进度汇报:
SystemModelLinearize[[image], ProgressReporting -> False]应用 (10)
分析线性系统 (5)
model = [image];{Subscript[x, 0], Subscript[u, 0], Subscript[y, 0]} = FindSystemModelEquilibrium[model];ss = SystemModelLinearize[model, "EquilibriumValues"];{linY1, linY2} = OutputResponse[ss, {UnitStep[t], UnitStep[t]}, {t, 0, 300}];nonLin = SystemModelSimulate[model, {0, 300}, <|"InitialValues" -> Rule@@@Subscript[x, 0], "Inputs" -> {"u1" -> Function[t, Subscript[u, 0][[1, 2]] + UnitStep[t]], "u2" -> Function[t, Subscript[u, 0][[2, 2]] + UnitStep[t]]}|>];Show[SystemModelPlot[nonLin, {"y1"}], Plot[Tooltip[Subscript[y, 0][[1, 2]] + linY1, "linear y1"], {t, 0, 300}]]ss = SystemModelLinearize[[image], "InitialValues"]{a, b, c, d} = Normal[ss];Re@Eigenvalues[a]Plot[Evaluate[OutputResponse[ss, UnitStep[t], {t, 1}]], {t, 0, 1}]tf = TransferFunctionModel@SystemModelLinearize[[image]];TransferFunctionPoles[tf]model = \!\(\*GraphicsBox[«8»]\);ss = SystemModelLinearize[model];BodePlot[ss, {0.5, 3}, PlotLayout -> "Magnitude"]对仿真数据使用 Fourier 以验证结果:
nonLin = SystemModelSimulate[model, {0, 200}, <|"Inputs" -> {"u" -> Function[t, UnitStep[t] - UnitStep[t - 2]]}|>];odata = Abs@Fourier@Table[nonLin[{"inertia3.w"}, t][[1]], {t, 0, 200, 0.25}];
idata = Abs@Fourier@Table[UnitStep[t] - UnitStep[t - 2], {t, 0, 200, 0.25}];ListLogLinearPlot[odata[[1 ;; 200]] / idata[[1 ;; 200]], Joined -> True, DataRange -> {0, 2Pi}, PlotRange -> {{0.5, 3}, {0, 50}}]{a, b, c, d} = Normal[ss];Im[Eigenvalues[a]]model = [image];model2 = SystemModel[model, {"t" -> 0}];rlc = SystemModelLinearize[model2]model3 = SystemModel[model2, {"t" -> 1}];rl = SystemModelLinearize[model3]线性系统的控制器设计 (5)
tf = TransferFunctionModel@SystemModelLinearize[[image]];pidTf = TransferFunctionModel[kp (1 + 1 / (τi ) + τd ), ];cltf = SystemsModelFeedbackConnect[SystemsModelSeriesConnect[pidTf, tf]];Manipulate[
Plot[OutputResponse[cltf /. {kp -> gain, τi -> iTime, τd -> dTime}, UnitStep[t], {t, 20}]//Evaluate, {t, 0, 20}, PlotStyle -> Thick, GridLines -> Automatic, Frame -> True, PlotRange -> {0, 1.2}],
{{gain, 1, "SubscriptBox[k, p]"}, 0.01, 10}, {{dTime, 0.01, "SubscriptBox[τ, d]"}, 0.01, 10}, {{iTime, 1.9, "SubscriptBox[τ, i]"}, 0.01, 10}, SaveDefinitions -> True]基于其线性化设计一个直流电机的 lead-based 控制器:
tf = TransferFunctionModel@SystemModelLinearize[[image]];piLeadTf = TransferFunctionModel[kp (1 + 1 / τi (τd + 1) / (α τd + 1)), ];optf = SystemsModelSeriesConnect[piLeadTf, tf];Manipulate[BodePlot[newOptf = optf /. {kp -> Kp, τi -> Τi, τd -> Τd, α -> Α}, StabilityMargins -> True, PlotLayout -> "List"],
{{Kp, 4.5, "SubscriptBox[k, p]"}, 0.01, 10}, {{Τi, 2, "τi"}, 0.01, 10}, {{Τd, 0.01, "τd"}, 0.01, 10}, {{Α, 0.07, "α"}, 0.01, 0.9}, SaveDefinitions -> True]cltf = SystemsModelFeedbackConnect[SystemsModelSeriesConnect[newOptf, tf]];Plot[OutputResponse[cltf, UnitStep[t], {t, 20}]//Evaluate, {t, 0, 20}, PlotStyle -> Thick, GridLines -> Automatic, Frame -> True, PlotRange -> All]ss = SystemModelLinearize[[image]];k = StateFeedbackGains[ss, {-0.251, -0.222, -0.222}]clss = SystemsModelStateFeedbackConnect[ss, k];Plot[OutputResponse[clss, {UnitStep[t], UnitStep[t]}, {t, 100}]//Evaluate, {t, 0, 100}, PlotRange -> All]ss = SystemModelLinearize[[image]];{q1, q2} = {DiagonalMatrix[{1, 6 10^-4, 6 10^-4}], DiagonalMatrix[{0.0002, 0.0002}]};k = LQRegulatorGains[ss, {q1, q2}]clss = SystemsModelStateFeedbackConnect[ss, k];Plot[OutputResponse[clss, {UnitStep[t], UnitStep[t]}, {t, 100}]//Evaluate, {t, 0, 100}, PlotRange -> All]model = [image];ss = SystemModelLinearize[model];l = EstimatorGains[ss, {-0.6020, -0.5856, -0.5697}]{a, b, c, d} = Normal[ss];ssobsv = StateSpaceModel[{a - l.c, ArrayFlatten[{{b - l.d, l}}], IdentityMatrix[3]}];sresp = StateResponse[ss, {UnitStep[t], UnitStep[t]}, {t, 200}];y = OutputResponse[ss, {UnitStep[t], UnitStep[t]}, {t, 200}];oresp = OutputResponse[ssobsv, {UnitStep[t], UnitStep[t], y[[1]], y[[2]]}, {t, 200}];states = model["StateVariables"];Table[Plot[{sresp[[i]], oresp[[i]]}, {t, 0, 200}, PlotLabel -> states[[i]]], {i, 3}]属性和关系 (7)
使用 SystemModel 的属性在初值点进行线性化:
model = [image];ival = model["GroupedInitialValues"]SystemModelLinearize[model, ival, "InitialValues"] == SystemModelLinearize[model, "InitialValues"]用 FindSystemModelEquilibrium 在平衡点进行线性化:
model = [image];eqval = FindSystemModelEquilibrium[model];SystemModelLinearize[model, eqval] == SystemModelLinearize[model, "EquilibriumValues"]model = [image];{Subscript[x, 0], Subscript[u, 0], Subscript[y, 0]} = FindSystemModelEquilibrium[model, {"H" == 0.85, "Tu" == 38, "Tx" == 38}]ss = SystemModelLinearize[model, {{{"H", 0.85}, {"Tu", 38}, {"Tx", 38}}, {}}, "EquilibriumValues"]{linY1, linY2} = OutputResponse[ss, {UnitStep[t], UnitStep[t]}, {t, 0, 300}];nonLin = SystemModelSimulate[model, {0, 300}, <|"InitialValues" -> Rule@@@Subscript[x, 0], "Inputs" -> {"u1" -> Function[t, Subscript[u, 0][[1, 2]] + UnitStep[t]], "u2" -> Function[t, Subscript[u, 0][[2, 2]] + UnitStep[t]]}|>];Show[SystemModelPlot[nonLin, {"y1"}], Plot[Evaluate@Tooltip[Subscript[y, 0][[1, 2]] + linY1, "linear y1"], {t, 0, 300}]]用 TransferFunctionModel 转换为传递函数表示:
SystemModelLinearize[[image]]TransferFunctionModel[%]用 ToDiscreteTimeModel 离散化线性化模型:
SystemModelLinearize[[image]]ToDiscreteTimeModel[%, 0.10, z]linearize1 = [image];linearize1["ModelicaDisplay"]ss1 = SystemModelLinearize[linearize1]linearize2 = [image];linearize2["ModelicaDisplay"]ss2 = SystemModelLinearize[linearize2]TransferFunctionModel[ss1] == TransferFunctionModel[ss2]StateSpaceModel 可以线性化常微分方程组:
ClearAll[t, x, θ, i, vin, g, r, lin, mc, mp, l, k, dc, dp, a];eqs = {(mc + mp)x''[t] - mp l Cos[θ[t]] θ''[t] + mp l Sin[θ[t]] θ'[t]^2 == k i[t] - dc x'[t], θ''[t]mp (4l^2 / 3 + a^2 / 4) - mp l x''[t] Cos[θ[t]] == mp g l Sin[θ[t]] - dp θ'[t], 0 == vin[t] - r i[t] - lin i'[t] - k x'[t]};opssm = Sequence[{{i[t], 0}, {θ[t], 0}, {θ'[t], 0}, {x[t], 0}, {x'[t], 0}}, {{vin[t], 0}}];outputs = {θ[t], x[t]};ssm = StateSpaceModel[eqs, opssm, outputs, t]//SimplifyparVals = {g -> 9.80665, r -> 13, lin -> 1, mc -> 445 * 0.1^3, mp -> 7700 * π * 0.005^2 * 0.61, l -> 0.61 / 2, a -> 0.005, k -> 3.7 * 157.48 * 1.6, dc -> 2, dp -> 0.01};ssm /. parVals用 SystemModelLinearize 线性化同一系统的 SystemModel:
model = SystemModel[[image], <|"ParameterValues" -> {"electricalMotor.J" -> 0}|>];op = FindSystemModelEquilibrium[model]SystemModelLinearize[model, op]根据方程创建一个 NonlinearStateSpaceModel,并与 SystemModel 相比较:
nssm = NonlinearStateSpaceModel[eqs, opssm, outputs, t]//SimplifyplotComparison[nssmVar_, smVar_] := Show[SystemModelPlot[nssm, {nssmVar}, 20, <|"ParameterValues" -> parVals, "Inputs" -> {vin -> UnitBox}|>, PlotLabel -> nssmVar, ...], SystemModelPlot[model, {smVar}, 20, <|"Inputs" -> {"V" -> UnitBox}|>, TargetUnits -> "Unit", ...]];Row@MapThread[plotComparison, {{θ, x}, {"pendulum.pendulumDamper.phi_rel", "pendulum.sliderConstraint.s"}}]plotComparison[x, "pendulum.sliderConstraint.s"]可能存在的问题 (1)
SystemModelLinearize["DocumentationExamples.Modeling.ElectricCircuit.CircuitWithEvent", Method -> "SymbolicDerivative"]SystemModelLinearize["DocumentationExamples.Basic.StateOut", Method -> "SymbolicDerivative"]SystemModelLinearize["DocumentationExamples.Basic.InOutNoState", Method -> "SymbolicDerivative"]用 "NumericDerivative" 进行数字式线性化:
SystemModelLinearize["DocumentationExamples.Modeling.ElectricCircuit.CircuitWithEvent", Method -> "NumericDerivative"]文本
Wolfram Research (2018),SystemModelLinearize,Wolfram 语言函数,https://reference.wolfram.com/language/ref/SystemModelLinearize.html (更新于 2020 年).
CMS
Wolfram 语言. 2018. "SystemModelLinearize." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/SystemModelLinearize.html.
APA
Wolfram 语言. (2018). SystemModelLinearize. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/SystemModelLinearize.html 年
BibTeX
@misc{reference.wolfram_2026_systemmodellinearize, author="Wolfram Research", title="{SystemModelLinearize}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/SystemModelLinearize.html}", note=[Accessed: 14-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_systemmodellinearize, organization={Wolfram Research}, title={SystemModelLinearize}, year={2020}, url={https://reference.wolfram.com/language/ref/SystemModelLinearize.html}, note=[Accessed: 14-November-2026]}