DiscreteInputOutputModel[{g0,g1,…,gn-1},u]
入力 u,サンプリングインスタン i とにおける出力
の離散時間モデルを表す.
DiscreteInputOutputModel[{g0,g1,…,gn-1},u,y]
出力変数 y にも依存する出力
の指定に使うことができる.
DiscreteInputOutputModel[…,{{u1,{…,u10}},…},{{y1,{…,y10}},…}]
インスタント k<=0の各信号についての入出力値を指定する.
DiscreteInputOutputModel
DiscreteInputOutputModel[{g0,g1,…,gn-1},u]
入力 u,サンプリングインスタン i とにおける出力
の離散時間モデルを表す.
DiscreteInputOutputModel[{g0,g1,…,gn-1},u,y]
出力変数 y にも依存する出力
の指定に使うことができる.
DiscreteInputOutputModel[…,{{u1,{…,u10}},…},{{y1,{…,y10}},…}]
インスタント k<=0の各信号についての入出力値を指定する.
詳細とオプション
- DiscreteInputOutputModelは等間隔のサンプリングインスタントにおける出力が系の入力と直前の出力の関数である系を表す.
- DiscreteInputOutputModelを使って,離散時間TransferFunctionModelオブジェクトを含む入出力形式で離散時間系を表すことができる.これは,通常,ModelPredictiveControllerで計算されたMPCコントローラを表すために使われる.
- 以下の入出力モデルは
について
に従う過去の入出力の長さ m の移動窓を表している. - k=n,…のとき,この方程式は
および
で周期的に拡張される. - デフォルトで,入力
と出力
(
)は
であると仮定される. - モデル予測制御では2つの単純なケースがよく使われる.
-

状態フィードバックコントローラ 
状態擬似フィードバックコントローラ - サンプリングインスタンス間の値は,デフォルトで,一定であるとみなされる.これは,本質的に,補間次数が
のゼロ次ホールド (ZOH) である. - 整数サンプリングインスタンス kiと出力
はDiscreteInputOutputModel[{{k0,g0},…,{kn-1,gn-1}},…]として明示的に指定できる. - 時点 tiはサンプリングインスタンス kiと ti=τ kiの関係にある.ここで,τ はDiscreteInputOutputModel[…, SamplingPeriodτ]として指定されたサンプリング周期である.
- DiscreteInputOutputModel["prop"]は特性の計算に使うことができる.
- 次は,出力指定{ki,gi}に関連する特性である.
-
"FirstInstant" 最初のインスタントMin[{k0,k1,…}] "FirstValue" 最初のインスタントにおける値 "Instants" サンプリングインスタントSort[{k0,k1,…}] "LastInstant" 最後のインスタントMax[{k0,k1,…}] "LastValue" 最後のインスタントにおける値 "Path" インスタントと値のペア{{k0,g0},…} "PathComponent" 最初のパス要素 "PathComponents" 単変数成分に分解されたすべてのパス "PathFunction" 補間されたパス関数 "PathLength" パスの長さ("Horizon") "Values" 出力値{g0,g1,…} - 次は,基本的なモデル特性である.
-
"InputsCount" 入力数 "InputVariables" 入力変数 u "OutputsCount" 出力数 "OutputVariables" 出力変数 y "Type" 入出力関係の型 "SamplingPeriod" サンプリング周期 sp - 次は,時系列の特性である.
-
"FirstTime" 最初のインスタントに対応する時点 "LastTime" 最後のインスタントに対応する時点 "TemporalData" マルチパスのTemporalDataオブジェクト "TimePath" インスタントと値のペア{{t0,g0},…} "Times" サンプリングインスタントに対応する時点 "TimeSeries" TimeSeriesオブジェクト "TimeValues" サンプリングの時点に対応する出力値 - DiscreteInputOutputModelは以下のオプションを取る.
-
MissingDataMethod None 欠落値に使用するメソッド ResamplingMethod {"Interpolation", InterpolationOrder0} パスのリサンプリングに使用するメソッド SamplingPeriod Automatic サンプリング周期 
例題
すべて開く すべて閉じる例 (3)
DiscreteInputOutputModel[{u[0], (u[0] + u[1]) / 2, (u[0] + u[1] + u[2]) / 3}, u]ListStepPlot[OutputResponse[%, RandomInteger[{-5, 5}, 50]]]DiscreteInputOutputModel[{u[0], u[1] - y[0], u[2] - y[1]}, u, y]ListStepPlot[OutputResponse[%, Table[Sin[t], {t, 0, 4π, 0.1}]]]DiscreteInputOutputModel[{u[0] + y[-1] + y[-2], u[1] + u[0] + u[-1]}, {{u, {-2, -1, 1}}}, {{y, {-1, -1, -1}}}]or = OutputResponse[%, Range[-20, 20]];
ListStepPlot[or, DataRange -> {0, 40}]DiscreteInputOutputModel[{u[0] + y[-1] + y[-2], u[1] + u[0] + u[-1]}, u, y];
OutputResponse[%, Range[-20, 20]] == orスコープ (30)
基本的な用法 (8)
diom = DiscreteInputOutputModel[{u[0], u[1], u[2]}, u]OutputResponse[diom, {a, b, c}]OutputResponse[diom, {a, b, c, d, e}]diom = DiscreteInputOutputModel[{(u[-1] + u[0]) / 2}, u]OutputResponse[diom, {a, b, c, d, e}]diom = DiscreteInputOutputModel[{(y[-1] + u[0]) / 2}, u, y]OutputResponse[diom, {a, b, c, d, e}]diom = DiscreteInputOutputModel[{Max[y[-1], u[0]]}, u, y]inp = RandomInteger[{-20, 20}, 20];
OutputResponse[diom, inp]FoldListを使って同じ結果を得る:
Rest[FoldList[Max, 0, inp]]diom = DiscreteInputOutputModel[{{Max[y1[-1], u[0]], Min[y2[-1], u[0]]}}, u, {y1, y2}]inp = RandomInteger[{-20, 20}, 20];
OutputResponse[diom, inp]FoldListを使って同じ結果を得る:
{Rest[FoldList[Max, 0, inp]], Rest[FoldList[Min, 0, inp]]}diom = DiscreteInputOutputModel[{{Max[y1[-1], u[0]], Min[y2[-1], u[0]]}}, u, {{y1, {-20, -20}}, {y2, {20, 20}}}]inp1 = RandomInteger[{-20, -10}, 5];
OutputResponse[diom, inp1]inp2 = RandomInteger[{10, 20}, 5];
OutputResponse[diom, inp2]diomD = DiscreteInputOutputModel[{{Max[y1[-1], u[0]], Min[y2[-1], u[0]]}}, u, {y1, y2}]OutputResponse[diomD, inp1]OutputResponse[diomD, inp2]DiscreteInputOutputModel[{{u[0], u[0]}, {u[0] - u[1], u[0] + u[1]}, {u[0] - u[1] - u[2], u[0] + u[1] + u[2]}}, u]ListLinePlot[OutputResponse[%, {Range[-50, 50]}], DataRange -> {-20, 20}]DiscreteInputOutputModel[{Piecewise[{{1, u[0] > 0}, {-1, u[0] <= 0}}], Piecewise[{{1, u[1] > 1}, {-1, u[1] <= 1}}], Piecewise[{{1, u[2] > 2}, {-1, u[2] <= 2}}], Piecewise[{{1, u[3] > 3}, {-1, u[3] <= 3}}]}, u]ListStepPlot[OutputResponse[%, RandomReal[{-5, 5}, 50]]]TransferFunctionModel (4)
一入力一出力(SISO)の系のTransferFunctionModel:
tfm = TransferFunctionModel[(z^-1/0.1 z^-1 + 1), z^-1, SamplingPeriod -> 1]diom = DiscreteInputOutputModel[{ u[-1] - 0.1 y[-1]}, u, y ]inp = Table[Sin[t], {t, 0, 2 π, 0.1}];
GraphicsRow[Table[ListStepPlot[OutputResponse[sys, inp],
DataRange -> {0, 2π}], {sys, {tfm, diom}}]]多入力多出力(MISO)の系のTransferFunctionModel:
tfm = TransferFunctionModel[{{(z^-1/0.1 z^-1 + 1), (1/0.2 z^-1 + 1)}}, z^-1, SamplingPeriod -> 1]diom = DiscreteInputOutputModel[{0.2 Subscript[u, 1][-2] + Subscript[u, 1][-1] + 0.1 Subscript[u, 2][-1] + Subscript[u, 2][0] - 0.02 y[-2] - 0.3 y[-1]}, {Subscript[u, 1], Subscript[u, 2]}, y]inp = Table[{Sin[t], Cos[t]}, {t, 0, 2 π, 0.1}];
GraphicsRow[Table[ListStepPlot[OutputResponse[sys, inp],
DataRange -> {0, 2π}], {sys, {tfm, diom}}]]一入力多出力(SIMO)の系のTransferFunctionModel:
tfm = TransferFunctionModel[{{(z^-1/0.1 z^-1 + 1)}, {(1/0.2 z^-1 + 1)}}, z^-1, SamplingPeriod -> 1]diom = DiscreteInputOutputModel[{{ u[-1] - 0.1 Subscript[y, 1][-1], u[0] - 0.2 Subscript[y, 2][-1]}}, u, {Subscript[y, 1], Subscript[y, 2]}]inp = Table[Sin[t], {t, 0, 2 π, 0.1}];
GraphicsRow[Table[ListStepPlot[OutputResponse[sys, inp],
DataRange -> {0, 2π}], {sys, {tfm, diom}}]]多入力多出力(MIMO)の系のTransferFunctionModel:
tfm = TransferFunctionModel[{{(z^-1/0.1 z^-1 + 1), (2 z^-1/0.1 z^-1 + 1)}, {(1/0.2 z^-1 + 1), (z^-1/0.2 z^-1 + 1)}}, z^-1, SamplingPeriod -> 1]diom = DiscreteInputOutputModel[{{Subscript[u, 1][-1] + 2 Subscript[u, 2][-1] - 0.1 Subscript[y, 1][-1],
Subscript[u, 1][0] + Subscript[u, 2][-1] - 0.2 Subscript[y, 2][-1]}}, {Subscript[u, 1], Subscript[u, 2]}, {Subscript[y, 1], Subscript[y, 2]}]inp = Table[{Sin[t], Cos[t]}, {t, 0, 2 π, 0.1}];GraphicsRow[Table[ListStepPlot[OutputResponse[sys, inp],
DataRange -> {0, 2π}], {sys, {tfm, diom}}]]ModelPredictiveController (2)
ModelPredictiveController設計のフィードバックゲインモデル:
ssm = StateSpaceModel[{{{1, 1}, {0, 1}}, {{0}, {1}}}, {x1, x2}, u, SamplingPeriod -> 1];cost = <|"Horizon" -> 3, "StateWeight" -> {{1, 0}, {0, 1}}, "InputWeight" -> {{0.1}}|>;cons = {-1 ≤ x1 ≤ 1, -3 ≤ x2 ≤ 3, -1 ≤ u ≤ 1};fgm = ModelPredictiveController[ssm, cost, cons, "FeedbackGainsModel"]TabView[Table[i -> fgm[i], {i, 0, 2}]]擬似フィードバックゲインモデルもまたDiscreteInputOutputModelである:
olgm = ModelPredictiveController[ssm, cost, cons, "QuasiFeedbackGainsModel"]TabView[Table[i -> olgm[i], {i, 0, 2}]]多入力ModelPredictiveController設計のフィードバックゲインモデル:
ssm = StateSpaceModel[{{{1, 1}, {0, 1}}, {{0, 1}, {1, 1}}}, {x1, x2}, {u1, u2}, SamplingPeriod -> 1];cost = <|"Horizon" -> 3, "StateWeight" -> DiagonalMatrix[{1, 1}], "InputWeight" -> DiagonalMatrix[{0.1, 0.2}]|>;cons = {-2 ≤ x1 ≤ 2, -4 ≤ x2 ≤ 4, -1 ≤ u1 ≤ 1, -1 ≤ u2 ≤ 1};fgm = ModelPredictiveController[ssm, cost, cons, "FeedbackGainsModel"]TabView[Table[i -> Pane[fgm[i], {500, 500}, Scrollbars -> {False, True}], {i, 0, 2}]]特性 (16)
DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["Values"]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["FirstValue"]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["LastValue"]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}][1]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["Instants"]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["FirstInstant"]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["LastInstant"]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["Path"]pc = DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["PathComponents"]pc[[1]]["Path"]pc[[2]]["Path"]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["PathComponent"]
%["Path"]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}][{"PathComponent", 2}]
%["Path"]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}][{"PathComponent", {1, 2}}]
%["Path"]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["PathFunction"]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["PathLength"]props = {"InputVariables", "InputsCount", "OutputVariables", "OutputsCount", "Type", "StatesCount", "SamplingPeriod"};DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}][props];
Dataset[Thread[{props, %}], Alignment -> Left]props = {"TimeValues", "Times", "FirstTime", "LastTime", "TimePath", "TimeSeries", "TemporalData"};DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}][props];
Grid[Thread[{props, %}], IconizedObject[«gridOpts»]]DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}][{"Values", "TimeValues"}]すべての特性をAssociationとして得る:
DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["PropertyAssociation"]すべての特性をDatasetとして得る:
DiscreteInputOutputModel[Association["SampledSeries" -> TemporalData[TimeSeries,
{{{{u[-1] + u[0] + Subscript[y, 1][-1], u[-2] + Subscript[y, 2][-2]},
{u[1] + Subscript[y, 1][-2], u[0] + u[1] + Subscript[y, 2][0]},
{u[2], u[2] ... "LastValue", "OutputsCount",
"OutputVariables", "Path", "PathComponent", "PathComponents", "PathFunction", "PathLength",
"SamplingPeriod", "StatesCount", "TemporalData", "TimePath", "Times", "TimeSeries", "TimeValues",
"Type", "Values"}]["Dataset"]オプション (3)
MissingDataMethod (1)
ResamplingMethod (1)
diom1 = DiscreteInputOutputModel[{u[0], u[1], u[2]}, u]{diom1[1], diom1[1.5]}diom2 = DiscreteInputOutputModel[{u[0], u[1], u[2]}, u, ResamplingMethod -> {"Interpolation", InterpolationOrder -> 1}]{diom2[1], diom2[1.5]}//SimplifySamplingPeriod (1)
diom1 = DiscreteInputOutputModel[{u[0], u[1], u[2]}, u]サンプリングインスタントと時間は一致するので,"Path"と"TimePath"は同じ結果を与える:
diom1["Path"]diom1["TimePath"]"TimePath"は"TimeSeries"の"Path"からも得えられる:
diom1["TimeSeries"]["Path"]diom2 = DiscreteInputOutputModel[{u[0], u[1], u[2]}, u, SamplingPeriod -> 2]"Path"はサンプリングインスタントによるが,"TimePath"は時点の値による:
diom2["Path"]diom2["TimePath"]
diom2["TimeSeries"]["Path"]アプリケーション (3)
ker = LeastSquaresFilterKernel[{"Lowpass", 1}, 10]これをDiscreteInputOutputModelとして組み立てる:
diom = DiscreteInputOutputModel[{ker.Table[u[i], {i, -9, 0}]}, u]inp = Table[Sin[t] + Sin [15t], {t, 0, 2 π, 0.1}];
or1 = OutputResponse[diom, inp][[1]];ListStepPlot[{inp, or1}, DataRange -> {0, 2π}]ListConvolveを使っても同じ結果が得られる:
or2 = ListConvolve[ker, inp, 1, 0];
ListStepPlot[{inp, or2}, DataRange -> {0, 2π}]AllTrue[Chop[or1 - or2], # == 0.&]bfm = ButterworthFilterModel[2];
ToDiscreteTimeModel[%, 0.1]//TransferFunctionExpandこれをDiscreteInputOutputModelとして組み立てる:
diom = DiscreteInputOutputModel[{0.01 u[0] + 0.02 u[-1] + 0.01 u[-2]
+ 7.978 y[-1] - 3.72716 y[-2]} / 4.2928, u, y]inp = Sin[0.5 t] + Sin[10 t];p1 = ListStepPlot[OutputResponse[diom, Table[inp, {t, 0, 25, 0.1}]], DataRange -> {0, 25}, PlotStyle -> RGBColor[0.880722, 0.611041, 0.142051]];Legended[Show[Plot[inp, {t, 0, 25}, PlotStyle -> RGBColor[0.368417, 0.506779, 0.709798]], p1], LineLegend[{RGBColor[0.368417, 0.506779, 0.709798], RGBColor[0.880722, 0.611041, 0.142051]}, {"noisy input", "diom response"}]]アナログのTransferFunctionModel表現はほぼ同じ応答を与える:
Legended[Show[p1, Plot[OutputResponse[bfm, inp, {t, 0, 25}], {t, 0, 25},
PlotStyle -> RGBColor[0.560181, 0.691569, 0.194885]]], LineLegend[{RGBColor[0.880722, 0.611041, 0.142051], RGBColor[0.560181, 0.691569, 0.194885]}, {"diom response", "bfm response"}]]MPC設計についてフィードバックゲインモデルと閉ループ系を計算する:
ssm = StateSpaceModel[{{{0, 1.}, {-5., -4.5}}, {{0}, {1.}}, {{0., 5.}}, {{0}}},
{Subscript[x, 1], Subscript[x, 2]}, {u},
SamplingPeriod -> 1, SystemsModelLabels -> None];cost = <|"Horizon" -> 3, "StateWeight" -> IdentityMatrix[2], "InputWeight" -> {{1}}|>;cons = -2{Subscript[x, 1], Subscript[x, 2], u}2;{fgm, csys} = ModelPredictiveController[ssm, cost, cons, {"FeedbackGainsModel", "ClosedLoopSystem"}]フィードバックゲインモデルは離散入出力モデルで閉ループ系の一部である:
csys[[1]]or = OutputResponse[csys, PadRight[{0, 0.05, -0.05}, 30]];
ListStepPlot[or, PlotRange -> All]特性と関係 (4)
OutputResponse[DiscreteInputOutputModel[{Subscript[c, -1] u[-1] + Subscript[c, 1] u[0]}, u], Array[a, 5]][[1]]ListConvolveは同じ結果を与える:
ListConvolve[{Subscript[c, 1], Subscript[c, -1]}, Array[a, 5], 1, 0]% == %%Array[α, 3].Reverse[Array[y, 3, -2]] == Array[β, 3].Reverse[Array[u, 3, -2]]DiscreteInputOutputModelを使ってこれを表す:
y[0] /. Solve[%, y[0]]
diom = DiscreteInputOutputModel[%, u, y]or = OutputResponse[%, Array[γ, 4]][[1]]//SimplifyRecurrenceFilterも同じ結果を与える:
RecurrenceFilter[{Array[α, 3], Array[β, 3]}, Array[γ, 4]] == or//Simplify離散TransferFunctionModel表現のある過程:
tfm = TransferFunctionModel[MAProcess[{a, b, c}, σ^2], z]これはDiscreteInputOutputModel表現も持つ:
diom = DiscreteInputOutputModel[{{1, a, b, c}.Table[u[i], {i, 0, -3, -1}]}, u]OutputResponse[tfm, Array[r, 4]]
OutputResponse[diom, Array[r, 4]]
% == %%DiscreteInputOutputModelは入出力変数がなければ基本的にTimeSeriesである:
diom = DiscreteInputOutputModel[Range[0, 4], {}, {}]
%["Path"]同等のTimeSeriesオブジェクト:
TimeSeries[Table[{i, {i}}, {i, 0, 4}]]%["Path"]diom["TimeSeries"]%["Path"]diom["TimePath"]考えられる問題 (2)
時系列を得ることで指定がサンプリングインスタントからタイムスタンプに変わることがある:
diom = DiscreteInputOutputModel[{u[0], u[1], u[2]}, u, SamplingPeriod -> 0.1]diom[1]ts = diom["TimeSeries"]ts[1]ts[1 0.1]ts["Path"]diom["TimePath"]しかし,もとのもでるのパスはサンプリングインスタントによるものである:
diom["Path"]DiscreteInputOutputModel[{u[0] + y[-2], u[1] + y[0] + u[-1]}, {{u, {-2, -1, 1}}}, {{y, {-1, -1, -1}}}];
OutputResponse[%, Range[7]]DiscreteInputOutputModel[{u[0] + y[-2], u[1] + y[0] + u[-1]}, {{u, {-2, -1, Missing[]}}}, {{y, {-1, -1, Missing[]}}}];
OutputResponse[%, Range[7]]関連するガイド
テキスト
Wolfram Research (2022), DiscreteInputOutputModel, Wolfram言語関数, https://reference.wolfram.com/language/ref/DiscreteInputOutputModel.html.
CMS
Wolfram Language. 2022. "DiscreteInputOutputModel." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/DiscreteInputOutputModel.html.
APA
Wolfram Language. (2022). DiscreteInputOutputModel. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/DiscreteInputOutputModel.html
BibTeX
@misc{reference.wolfram_2026_discreteinputoutputmodel, author="Wolfram Research", title="{DiscreteInputOutputModel}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/DiscreteInputOutputModel.html}", note=[Accessed: 07-October-2026]}
BibLaTeX
@online{reference.wolfram_2026_discreteinputoutputmodel, organization={Wolfram Research}, title={DiscreteInputOutputModel}, year={2022}, url={https://reference.wolfram.com/language/ref/DiscreteInputOutputModel.html}, note=[Accessed: 07-October-2026]}