【仕様書】最小構成のモデルベース開発事例 その6【離散化前編】

【仕様書】最小構成のモデルベース開発事例 その6【離散化前編】 事例

バックナンバーはこちら
https://www.simulationroom999.com/blog/model-based-of-minimum-backnumber/

はじめに

前回、位置型PID制御とその欠点、そして速度型PID制御にすることでそれらが解消されることを説明。
次にソフトウェアに適用することになるが、それには離散化が必要。
今回は離散化について説明する。

登場人物

博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

どうやって離散化するのか?

太郎くん
太郎くん

んで、

前回のPID制御を離散化するんだっけ?

フクさん
フクさん

うーん、

今回はPID制御というよりも、

PID制御のように積分や微分を持った式を、

どのように離散的な近似関数にできるか、

という話の予定。

太郎くん
太郎くん

えー、

あんまり難しい話はやめてよー。

フクさん
フクさん

大丈夫。

一言で終わる。

太郎くん
太郎くん

ほんと?!何?

フクさん
フクさん

積分や微分の連続系から離散系に変換するのは・・・。

太郎くん
太郎くん

うんうん。

フクさん
フクさん

テイラー展開を応用している!

太郎くん
太郎くん

(あかん。さっぱりわからん。)

テイラー展開の前に初歩的な話

フクさん
フクさん

まぁ、

本当に一言で終わるとは思ってないよ。

太郎くん
太郎くん

んで、

そもそもテイラー展開って何?

フクさん
フクさん

テイラー展開の前に初歩的な話をしようか。

太郎くん
太郎くん

(こいつの初歩は本当に初歩な保証がないんだよなぁ)

フクさん
フクさん

離散化の初歩として以下がある。

  • 積分は総和法で近似
    • \(\displaystyle \int f(t)dt → \displaystyle \sum f(t-1)Δt+f(t)Δt \)
  • 微分は差分法で近似
    • \(f(t)\displaystyle \frac{d}{dt} → \displaystyle \frac{Δf(t)}{Δt}\)
太郎くん
太郎くん

・・・。

フクさん
フクさん

式で書くと良く分からないと思うけど、

絵で描いてみるとどうだい?

総和法図解、Δt

総和法

差分法図解

差分法

太郎くん
太郎くん

なるほど!
誤差は出ると言えば出るけど、

それなりに近似にする時のやり方だ!
これを先に出してもらわないと!

フクさん
フクさん

この話はおおよそ数値積分とか数値微分という「手法」の話で終わることが多い。
図示できるし、感覚とも一致するので受け入れやすいし納得し易いというのが最大の理由。
これを感覚で終わらせずにちゃんと原理としてテイラー展開で証明してみる。

太郎くん
太郎くん

(いや、もう総和法と差分法ってので良いんだけど。)

原理の話(テイラー展開)

フクさん
フクさん

んで、テイラー展開とは、
とある関数\(f(x)\)をとある点\(f(x_0)\)を用いて表現すると以下が成立するよって定理。

$$f(x)=f(x_0)+f(x_0)\frac{d}{dt}(x-x_0)+\frac{1}{2!}f(x_0)\frac{d^2}{dt^2}(x-x_0)^2+\frac{1}{3!}f(x_0)\frac{d^3}{dt^3}(x-x_0)^3 …$$

太郎くん
太郎くん

この”!”はなに?

フクさん
フクさん

階乗だね。
$$2!=1×2=2$$
$$3!=1×2×3=6$$
$$4!=1×2×3×4=24$$
という感じになる。

太郎くん
太郎くん

最後”…”があるってことは、これが無限に続くって感じ?

フクさん
フクさん

そうそう。

まぁ本当に無限に計算はしないから、

心配しなくても良いよ。

太郎くん
太郎くん

(こいつの「心配しなくて良い」は信用できん。)

テイラー展開の表現変更

フクさん
フクさん

とはいえ、

このままだとちょっと使い勝手が悪いので

式を若干変形する。

太郎くん
太郎くん

(もう何が使い勝手悪いのかすらわからん)

フクさん
フクさん

入力を変数\(x\)から時間\(t\)に置き換え、さらに\(t\)の定義を以下とする。
$$t=t_0+Δt$$

フクさん
フクさん

そして、

これをテイラーの定理式に入れ込む
$$f(t)=f(t_0+Δt)$$
$$=f(t_0)+f(t_0)\frac{d}{dt}Δt+\frac{1}{2!}f(t_0)\frac{d^2}{dt^2}Δt^2+\frac{1}{3!}f(t_0)\frac{d^3}{dt^3}Δt^3$$

太郎くん
太郎くん

あれ?

ちょっとシンプルになった?

フクさん
フクさん

うん。

\(f(t)=f(t_0+Δt)\)がかなり強い制約になるんで、

シンプルになるんだ。

太郎くん
太郎くん

んー。
すべてを理解したわけじゃないが、

何となく方向性が分かってきた気がする!

太郎くん
太郎くん

テイラー展開自体は、

何にでも対応できる式なんだけど、
今回の自分たちが使う範囲がそこそこ決まっているので、
前提条件を付加することで式がシンプル化して使いやすくしたって感じだね?

フクさん
フクさん

そうそう。

そのイメージ。
数式は単なるツールなんで、

それを自分の置かれた環境に合わせて前提条件を置いて単純化する。
というのが基本的なアプローチにある。

太郎くん
太郎くん

ちょっと食わず嫌いしてた感はあるなー。
といっても、

理解できたわけじゃないんだけど。

フクさん
フクさん

理解は追々でいいと思うよ。
実際、原理の話は「こういうのもあるんだ」程度で良くて、
最終的には総和法、差分法しか使わないってパターンが多いし。

太郎くん
太郎くん

あ、それそれ!
総和法、差分法だけじゃだめなの?

フクさん
フクさん

まぁ、
現実的には問題にはならないとは思うけど、
精度を引き上げたいとかの別の課題が出てくると詰むかな。

太郎くん
太郎くん

それでも、

まずは総和法、差分法だけでいいと思うんだけどなぁ。

フクさん
フクさん

「まずは」総和法、差分法で良いだろう。
この次はどうする?
そして最終的にはどうなってると良いと思う?

太郎くん
太郎くん

えー、いや、「まずは」なんでー。

フクさん
フクさん

何事も「まずは」で止まってはしまうことは問題ありかな。
「次は」「最終的には」も語れて、初めて「まずは」って話ができるんだ。
そうじゃないと、「まずは」が正しい方に向かってるかが分からなくなってしまう。

太郎くん
太郎くん

うーん、

言いたいことは分かるよ。
目的がハッキリしない行動は評価できないもんね。
「まずは総和法、差分法」「次にテイラー展開」「最終的には離散化の習得」というイメージが大切ってことだよね。

フクさん
フクさん

「まずは初歩」

「次に原理」

「最終的に基礎」

と言い換えても良いね。

太郎くん
太郎くん

なるほど。
それで最初に「初歩的な話」って言い方をしていたんだね?
確かに「初歩」と「基礎」は別物だなぁ。

フクさん
フクさん

そういうこと。

太郎くん
太郎くん

ちょっと、

一旦自分で今回の話を整理したいんで続き次回で良いかな?

フクさん
フクさん

うん。

私もそのつもりでいた。

太郎くん
太郎くん

じゃー次回ー。

まとめ

フクさん
フクさん

まとめだよ。

  • 離散化はテイラー展開を応用して実現している。
    • テイラー展開に\(f(t)=f(t_0+Δt)\)の制約を掛けると式が単純化される。
  • 総和法、差分法は初歩、テイラー展開は原理、そのあとに離散化の基礎。
    • 初歩の後に原理、原理の後に基礎を押さえておくと良い。

バックナンバーはこちら

コメント

タイトルとURLをコピーしました