kawazu_gkgkのブログ

井の中の蛙が勉強して得たことを記録する.

繰り返し折りによる60度への漸近と差分方程式のz変換

離散システムと繰り返し折りによる30度の作成

ディジタル制御を勉強するため「基礎ディジタル制御」を買った.
とりあえずパラ見した中で漸化式をz変換->逆z変換して差分方程式の解を得る方法がわかりやすく書いてあり,丁度折り紙において帯状の紙をあるアルゴリズムで繰り返し折ると60度の角度が現れる現象が漸化式で表されるの思い出したので,それを練習がてらz変換・逆z変換してみようという試み.

繰り返し折りと差分方程式

紙の折り方は下図のとおり,初めに1)の谷折り線を任意の角度で折り,次に2)のように先ほどの谷折り線と紙の縁のなす角を二等分するように山折りする. 更に2)と同様の要領で3), 4),・・・と繰り返し折っていくと縁と折り目のなす角が60度に近づいていく.

f:id:kawazu_gkgk:20200919113908p:plain:w300

ここで,下図のように1)で与えた角度を\theta[0],その後の2), 3),・・・で折る折り線と縁のなす角をそれぞれ\theta[1], \theta[2], \cdotsと置く.

f:id:kawazu_gkgk:20200919133125p:plain:w300

このとき\theta[1], \theta[2], \cdotsはそれぞれ,

 \begin{align}
  \theta[1] &= \frac{\pi - \theta[0]}{2} = -\frac{1}{2}\theta[0] +\frac{\pi}{2}  \\
  \theta[2] &= -\frac{1}{2}\theta[1] +\frac{\pi}{2} \\
  \vdots
\end{align}

となるので,1)で与える角度を\theta _ 0とすれば差分方程式は次のように表せる.

 \begin{align}
  \theta[i+1] &= -\frac{1}{2}\theta[i] +\frac{\pi}{2}  \\
  \theta[0] &= \theta _ 0, i = 0,1,2,\cdots
\end{align}

なお,ここでの角度表記はラジアンとする.

z変換・逆z変換による差分方程式の解導出

導出された差分方程式の両辺をz変換すると次のようになる.

 \begin{align}
  \mathcal{Z}\left[\theta[i+1]\right] &= z\Theta[z] -z\theta _ 0  \\
  \mathcal{Z}\left[-\frac{1}{2}\theta[i] +\frac{\pi}{2}\right] &= -\frac{1}{2}\Theta[z] +\frac{\pi}{2}\frac{z}{z-1}
\end{align}

したがって,\theta[i]z変換\Theta[z]は,

 \begin{align}
  \Theta[z] = \frac{\pi}{2}\frac{z}{(z-1)(z+\frac{1}{2})} +\frac{z}{z+\frac{1}{2}}\theta _ 0
\end{align}

となる.これを逆z変換のためにヘビサイドの方法で部分分数分解すると

 \begin{align}
  \frac{\pi}{2}\frac{z}{(z-1)(z+\frac{1}{2})} +\frac{z}{z+\frac{1}{2}}\theta _ 0 = \frac{\pi}{3}\left(\frac{1}{z-1} +\frac{1}{z+\frac{1}{2}}\right) +\frac{z}{z+\frac{1}{2}}\theta _ 0
\end{align}

となるが,下表に記す主要なz変換のとおり変換できる形ではない.

x[i] X[z]
\begin{align}
        \left\{\begin{matrix}
          1(i = k)  \\
          0(i\neq k)  \\
        \end{matrix}\right.
      \end{align} z ^ {-k}
a ^ i \frac{z}{z-a}
1 \frac{z}{z-1}

そこで,\Theta[z]をまずzで割ってからヘビサイドの方法で部分分数分解を行う.

 \begin{align}
  \Theta[z]z ^ {-1} &= \frac{\pi}{2}\frac{1}{(z-1)(z+\frac{1}{2})} +\frac{1}{z+\frac{1}{2}}\theta _ 0  \\
  &= \frac{\pi}{3}\left(\frac{1}{z-1} -\frac{1}{z+\frac{1}{2}}\right) +\frac{1}{z+\frac{1}{2}}\theta _ 0
\end{align}

その後zでかけると,

 \begin{align}
  \Theta[z] = \frac{\pi}{3}\left(\frac{z}{z-1} -\frac{z}{z+\frac{1}{2}}\right) +\frac{z}{z+\frac{1}{2}}\theta _ 0
\end{align}

となり,変換表にある形になる.
変換表より逆z変換は,

 \begin{align}
  \theta[i] = \frac{\pi}{3} + \left(\theta _ 0 - \frac{\pi}{3}\right)\left(-\frac{1}{2}\right) ^ i
\end{align}

となる.
右辺第二項は最初に与えた角度と60度との誤差によって生じる項であり,iの増加,つまり繰り返し折りの工程毎に半減する. 最終的にこの項がゼロに漸近することで,角度\theta[i]は60度になることがわかる.
誤差は5回折れば1/32,6回も折れば1/64となり,例えば初期角度を90度から始めたとしても6回目で誤差は0.5度と収束角度60度に対して1%以下となる.

また,繰り返し折りの途中で正確に折ることができず角度のズレが生じたとしても,差分方程式より次の折りでそのズレも半減される.

以上よりこの繰り返し折りにはネガティブフィードバック構造があるのだが,折る工程を見ても算な感じが全くしないのはとても興味深いところである.

参考文献

美多勉,原辰次,近藤良 : 大学講義シリーズ 基礎ディジタル制御,コロナ社(1988)