Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

時間遅延する入力のパデ近似

この例では、制御系理論でパデ近似を使用して、1 次の系の応答における時間遅延をモデル化する方法を示します。時間遅延は、化学処理や輸送プロセスなど、入力とシステム応答の間に遅延があるシステムで発生します。これらの入力をモデル化したものはむだ時間入力と呼ばれます。

この例では、Symbolic Math Toolbox™ を使用して一次系の伝達関数を解き、パデ近似を使用してむだ時間ステップ入力への系の応答を求めます。この例では、計算をシンボリックに実行して解析結果を取得します。

はじめに

階数が [m, n] のパデ近似は、x=x0 近傍で関数 f(x) を次のように近似します。

a0+a1(x-x0)++am(x-x0)m1+b1(x-x0)++bn(x-x0)n.

パデ近似は 2 つのべき級数の比で構成される有理関数です。これは有理関数なので、極をもつ関数を近似するうえでテイラー級数よりも正確です。パデ近似は Symbolic Math Toolbox™ の関数 pade によって表されます。

展開点 x=x0 に極または零点が存在すると、パデ近似の精度が低下します。精度を上げるために、次に示すパデ近似の代替形を使用します。

(x-x0)p(a0+a1(x-x0)++am(x-x0)m)1+b1(x-x0)++bn(x-x0)n.

入力引数 OrderModeRelative に設定すると、関数 pade はパデ近似の代替形を返します。

1 次システムの伝達関数を求める

1 次の系の動作は次の微分方程式によって表されます。

τdy(t)dt+y(t)=ax(t).

MATLAB® で微分方程式を入力します。

syms tau a x(t) y(t) xS(s) yS(s) H(s) tmp
F = tau*diff(y)+y == a*x;

laplace を使用して F のラプラス変換を求めます。

F = laplace(F,t,s)
F = laplace(y(t),t,s)-τy(0)-slaplace(y(t),t,s)=alaplace(x(t),t,s)laplace(y(t), t, s) - tau*(y(0) - s*laplace(y(t), t, s)) == a*laplace(x(t), t, s)

t = 0 のときのシステムの応答が 0 であると仮定します。subsy(0) = 0 の代わりに使用します。

F = subs(F,y(0),0)
F = laplace(y(t),t,s)+sτlaplace(y(t),t,s)=alaplace(x(t),t,s)laplace(y(t), t, s) + s*tau*laplace(y(t), t, s) == a*laplace(x(t), t, s)

simplify を使用して共通項をくくります。

F = simplify(F)
F = sτ+1laplace(y(t),t,s)=alaplace(x(t),t,s)(s*tau + 1)*laplace(y(t), t, s) == a*laplace(x(t), t, s)

見やすくするため、x(t)y(t) のラプラス変換を xS(s)yS(s) で置き換えます。

F = subs(F,[laplace(x(t),t,s) laplace(y(t),t,s)],[xS(s) yS(s)])
F = yS(s)sτ+1=axS(s)yS(s)*(s*tau + 1) == a*xS(s)

伝達関数のラプラス変換は yS(s)/xS(s) です。方程式の両辺を xS(s) で除算し、subs を使用して yS(s)/xS(s)H(s) で置き換えます。

F = F/xS(s);
F = subs(F,yS(s)/xS(s),H(s))
F = H(s)sτ+1=aH(s)*(s*tau + 1) == a

H(s) について方程式を解きます。H(s) をダミー変数で置き換え、solve を使用してダミー変数の解を求め、解を Hsol(s) に代入します。

F = subs(F,H(s),tmp);
Hsol(s) = solve(F,tmp)
Hsol(s) = 

asτ+1a/(s*tau + 1)

時間遅延を加えたステップ入力に対するシステムの応答を求める

1 次の系への入力は時間遅延を加えたステップ入力です。ステップ入力を表すには heaviside を使用します。入力を 3 時間単位遅らせます。laplace を使用してラプラス変換を求めます。

step = heaviside(t - 3);
step = laplace(step)
step = 

e-3ssexp(-3*s)/s

システムの応答、つまり伝達関数と入力の積を求めます。

y = Hsol(s)*step
y = 

ae-3sssτ+1(a*exp((-3*s)))/(s*(s*tau + 1))

応答をプロットするため、パラメーター atau に特定の値を設定します。atau には、それぞれ13 を選択します。

y = subs(y,[a tau],[1 3]);
y = ilaplace(y,s);

パデ近似を使用して系の応答を求める

入力引数 Order を pade に使用して、ステップ入力の階数 [2 2] のパデ近似を求めます。

stepPade22 = pade(step,'Order',[2 2])
stepPade22 = 

3s2-4s+22ss+1(3*s^2 - 4*s + 2)/(2*s*(s + 1))

伝達関数と入力のパデ近似を乗算して入力に対する応答を求めます。

yPade22 = Hsol(s)*stepPade22
yPade22 = 

a3s2-4s+22ssτ+1s+1(a*(3*s^2 - 4*s + 2))/(2*s*(s*tau + 1)*(s + 1))

ilaplace を使用して yPade22 の逆ラプラス変換を求めます。

yPade22 = ilaplace(yPade22,s)
yPade22 = 

a+9ae-s2τ-2-ae-sτ2τ2+4τ+3τ2τ-2a + (9*a*exp((-s)))/(sym(2)*tau - 2) - (a*exp((-s/tau))*(2*tau^sym(2) + sym(4)*tau + 3))/(tau*(sym(2)*tau - 2))

応答をプロットするため、パラメーター atau の値をそれぞれ 13 に設定します。

yPade22 = subs(yPade22,[a tau],[1 3])
yPade22 = 

9e-s4-11e-s34+1(9*exp((-s)))/4 - (11*exp((-s/3)))/4 + 1

システム y の応答とパテ近似 yPade22 から算出された応答をプロットします。

fplot(y,[0 20])
hold on
fplot(yPade22, [0 20])
grid on
title 'Padé approximant for dead-time step input'
legend('Response to dead-time step input', 'Padé approximant [2 2]',...
    'Location', 'Best');

Figure contains an axes. The axes with title Padé approximant for dead-time step input contains 2 objects of type functionline. These objects represent Response to dead-time step input, Padé approximant [2 2].

OrderMode を使用したパデ近似の精度の向上

0 の展開点に極が存在するため、[2 2] パデ近似は応答をうまく表していません。展開点に極や零があるときに pade の精度を上げるには、入力引数 OrderMode に Relative を設定し、同じ手順を繰り返します。詳細については、padeを参照してください。

stepPade22Rel = pade(step,'Order',[2 2],'OrderMode','Relative')
stepPade22Rel = 

3s2-6s+4s3s2+6s+4(3*s^2 - 6*s + 4)/(s*(3*s^2 + 6*s + 4))

yPade22Rel = Hsol(s)*stepPade22Rel
yPade22Rel = 

a3s2-6s+4ssτ+13s2+6s+4(a*(3*s^2 - 6*s + 4))/(s*(s*tau + 1)*(3*s^2 + 6*s + 4))

yPade22Rel = ilaplace(yPade22Rel);
yPade22Rel = subs(yPade22Rel,[a tau],[1 3])
yPade22Rel = 

12e-tcos(3t3)+23sin(3t3)37-19e-t37+1(12*exp((-t))*(cos((sqrt(sym(3))*t)/3) + (2*sqrt(sym(3))*sin((sqrt(sym(3))*t)/3))/3))/7 - (19*exp((-t/3)))/7 + 1

fplot(yPade22Rel, [0 20], 'DisplayName', 'Relative Padé approximant [2 2]')

Figure contains an axes. The axes with title Padé approximant for dead-time step input contains 3 objects of type functionline. These objects represent Response to dead-time step input, Padé approximant [2 2], Relative Padé approximant [2 2].

階数の増加によるパデ近似の精度の向上

階数を増やすことによりパデ近似の精度を上げることができます。階数を [4 5] に増やし、同じ手順を繰り返します。t = 0 での応答を近似する点で、[n-1 n] パデ近似は [n n] パデ近似よりも優れています。

stepPade45 = pade(step,'Order',[4 5])
stepPade45 = 

27s4-180s3+540s2-840s+560s27s4+180s3+540s2+840s+560(27*s^4 - 180*s^3 + 540*s^2 - 840*s + 560)/(s*(27*s^4 + 180*s^3 + 540*s^2 + 840*s + 560))

yPade45 = Hsol(s)*stepPade45
yPade45 = 

a27s4-180s3+540s2-840s+560ssτ+127s4+180s3+540s2+840s+560(a*(27*s^4 - 180*s^3 + 540*s^2 - 840*s + 560))/(s*(s*tau + 1)*(27*s^4 + 180*s^3 + 540*s^2 + 840*s + 560))

yPade45 = subs(yPade45,[a tau],[1 3])
yPade45 = 

27s4-180s3+540s2-840s+560s3s+127s4+180s3+540s2+840s+560(27*s^4 - 180*s^3 + 540*s^2 - 840*s + 560)/(s*(3*s + 1)*(27*s^4 + 180*s^3 + 540*s^2 + 840*s + 560))

ilaplace を使用して yPade45 の逆ラプラス変換を求めます。vpa を使用して yPade45 を数値的に近似します。パデ近似 yPade45 から計算された応答をプロットします。

yPade45 = vpa(ilaplace(yPade45));
fplot(yPade45, [0 20], 'DisplayName', 'Padé approximant [4 5]')

Figure contains an axes. The axes with title Padé approximant for dead-time step input contains 4 objects of type functionline. These objects represent Response to dead-time step input, Padé approximant [2 2], Relative Padé approximant [2 2], Padé approximant [4 5].

まとめ

以下の点を説明しました。

  • パデ近似はむだ時間ステップ入力をモデル化できる。

  • パデ近似の精度は、近似の階数の増加に合わせて向上する。

  • 展開点に極または零点が存在すると、展開点周辺ではパデ近似は不正確になる。近似の精度を上げるには、OrderMode オプションを Relative に設定する。分子に対する分母の階数を上げるという方法を使用することもできる。