ロボット屋の記録

ロボティクスに関する雑多な学びの記録

ベクトルを(少し)噛み砕いてみる

本記事の目的

ベクトルは高校で習うほど基本的で重要な概念であり,ロボティクス分野でも至る所で活躍します.
実はベクトルは非常に奥が深いものです.
その奥深さはロボティクスの文脈でも割と頻繁に顔を出してきますが,多くの場合,丁寧な説明はなく,さも当然のようにその奥深さを利用して話が展開していきます.

本記事では,こういった話をスムーズに理解するための準備として,ベクトルについて噛み砕いてみることにします.
ただし,本記事初稿からベクトルの奥深さの全てを説明するのは難しいので,ある程度の完成度で初稿を完了し,随時追記していく方針を取ることにします.
また,文章量の都合から,本記事に記載するのは基本的なことのみとします.
より発展的な内容について書くときには記事を分け,リンクを貼りますので,適宜たどってください.

タイトルから「(少し)」が消えたら,この記事は完成かな・・・.

想定する読者

  • ベクトルの基礎を再確認したくなった未来の私

関連する記事

本記事の前半でベクトル空間について書きますが,この内容は本記事の初稿作成時点で投稿済みの以下の記事でも書いています.
話の流れを考慮してどちらの記事にも載せることにしましたが,既に読んでいる場合には読み飛ばしてください.

tenorea.hatenablog.com

目次

1. ベクトル空間

1.1. ベクトル空間の定義

ベクトルと聞いて,まず思い浮かぶのはなんでしょうか?
空間中にある方向を持った矢印や,数の組がまず浮かぶのではないかと思います.
しかし実は,これらはベクトルと呼ばれるもののうちの,ごく一部です.

ではどういったものをベクトルと呼ぶのでしょうか?
これは数学的にきっちり定義されていますが,一つ重要な注意点があります.

それは,ベクトルは要素単体だけでは定義されず,その要素が従う演算規則が指定されてはじめて定義されるということです.

演算を行うためには少なくとも2つ以上の要素からなる何かしらの集合が必要になります.
したがって,ベクトルを定義するためには,まずそのベクトルが属する集合を定義しなければなりません.
そしてこの集合を,「ベクトル空間」といいます.

ベクトルは「ベクトル空間の元」として定義されるということです.

それでは,ベクトル空間の定義をみていきましょう.
先に述べたように,ベクトル空間を定義するには演算規則を指定する必要があります.
そのため,ポンと言葉を述べるだけでは足りず,やや長い記述になります.

定義 1 ベクトル空間(線形空間
ある集合Xがあり,その上に次の2つの条件を満たす演算が与えられているとき,Xとそれら2つの演算をあわせて,ベクトル空間という.

  1. 集合Xの任意の元x, yに対して,和と呼ばれる集合Xの新しい元が常に定まり,次の条件を満たす.なお,和をx+yと書く.つまり,x+y\in Xである.
    • \forall x,y,z \in Xに対し,(x+y)+z = x+(y+z)が成り立つ.
    • \forall x,y \in Xに対し,x+y = y+xが成り立つ.
    • 零ベクトルと呼ばれる元0\in Xがただ1つ存在し,\forall x\in Xに対してx+0=xが成り立つ.
    • \forall x\in Xに対してx'\in Xが存在してx+x'=0が成り立つ.このx'を逆元と呼び,-xと書く.なお,x+(-x)x-xと書ける.

  2. 集合Xの任意の元xと実数\mathbb{R}の任意の元aに対し,xaの積(もしくはxa倍)と呼ばれる集合Xの新しい元ax\in Xが常に定まり,次の条件を満たす.
    • \forall x\in X\forall a,b\in \mathbb{R}に対し,(a+b)x = ax + bxが成り立つ.
    • \forall x,y\in X\forall a\in \mathbb{R}に対し,a(x+y)=ax+ayが成り立つ.
    • \forall x\in X\forall a,b\in \mathbb{R}に対し,(ab)x=a(bx)が成り立つ.
    • \forall x\in Xに対し,1x = xが成り立つ.

なお,上の定義中では\forallという記号を用いました.これは「任意」という意味の記号で,\forall x\in Xは「集合Xの任意の元x」と同じことを意味します.
「任意の元x」という表現も聞き馴染がない場合,ピンとこないかもしれません.
これは集合Xのどんな元でもいいですよー,何の制限もないですよー,というニュアンスです.
結局,集合Xの全ての元に共通する性質を述べていることになります.

上の定義で,積の演算には実数\mathbb{R}の元を用いました.実は実数以外に複素数\mathbb{C}などの元でも同じように定義することができます.
実数\mathbb{R}の元や複素数\mathbb{C}の元などを総称してスカラーと呼ばれるため,定義でaxと書いた演算にはスカラー倍」という名前がついています.
ちなみに,この場合の実数\mathbb{R}複素数\mathbb{C}の集合を総称して,と呼びます.
体についてちゃんと書こうとすると長くなりそうなので,ここでは名前だけを紹介します. これ以降,実数\mathbb{R}でも複素数\mathbb{C}でも,どっちでも良い場合には,体\mathbb{K}と書くことにします.

なお,スカラーが実数\mathbb{R}である場合のベクトル空間を「実数\mathbb{R}上のベクトル空間」といい,「実ベクトル空間(実線形空間)」と呼称されます.
同様にスカラー複素数\mathbb{C}である場合には「複素ベクトル空間(複素線形空間)」という名前がつけられています.

この呼称を見ると,「ベクトル」は「線形であるもの」ということが分かります.
線形性は非常に重要な性質です.
したがって,考える対象がベクトルであるか否かを調べることはとても大事です.

ここで,定義 1には本節の最初に述べた矢印や数の組のような話は一切でてきていないことに注意してください.
定義 1を満たすものは全て「ベクトル」であり,その中の一例として上の2つがあったのです.

ベクトルのイメージを掴むために,いくつかの例を見てみましょう

1.2. ベクトル空間の例

1.2.1. n次元数ベクトル空間\mathbb{R}^n

これは既に例示した数の組のことで,代表的なベクトル空間です.
この空間は以下のように定義されます.

\displaystyle{
\mathbb{R}^n := \left\{ x = \left[ 
  \begin{array}{c}
  x_1 \\
  x_2 \\
  \vdots \\
  x_n
  \end{array}
   \right]
   : x_i \in \mathbb{R}, i=1,\cdots,n
   \right\}.
}

この空間に対し,スカラーを次のように定義します.

\displaystyle{
\begin{align}
\left[
\begin{array}{c}
  x_1 \\
  x_2 \\
  \vdots \\
  x_n
  \end{array}
   \right]
   +
   \left[
   \begin{array}{c}
  y_1 \\
  y_2 \\
  \vdots \\
  y_n
  \end{array}
   \right]
   &:=
   \left[
   \begin{array}{c}
  x_1+y_1 \\
  x_2+y_2 \\
  \vdots \\
  x_n+x_n
  \end{array}
   \right],\\
\quad\\
a\left[
\begin{array}{c}
  x_1 \\
  x_2 \\
  \vdots \\
  x_n
  \end{array}
   \right]
   &:=
   \left[
   \begin{array}{c}
  ax_1 \\
  ax_2 \\
  \vdots \\
  ax_n
  \end{array}
   \right].
\end{align}
}

このようにすると,この空間\mathbb{R}^n定義 1の条件を全て満たしますので,ベクトル空間となります.

1.2.2. 実数値(複素数値)関数空間

ある区間,例えば[0, \infty)上に定義された実数値(複素数値でもいい)関数の全体である空間も,ベクトル空間として定義することができます.
ここで,関数の空間という概念に違和感を感じるかもしれません.
上で述べた条件に当てはまる関数は数多くありますが,ここで指している空間はそのようなたくさんある関数を集めた集合です.
したがって,元は関数となります.
実数値関数空間を例として数学的に表現すると,次のように書けます.

\displaystyle{
\mathcal{F}[0, \infty) := \left\{ f:[0,\infty) \rightarrow \mathbb{R} \right\}.
}

この空間に対して,次のようにスカラーを定義します.
なお,f,g\mathcal{F}の任意の元とします.また,ここでは便宜上,f,gt\in[0,\infty)の関数としています.

\displaystyle{
\begin{align}
(f+g)(t) &:= f(t) + g(t),\\
(af)(t) &:= af(t).
\end{align}
}

このようにすると,やはり定義 1の条件を全て満たしますので,\mathcal{F}もベクトル空間となります.

2. ベクトルの次元

ベクトルがどんなものか分かってきたところで,次はあるベクトルが「どんなベクトル」かを考えてみたいと思います.
どんなベクトルかを考える際に非常に重要になるのが,「ベクトルの次元」です.

次元については色々な解釈の仕方がありますが,ここでは「あるベクトルを表現しようとしたとき,どのくらいの情報量が必要か?」を示す指標だと考えてもらうと理解しやすいと思います.

さてここで,「表現する」とはどういうことでしょう?
今の文脈では,「あるものを他のものと区別して示す」という意味で使っています.
したがってベクトルの次元を考える上では,あるものと区別する他のものを意識する必要があります.

それでは何と区別するのか?
これは自然に考えて,同じベクトル空間に属する他のベクトル(つまり他の元)となるでしょう.
もし他の空間の元と区別したければ,属する空間を明記すれば済みます.

したがって,「あるベクトルの次元」は「あるベクトル空間内の全てのベクトルを区別して表現するための情報量」と解釈することができます.

これはベクトルの次元が,そのベクトルが属するベクトル空間の特性であることを意味しています.

2.1. 線形従属と線形独立

それではベクトル空間内の全てのベクトルを表現する方法について考えていきましょう.
ここで,ベクトル空間の定義から,ベクトルは他のベクトルの和やスカラー倍で表現できることに注目します.

もし,このことを利用してある限られたベクトルの和とスカラー倍だけで全てのベクトルを表現できるとすれば,その限られたベクトルをそれぞれどれだけスカラー倍するかさえ分かれば,任意のベクトルを表現することができます.

この限られたベクトルの数をnとし,これらをx_{j} (j=1,2,\cdots , n),いま表現したいベクトルをxとすると,上のことは次の式で表せます.

\displaystyle{
x = \sum_{j=1}^{n}\alpha_{j}x_{j}. \label{eq:linear_combination}\tag{1}
}

ここで,\alpha_{j}\in\mathbb{K}スカラーです.

極端な例として,限られたベクトルに含まれているx_{1}を表現するときも,\alpha_1=1, \alpha_2 = \alpha_3 = \cdots = \alpha_n = 0とすれば問題ありません.

このようにして表現したあるベクトルを「線形結合」と呼びます.

さて,今知りたいのは,あるベクトル空間Xの任意の元x\in{X}を線形結合で表すために必要なベクトルは何なのか,ということです.
これを考えるためには,まず必要以上のベクトルを含むm個のベクトルの組x_1, x_2, \cdots, x_mを考えると理解しやすいと思います.

必要以上のベクトルを含むということは,m個のベクトルのうちのいくつかは,他のベクトルで表現できてしまう,ということです.
このように表現できてしまうベクトルの一つを仮にx_iとすると,次のように書けます.

\displaystyle{
x_i = \sum_{j\neq i}\alpha_{j}x_{j}. \label{eq:2}\tag{2}
}

ここで右辺はj=i以外の全ての総和を意味しています.

このようにベクトルの組の中に他のベクトルの線形結合で表現できるものが含まれている時,「そのベクトルの組は「線形従属」である」と言います.

このことをしっかりと定義として書き直しておきましょう.

定義 2 線形従属
Xをある体\mathbb{K}上のベクトル空間として,x_1, x_2, \cdots, x_nを全てXの元とする. このとき,全てが0でないスカラー\alpha_1, \alpha_2, \cdots, \alpha_n \in\mathbb{K}を用いて
\displaystyle{
\sum_{i=1}^n \alpha_i x_i = 0
}
を成立させられるとき,ベクトルの組x_1, x_2, \cdots, x_nは線形従属であるという.

ここでは\alpha_1, \alpha_2, \cdots, \alpha_n \in\mathbb{K}の全てが0でないことだけを言及していることに注意してください. つまり,一つでも0でないものがあれば,他の全てが0であっても上のスカラーの条件を満たします.

先ほどの式\eqref{eq:2}の場合,次のように変形すると分かりやすいです.

\displaystyle{
\sum_{j\neq i}\alpha_{j}x_{j} - x_i = 0.
}

この式は\alpha_i=-1であっても,線形結合が0となり得ることを意味しています.
したがってこのベクトルの組は線形従属であることを改めて確認できます.

さて,必要以上のベクトルを含む場合について整理されてきました.
ここから,不要なベクトルが一切ない場合を定義することができます.

定義 3 線形独立
線形従属でない場合を線形独立という.
つまり,x_1, x_2, \cdots, x_nが線形独立であるための必要十分条件
\displaystyle{
\sum_{i=1}^n \alpha_i x_i = 0 \Rightarrow \alpha_i = 0, i = 1, 2, \cdots , n
}
である.

ちなみに,右から左への矢印は成立しません.
全ての係数が0であればその線形結合が0となるのは,あらゆるベクトルの組に言えることです.

2.2. 基底と次元

ベクトルの次元に関する話もいよいよ大詰めとなってきました.
定義 3で定められた線形独立というのは,あるベクトルの組の中に,その組に含まれる他のベクトルで表現できるような不要なベクトルが存在しない状態です.
この概念は,ベクトル空間の任意のベクトルを表現する必要最小限のベクトルを考える際に役立ちます.

足りないのは,「任意のベクトルを表現できる」という点です.

このことを考慮し,ベクトル空間内の任意のベクトルを表現する必要最小限のベクトルの組として定められるのが,次の定義に示す「基底」です.

定義 4 基底
Xを体\mathbb{K}上のベクトル空間とし,Xのベクトルで構成された組\{v_1, v_2, \cdots , v_n\}が次の条件をどちらも満たすとき,そのベクトルの組をXの基底という.
  1. \{v_1, v_2, \cdots , v_n\}が線形独立である
  2. \{v_1, v_2, \cdots , v_n\}にどのようなベクトルを付け加えても線形従属になる

言われてみれば,それはそうだろう,という感じの定義ですね.
線形従属であればそのベクトルの組の中に他のベクトルの線形結合で表せるベクトルがあるわけですが,あるベクトルが追加される前のベクトルの組{v_1, v_2, \cdots , v_n}が線形独立であるため,その表せるベクトルは追加されたベクトルであると分かります.
そしてどんなベクトルを追加しても線形従属となるので,どんなベクトルでも{v_1, v_2, \cdots , v_n}の線形結合で表現できるということになります.
定義 3で登場したベクトル空間Xについていえば,あるベクトルx\in{X}は基底{v_1, v_2, \cdots , v_n}とそのベクトルxに固有のスカラーの組み合わせ\alpha_1, \alpha_2, \cdots , \alpha_nという情報で特定できることなります.

このことから,ずっと追い求めてきたベクトルの次元は以下のように定義されます.

定義 5 次元
ベクトル空間Xの基底が\{v_1, v_2, \cdots , v_n\}であるとする.
このとき,Xn次元ベクトル空間といい,その次元を
\displaystyle{
\mathrm{dim}~X = n
}
と表す.

3. まとめ

本記事ではベクトルについての理解を深めるため,ベクトル空間の数学的定義からベクトルの次元までを噛み砕いてみました.
ベクトルというものが実は非常に抽象的なものであり,広く様々なものに応用可能な概念であることが分かりました.

ベクトルに関連する項目を挙げればキリがないのですが,それらを理解する上でも欠かせないものとして以上のものをまとめました.
ここで取り上げていない項目については,個別に記事を作成していこうと思います.

4. 参考文献

  • 山本裕『システムと制御の数学』朝倉書店,1998

【古典制御】ラプラス変換の前にフーリエ級数展開を噛み砕いてみる

本記事の目的

制御工学を学ぶ際,特に理由がなければ古典制御から手を付けると思います.
導入として,制御とは何なのか,実際にどんな役に立っているのか,などを知り,ワクワクして本番へと進みます.
そして,ラプラス変換と対峙します.

多くの場合,このラプラス変換天下り的に変換式を与えられ,それ自体にはあまり触れずに,その使い方や威力を教えられます.
私は,初めて制御工学を学んだ時,この最初のステップで制御工学への興味を失いました.正確に言うと,興味を失った原因の基を辿ると,ここだったと思います.

ラプラス変換を使うと色々ないいことがあるというのは分かるのですが,ラプラス変換の得体が知れないので,結局何をやっているのか,確かな感触を感じて理解できなかったのです.

もしラプラス変換ともう少し仲良くなれていたら,その後の学習内容もよりよく理解できたかも・・・.

そこで,少しでもラプラス変換と仲良くなることを目指し,噛み砕いてみることにしました.
しかし調べてみると,ラプラス変換の説明というのは一筋縄ではいかないもののようです. 一つの記事にまとめると長くなりすぎそうなので,記事を複数に分け,順を追って理解を深めることにしました.

その第1弾として,本記事ではラプラス変換とよく似た変換でありながら,物理的な意味を理解しやすいフーリエ変換・・・を理解するために,その前身とも言えるフーリエ級数展開について整理します.

この記事だけでラプラス変換について何の情報も得られませんが,後の記事での説明をグッと理解しやすくするはずです.

記事を複数に分けたにも関わらず,かなりの長文となってしまいました.
長文になった原因は関連する用語の解説を入れたことですが,私としてはこれらの用語も合わせて整理した方が理解しやすいと思いますので,記事をさらに細分化することはせず,このままにすることにしました.
読んでくださる方にとっては大変かもしれませんが,どうぞお付き合いください.

想定する読者

  • 三角関数の存在くらいしか覚えていない将来の自分

目次

1. フーリエ級数展開の概要

フーリエ級数展開とは,『周期的な信号(関数)を三角関数の組み合わせで表現できるとしたら,どのような形になるか?』を考えた末に行きついた展開方法です.

三角関数は周期的な関数の代表と言っていい有名な関数であり,数多くの便利な特性を持つことが分かっています.
もし「正体はよく分からないけどとにかく周期的な関数」を三角関数で表現することができれば,その対象の関数を三角関数の特性を利用して調べることができます.

それでは,フーリエ級数展開の式を見てみましょう.

\displaystyle{
f(t) = a_0 + \sum_{k=1}^{\infty}\left\{ a_k\cos\left( \frac{2\pi k}{T_0}t \right) + b_k \sin\left( \frac{2\pi k}{T_0}t \right) \right\}. \label{eq:1}\tag{1}
}

ここで,f(t)は対象とする周期的な関数,a_0は直流成分の係数, a_k, b_kは各三角関数の振幅(係数),k自然数(0を除く)です.

三角関数で表現する,と言った割に,早速そうでないa_0があることに違和感を感じるかもしれませんが,これを周波数0の余弦波(\cos0=1)の振幅としてみると,一貫性を感じられると思います.

式\eqref{eq:1}の\left(\frac{2\pi k}{T_0}t \right)についておさらいします. k=1のとき,この三角関数の周波数は1/T_0となります.同じ意味ですが,角周波数が2\pi/T_0であるとも言えます.
このことは,この三角関数が時間T_0で1周するような周期性を持っていることを意味しています.

また,k=2の場合は周波数,角周波数が共に2倍になります.
このことは,時間T_0で2周することを意味します.

今,k自然数,つまりk\in\mathbb{N}としているので,式\eqref{eq:1}の右辺第2項は,T_0でちょうどk周する三角関数の総和となっていることになります.

三角関数としては,k自然数でなく,任意の実数であっても問題ありません.
しかしここでは自然数の場合のみを扱います.
これは,対象とする関数が周期的であり,その周期T_0があらかじめ分かっていることに起因します.
つまり,『周期T_0を表現するための周期的な関数(=三角関数)も,同じようにT_0で周期的であろう』,ということです.

さて,このように三角関数の角周波数について決めることができましたので,後はそれぞれの振幅である式\eqref{eq:1}内のa_0, a_k, b_kを決めれば良いことになります.

フーリエ級数展開における各振幅を,フーリエ係数」といいます.

このフーリエ係数を求めることが,フーリエ級数展開を実行する際の実質的な目標になります.

2. フーリエ係数を求める

2.1. 右辺第1項の係数(直流成分)を求める

最初に直流成分a_0を求めてみましょう.
実はこれは非常に簡単です.

答えを言ってしまうと,対象とする関数f(t)を1周期分,例えば0を中心にして-\frac{T_0}{2}\sim \frac{T_0}{2}積分してしまえば,a_0を求めることができます.

実際にやってみましょう.
式\eqref{eq:1}の両辺をこの区間積分すると,以下の式のように表せます.

\displaystyle{
\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} f(t) \mathrm{d}t = \int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} \left\{ a_0 + \sum_{k=1}^{\infty}\left\{ a_k\cos\left( \frac{2\pi k}{T_0}t \right) + b_k \sin\left( \frac{2\pi k}{T_0}t \right) \right\} \right\} \mathrm{d}t.
}

ここで,右辺の積分と総和を入れ替えます1

\displaystyle{
  \begin{align}
\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} f(t) \mathrm{d}t
 &= \int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}a_0 \mathrm{d}t\\
 &\quad + \sum_{k=1}^{\infty}\left\{\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} a_k\cos\left( \frac{2\pi k}{T_0}t \right) \mathrm{d}t
 + \int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}b_k \sin\left( \frac{2\pi k}{T_0}t \right)\mathrm{d}t \right\}. \label{eq:2}\tag{2}
  \end{align}
}

ここで,次の関係を利用します.

\displaystyle{
\begin{align}
\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} \cos\left( \frac{2\pi k}{T_0}t \right) \mathrm{d}t &= \left[ \frac{T_0}{2\pi k}\sin\left( \frac{2\pi k}{T_0}t \right) \right]_{-\frac{T_0}{2}}^{\frac{T_0}{2}} = 0,\\
\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} \sin\left( \frac{2\pi k}{T_0}t \right) \mathrm{d}t &= \left[ -\frac{T_0}{2\pi k}\cos\left( \frac{2\pi k}{T_0}t \right) \right]_{-\frac{T_0}{2}}^{\frac{T_0}{2}} = 0.
\end{align}
}

これにより,結局式\eqref{eq:2}の右辺はa_0の項だけが残るので,

\displaystyle{
\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} f(t) \mathrm{d}t = \int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} a_0\mathrm{d}t = a_0T_0
}

となります.これをa_0について解くことで,

\displaystyle{
a_0 = \frac{1}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} f(t) \mathrm{d}t
}

と求まります.

2.2. 右辺第2項以降の係数を求める

2.2.1. 三角関数積分に関する面白い性質(直交性)

前節のa_0を求める計算では,三角関数を1周期分積分すると,その周波数に依らず常に0となることを利用しました.
a_k, b_kを求める際もこれと同様の発想を用いたいのですが,そのためにはちょっと工夫が要ります.
この工夫の際,次の特性が非常に役立ちます.

\displaystyle{
\int_{-\pi}^{\pi} \cos(mt)\cos(nt) \mathrm{d}t = 
\begin{cases}
\pi & (m=n)\\
0 & (m \neq n)
\end{cases}.
}

本質的には同じですが,今回は式\eqref{eq:1}に合わせて次のように変え,利用します.

\displaystyle{
\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} \cos\left( \frac{2\pi}{T_0} mt \right)\cos\left(\frac{2\pi}{T_0}nt \right) \mathrm{d}t = \frac{T_0}{2}\delta_{m,n}. \label{eq:3}\tag{3}
}

ここで,

\displaystyle{
\delta_{m,n} := 
\begin{cases}
1 & (m = n)\\
0 & (m \neq n)
\end{cases}
}

という記号を用いました.
この記号はクロネッカーのデルタ」と呼ばれます.
式\eqref{eq:3}のように場合分けの表記を簡略化するのに便利なため,よく用いられます.

式\eqref{eq:3}が実際に成立することを確認してみましょう.
確認では式\eqref{eq:3}の左辺を計算し,右辺に一致するか調べるわけですが,左辺の積分を簡単に行うために三角関数の加法定理を用います.
加法定理のことは忘れないと思いますが,具体的な式はよく忘れてしまうので,以下に最低限のものを記します.

\displaystyle{
\begin{align}
\sin(\alpha + \beta) &= \sin\alpha\cos\beta + \cos\alpha\sin\beta, \\
\cos(\alpha + \beta) &= \cos\alpha\cos\beta - \sin\alpha\sin\beta.
\end{align}
}

それでは式\eqref{eq:3}の左辺を計算してみます.

\displaystyle{
\begin{align}
\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} &\cos\left( \frac{2\pi}{T_0} mt \right)\cos\left( \frac{2\pi}{T_0}nt \right) \mathrm{d}t\\ 
&= \int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} \frac{1}{2}\left\{ \cos\left( \frac{2\pi}{T_0}(m-n)t \right) + \cos\left( \frac{2\pi}{T_0}(m+n)t\right) \right\}dt\\
&= \frac{1}{2}\left\{ \left[ \frac{\sin\left( \frac{2\pi}{T_0}(m-n)t \right)}{ (m-n)\frac{2\pi}{T_0}} \right]_{-\frac{T_0}{2}}^{\frac{T_0}{2}}
 + \left[ \frac{\sin\left( \frac{2\pi}{T_0}(m+n)t \right)}{ (m+n)\frac{2\pi}{T_0}} \right]_{-\frac{T_0}{2}}^{\frac{T_0}{2}} \right\}\\
&= \frac{1}{2} \left\{ \frac{ 2\sin(m-n)\pi }{(m-n)\frac{2\pi}{T_0}}
 + \frac{ 2\sin(m+n)\pi }{(m+n)\frac{2\pi}{T_0}} \right\}\\
&= \frac{T_0}{2} \left\{ \frac{ \sin(m-n)\pi }{(m-n)\pi}
 + \frac{ \sin(m+n)\pi }{(m+n)\pi} \right\}. \label{eq:4}\tag{4}
\end{align}
}

3行目から4行目では,\sin(-x)=-\sin xを用いています.
式\eqref{eq:4}の最終的な右辺の第2項を見ると,m, n\in\mathbb{N}であることから(m+n)\in\mathbb{N}ですので,常に0となることが分かります.
一方で第1項は,m=nとなる際に分母が0となりますので,場合分けして考える必要があります.
分母が0になる際には,以下の特性を利用します.

\displaystyle{
\lim_{x \rightarrow 0}\frac{\sin x}{x} = 1.
}

したがって, m\neq nの場合,

\displaystyle{
\frac{T_0}{2} \left\{ \frac{ \sin(m-n)\pi }{(m-n)\pi}
 + \frac{ \sin(m+n)\pi }{(m+n)\pi} \right\} = 0
}

であり, m=nの場合,

\displaystyle{
\frac{T_0}{2} \left\{ \frac{ \sin(m-n)\pi }{(m-n)\pi}
 + \frac{ \sin(m+n)\pi }{(m+n)\pi} \right\} = \frac{T_0}{2}
}

となることが分かります.

以上をまとめることで,式\eqref{eq:3}を得ることが出来ました.

これと同様にして,以下の関係も導くことができます.

\displaystyle{
\begin{align}
\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} \sin\left( \frac{2\pi}{T_0} mt \right)\sin\left(\frac{2\pi}{T_0}nt \right) \mathrm{d}t &= \frac{T_0}{2}\delta_{m,n},\label{eq:5}\tag{5}\\
\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} \sin\left( \frac{2\pi}{T_0} mt \right)\cos\left(\frac{2\pi}{T_0}nt \right) \mathrm{d}t &= 0. \label{eq:6}\tag{6}
\end{align}
}

式\eqref{eq:5}は,式\eqref{eq:4}の最終的な右辺第2項の符号が変わるだけであり,これはどちらにせよ0になってしまうので結果に影響しません.
式\eqref{eq:6}では,式\eqref{eq:4}の3行目から4行目にあたる計算の際,\cos(-x) = \cos xであることから全ての項が0となって消えてしまいます.

結果として,式\eqref{eq:3}, \eqref{eq:5}, \eqref{eq:6}を見ると,周波数も含めて全く同じ三角関数同士の積の場合のみ定数が残り,それ以外では全て0になることが分かります.
詳しくは後で補足しますが,このような特性を三角関数の直交性」と呼ぶこともあります.

2.2.2. 直交性を利用して係数を求める

それでは,a_0以外のフーリエ係数a_k, b_kを求める問題に視点を戻します.
前節で確認した特性を利用すると,以下の式を得ることができます.

\displaystyle{
\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} f(t)\cos\left( \frac{2\pi k}{T_0}t \right) \mathrm{d}t
 = \int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} a_k\cos\left( \frac{2\pi k}{T_0}t \right)\cos\left( \frac{2\pi k}{T_0}t \right) \mathrm{d}t = a_k\frac{T_0}{2}. \label{eq:7}\tag{7}
}

これは式\eqref{eq:1}に示したf(t)の両辺に\cos\left(\frac{2\pi k}{T_0}t \right)をかけたものを積分して得られます.
この時,前節で示したように,全く同じ三角関数同士の積以外の項は0となり,消えてしまいます.
なお,a_0の項も係数a_0を求める際にやったように,1周期分の積分で0となります.

ここはビックリポイントだと思います. 無限に項があったのに,欲しいところだけ残して消えちゃいました!

さて,ここまで来てしまえば,あとは式\eqref{eq:7}を整理するだけでa_kを求めることができます.
また,お察しのとおりb_kも同じように,対応する角周波数の\sin関数を掛けてから積分することで導くことができます.

2.3. まとめ(フーリエ係数の計算式)

長くなったので結果だけをまとめると,フーリエ係数a_0, a_k, b_kを求める式は以下であることが分かりました.

\displaystyle{
\begin{align}
a_0 &= \frac{1}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} f(t) \mathrm{d}t, \label{eq:8}\tag{8}\\
a_k &= \frac{2}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} f(t)\cos\left( \frac{2\pi k}{T_0}t \right) \mathrm{d}t, \label{eq:9}\tag{9}\\
b_k &= \frac{2}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}} f(t)\sin\left( \frac{2\pi k}{T_0}t \right) \mathrm{d}t. \label{eq:10}\tag{10}
\end{align}
}

こうして求まる係数を式\eqref{eq:1}に代入することで,対象の関数f(t)三角関数の組み合わせで表現することができます.

3. 計算内容を噛み砕いてみる

丁寧な説明を心掛けたためか,すでに本記事の文章量が多くなっていると思いますが,このままではフーリエ級数展開を導く過程のパズルのような面白さは分かっても,その意味的理解といいますか,イメージのようなものを掴めないと思います.

そこで,上記の計算内容が数学的にどんな意味を持っていたのか,噛み砕いてみます.

3.1. 第2.2.1節の特性をなぜ「直交性」というのか?

フーリエ級数展開では,フーリエ係数を求めることが実質的な計算内容でしたが,この時に活躍したのは第2.2.1節で説明した三角関数の特性でした.
そこでは,全く同じ三角関数同士以外の積を1周期分積分すると0となることを示し,この特性を「直交性」と呼ぶと説明しました.

ここでの「直交」とは何を意味しているのでしょうか?

直交という言葉を聞いて,最初に思い浮かぶのは2次元平面における2つの線分が直角(90°)に交わるイメージだと思います.
また,xyz座標を用いて表現される3次元空間(直交座標系)も,全ての軸が直交している空間として理解しているでしょう.
(その名の通りなので当たり前ですが.)
これらが確かに直交していることは実際に紙に書いたり造形してみたりして,それを定規や分度器で測ることで確認することができます.

それでは,4次元以上の多次元空間など,抽象的な空間についてはどのように「直交しているか?」を調べればよいのでしょうか?

こういった場合にも,数学的に「直交する」条件を考えることができます.
それは,「内積が0となること」です.

先ほどの2つの例も,直交するもの同士の内積を計算すると0になることは知っていますので,少し親近感のある定義だと思います.

そして,第2.2.1節で説明した特性を「三角関数の直交性」と呼ぶ理由は,異なる三角関数同士の内積が0になることに起因しています.

・・・ん?関数の内積

3.2. 関数の内積

3.2.1. 内積とは?

内積といえば,2つのベクトルに対して行う計算を思い浮かべると思います.
この理解は正しく,そのまま今回の話に適用することができます.

しかし,もう少し理解を深めるために,内積の定義を確認しておきましょう.

定義 1 内積
実数全体の集合\mathbb{R}複素数全体の集合\mathbb{C}のどちらかとなる集合を\mathbb{K}とする.
この\mathbb{K}上のベクトル空間Xにおける内積とは,Xの直積空間X\times Xから\mathbb{K}への写像
\displaystyle{
\langle\cdot \mid \cdot\rangle : X\times X \rightarrow \mathbb{K}
}
であり,Xの任意の元x, y, z \in Xと任意のスカラー\alpha \in \mathbb{K}に対し,次の4つが成り立つものをいう.
1. \langle x \mid x \rangle \geq 0,かつ等号が成り立つのはx=0のときのみ
2. \langle y \mid x \rangle = \overline{\langle x \mid y \rangle}
3. \langle \alpha x \mid y \rangle = \alpha \langle x \mid y \rangle
4. \langle x+y \mid z \rangle = \langle x \mid z \rangle + \langle y \mid z \rangle

なお,\overline{\cdot}\cdot複素共役として用いました.
また,内積を表す記号として,\langle x \mid y \rangleを用いました.
これはディラックのブラケット記法」などと呼ばれるもので,「\langle x \mid」の部分を「ブラ」,「\mid y \rangle」の部分を「ケット」とそれぞれ呼びます.
内積を示す際によく用いられる記法は他にも多くあり,(x \mid y), \langle x, y \rangle, (x, y), x\cdot y, などがあります.
今回は,ロボティクスを学ぶ人間にとって最もなじみのなさそうなものを選びました.

これを機に私も慣れていきたいです.

さて,定義を見ると,また難しそうな言葉がたくさん出てきました.
ちなみに,というのは単に集合を構成する要素のことです.なじみがないかもしれませんが,シンプルなのでこの説明だけで問題ないでしょう.
元を除くと,すぐに理解できない言葉は以下の3つだと思います.

  1. \mathbb{K}上のベクトル空間X
  2. Xの直積空間X\times X
  3. X\times Xから\mathbb{K}への写像

そこでこれらについて節を分けて説明します.
説明の順序は上とは異なり,簡単に説明しやすいものから書いていくことにします.

3.2.2. 直積空間とは?

これはシンプルで,2つのものの組み合わせでできる集合をイメージしてもらえれば良いと思います.「直積集合」と呼ばれるものと同じです.
例えば,行数がmで列数がnの行列を考えたとき,その行列の要素数m\times nになりますが,この要素全てから成る集合は直積空間です.

このことを定義として整理しておきましょう.

定義 2 直積空間(直積集合)
2つの集合A, Bがあり,それぞれの元をa\in A, b\in Bとしたとき, 任意の元の順序対(a,b)全てからなる集合
\displaystyle{
A\times B = \left\{ (a,b) \mid a\in A, b\in B \right\}
}
をAとBの直積空間(または直積集合)という.

ここで表れた「順序対(a,b)というのは,2つの要素をこの順序で組み合わせたものです.
順序が異なると別の順序対とみなします.つまり,(a,b)\neq (b,a)です.
なお,順序対のことを単純に「対」ということもありますが,逆に順序対と対を区別することもあります.この辺りは読んでいる文書などにおける用語の定義をよく確認した方が良いでしょう.個人的には,要素の順番が重要であることを意識して,順序対という言葉を用いる方が良いと思っています.

ここで少し注意があります.
上では順序対の表記を(x,y)としました.
しかし実はこの表記は,内積の表記の一例としても挙げたものです.さらに,順序対の表記も\langle x, y\rangle, [x,y]などなど,様々です.これについてもやはり,文書中の用語の定義をよく確認しましょう.
今回は(x,y)を用いることにします.

なじみのある2次元座標もほとんどの場合(x,y)と書きますね.

3.2.3. 写像とは?

写像の定義

写像という言葉はよく聞くと思いますが,その定義をちゃんと知らないという方は多いと思います.
実は写像というのは非常に広い意味を持っています. それではこれも定義を確認してみましょう.

定義 3 写像
集合X, Yがあり,Xの任意の元x\in Xに対し,Yの元y\in Yがただ1つ定まるとき,その対応関係を写像,もしくは関数という.
このことを
\displaystyle{
f:X \rightarrow Y
}
などと書き,写像fと呼ぶ.

ここでもやはり,写像の表記方法はこれだけではないことに注意してください.
ただ,これまで述べた内積や順序対に比べると,写像をこのように書くことは一般的なように感じます.

写像を少し噛み砕いてみる

写像の定義についてはもう十分なのですが,理解を深めるために少し考えてみましょう.

定義 3では,元x\in Xに対して定まる別の集合の元y\in Yただ1つだと書きました.
わざわざこのように書いたということは,ただ1つではなく,複数定まってしまって,写像とは呼べない場合もあるということです.
そういった場合は,AからBへの「対応(または関係)」と呼ばれます.
この対応は,直積集合A\times Bの部分集合(Gと名づけておきます)として定義できます.以降では部分集合Gを「対応G」と呼んで慣れましょう.
直積集合A\times Bは集合Aと集合Bのあらゆる組み合わせを元とする集合でした.
この部分集合である対応Gは,この中の一部の組み合わせを元とする集合です.
したがって,集合Aから何か元を選んできても,それが対応Gの元では使われていない場合もあります.
ここで,対応Gの元に使われている集合Aの元の集合には,「定義域」という名前がつけられています.
数式で整理すると,定義域をDとして,以下のように書けます.

 D=\{ a\in A \mid あるb\in Bに対し,(a,b)\in G \}.

定義域の話と同じように,集合Bの元についても,対応Gの元に使われているものとそうでないものがあります.使われている元の集合には「像」という名前がついており,次のように書けます.

 R=\{ b\in B \mid あるa\in Aに対し,(a,b)\in G \}.

ここで,「対応」や「定義域」,「像」といったネーミングの理由が気になる方もいると思います.

違和感があるともやもやしますよね.

対応Gは直積集合A\times Bの部分集合ですので,その元は順序対です.
したがってaが先,bが後,のようなイメージがあります.
そのイメージを大事にして,まずa\in Rを決めます. すると対応Gから,aと何かの組である元を特定することができます.
この元は複数あっても構いませんので,例えば(a,b), (a,b')などのように,とにかくいくつかの元が対応付けられます.
これは同時に,aを選んだことによってb, b'を間接的に選んだことになります.
このことが,「対応」という名付けのイメージだと思います.

さて,このように解釈すると,Dを「定義域」と呼ぶ理由もなんとなく分かると思います.
対応Gの元が定義されている領域,もしくは対応Gによって決まるbの領域を定義する領域,といったように理解できると思います.
「像」というのは,この定義域を対応Gによって写した領域といった解釈が良いと思います.

対応の話で長くなってしまったので,写像に視点を戻します.

「対応」との関係を意識しながら「写像」を見てみましょう.

写像は対応の特殊な場合であり,写像と呼べるようになるためには残り2つの条件を満たす必要があります.

1つ目の条件は,一意であることです.
上の話で出たようにa\in Rを選んだとき,(a,b), (a,b')\in Gであればb=b'である場合,この対応G一意であるといいます.つまり,aに対応するものはbだけということです.

2つ目の条件は,定義域Dが集合Aと一致することです. つまり,集合Aの任意の元a\in Aに対応するb\in Rが存在することです.

これら2つを合わせると,先に述べた定義 3の通りの内容を指していることが分かると思います. また,定義で書いたように,部分集合Gではなく,対応関係自体に注目して,写像fと呼ぶこともできます.
このとき,元a\in Aに対応する集合Bの元を,f(a)\in Bと書けます.
以降では,対応させる処理に注目する場合には写像fの方を用います.

ここで,集合Aの元は全て写像fに使われることが決まりましたが,集合Bについては何も述べられていません.
したがって,この時点では写像fによって対応する元bの集合(像ですね)が集合Bの一部でも良いことになります.
ちなみに,この時の集合B「値域」といいます.
よく「像」と「値域」を混同してしまいますが,分けて用いられることもあるので注意が必要です.

それでは集合Bについても言及した場合をみてみましょう.

写像の像Rが集合Bに一致する場合,その写像全射(全写)」といいます.
つまり全射によって,集合Bの全ての元は集合Aのいずれかの元に対応付けられます.
なお,この「全射」のことをBの上への写像ということもあります. なぜこのように呼ぶのかの理由には自信がありませんが,私は写された像がBの上を(ぴったりと)覆っているからだと解釈しています.

もう一度,(全射ではない)写像に視点を戻します.
写像の定義では,元a\in Aに対応する集合Bの元が1つであることは決めていますが, 同じ元(仮に元b\in Bとします)に対応する元がただ1つとは決められていません.
つまり,異なる元a, a'\in Aが同じ元b\in Bに対応することがあり得ます.
これに対し,a,a'に対応する元が等しい,つまりf(a)=f(a')ならば,a=a'である場合,この写像f単射(単写)」といいます.
こちらも別の呼び方があり,fは一対一である」といっても同じ意味です.

ここで全射の条件と,単射の条件が両立できることに注目してください.
どちらも両立する場合,写像f全単射(全単写)」といいます.
この全単射という写像は非常に重要です.
その理由は,f:A\rightarrow B全単射であるならば,g:B\rightarrow Aとなる写像が存在することが分かるためです.
そしてこの写像gは必ず全単射であり,またこのような写像はただ1つしか存在しません.
この写像gを,写像fに対応して「逆写像(または逆関数)」といい,f^{-1}と表記します.

3.2.4. ベクトル空間とは?

3.2.4.1. ベクトル空間の定義

ベクトルと聞いて,まず思い浮かぶのはなんでしょうか?
空間中にある方向を持った矢印や,数の組がまず浮かぶのではないかと思います.
しかし実は,これらはベクトルと呼ばれるもののうちの,ごく一部です.

これまで説明してきた直積空間や写像と同様に,ベクトルも数学的にきっちり定義されています.
ただし,これまでの2つと大きく違う点が1つあります.

それは,ベクトルは要素単体だけでは定義されず,その要素が従う演算規則が指定されてはじめて定義されるということです.

演算を行うためには少なくとも2つ以上の要素からなる何かしらの集合が必要になります. したがって,ベクトルを定義するためには,まずそのベクトルが属する集合を定義しなければなりません.
そしてこの集合こそが,「ベクトル空間」です.

ベクトルは「ベクトル空間の元」として定義されるということです.

それでは,ベクトル空間の定義をみていきましょう.
先に述べたように,ベクトル空間を定義するには演算規則を指定する必要があります.
そのため,これまでの定義よりも長い記述になります.

定義 4 ベクトル空間(線形空間
ある集合Xがあり,その上に次の2つの条件を満たす演算が与えられているとき,Xとそれら2つの演算をあわせて,ベクトル空間という.

  1. 集合Xの任意の元x, yに対して,和と呼ばれる集合Xの新しい元が常に定まり,次の条件を満たす.なお,和をx+yと書く.つまり,x+y\in Xである.
    • \forall x,y,z \in Xに対し,(x+y)+z = x+(y+z)が成り立つ.
    • \forall x,y \in Xに対し,x+y = y+xが成り立つ.
    • 零ベクトルと呼ばれる元0\in Xがただ1つ存在し,\forall x\in Xに対してx+0=xが成り立つ.
    • \forall x\in Xに対してx'\in Xが存在してx+x'=0が成り立つ.このx'を逆元と呼び,-xと書く.なお,x+(-x)x-xと書ける.

  2. 集合Xの任意の元xと実数\mathbb{R}の任意の元aに対し,xaの積(もしくはxa倍)と呼ばれる集合Xの新しい元ax\in Xが常に定まり,次の条件を満たす.
    • \forall x\in X\forall a,b\in \mathbb{R}に対し,(a+b)x = ax + bxが成り立つ.
    • \forall x,y\in X\forall a\in \mathbb{R}に対し,a(x+y)=ax+ayが成り立つ.
    • \forall x\in X\forall a,b\in \mathbb{R}に対し,(ab)x=a(bx)が成り立つ.
    • \forall x\in Xに対し,1x = xが成り立つ.

なお,上の定義中では\forallという記号を用いました.これは「任意」という意味の記号で,\forall x\in Xは「集合Xの任意の元x」と同じことを意味します.
「任意の元x」という表現も聞き馴染がない場合,ピンとこないかもしれません.
これは集合Xのどんな元でもいいですよ,何の制限もないですよ,というニュアンスです.
結局,集合Xの全ての元に共通する性質を述べていることになります.

上の定義で,積の演算には実数\mathbb{R}の元を用いました.実は実数以外に複素数\mathbb{C}などの元でも同じように定義することができます.
実数\mathbb{R}の元や複素数\mathbb{C}の元などを総称してスカラーと呼ばれるため,定義でaxと書いた演算にはスカラー倍」という名前がついています.

なお,スカラーが実数\mathbb{R}である場合のベクトル空間を「実数\mathbb{R}上のベクトル空間」といい,「実ベクトル空間(実線形空間)」と呼称されます.
同様にスカラー複素数\mathbb{C}である場合には「複素ベクトル空間(複素線形空間)」という名前がつけられています.

この呼称を見ると,「ベクトル」は「線形であるもの」ということが分かります.
線形性は非常に重要な性質で,制御工学において対象が線形であるか否かによって適切な制御則が大きく異なってきます.
したがって,考える対象がベクトルであるか否かを調べることは非常に重要です.

ここで,定義 4には本節の最初に述べた矢印や数の組のような話は一切でてきていないことに注意してください.
定義 4を満たすものは全て「ベクトル」であり,その中の一例として上の2つがあったのです.

ベクトルのイメージを掴むために,いくつかの例を見てみましょう

3.2.4.2. ベクトル空間の例

3.2.4.2.1. n次元数ベクトル空間\mathbb{R}^n

これは既に例示したように,代表的なベクトル空間です.
この空間は以下のように定義されます.

\displaystyle{
\mathbb{R}^n := \left\{ x = \left[ 
  \begin{array}{c}
  x_1 \\
  x_2 \\
  \vdots \\
  x_n
  \end{array}
   \right]
   : x_i \in \mathbb{R}, i=1,\cdots,n
   \right\}.
}

この空間に対し,スカラーを次のように定義します.

\displaystyle{
\begin{align}
\left[
\begin{array}{c}
  x_1 \\
  x_2 \\
  \vdots \\
  x_n
  \end{array}
   \right]
   +
   \left[
   \begin{array}{c}
  y_1 \\
  y_2 \\
  \vdots \\
  y_n
  \end{array}
   \right]
   &:=
   \left[
   \begin{array}{c}
  x_1+y_1 \\
  x_2+y_2 \\
  \vdots \\
  x_n+x_n
  \end{array}
   \right],\\
\quad\\
a\left[
\begin{array}{c}
  x_1 \\
  x_2 \\
  \vdots \\
  x_n
  \end{array}
   \right]
   &:=
   \left[
   \begin{array}{c}
  ax_1 \\
  ax_2 \\
  \vdots \\
  ax_n
  \end{array}
   \right].
\end{align}
}

このようにすると,この空間\mathbb{R}^nは定義 4の条件を全て満たしますので,ベクトル空間となります.

3.2.4.2.2. 実数値(複素数値)関数空間

ある区間,例えば[0, \infty)上に定義された実数値(複素数値でもいい)関数の全体である空間も,ベクトル空間として定義することができます.
ここで,関数の空間という概念に違和感を感じるかもしれません.
上で述べた条件に当てはまる関数は数多くありますが,ここで指している空間はそのようなたくさんある関数を集めた集合です.
したがって,元は関数となります.
実数値関数空間を例として数学的に表現すると,次のように書けます.

\displaystyle{
\mathcal{F}[0, \infty) := \left\{ f:[0,\infty) \rightarrow \mathbb{R} \right\}.
}

この空間に対して,次のようにスカラーを定義します.
なお,f,g\mathcal{F}の任意の元とします.また,ここでは便宜上,f,gt\in[0,\infty)の関数としています.

\displaystyle{
\begin{align}
(f+g)(t) &:= f(t) + g(t),\\
(af)(t) &:= af(t).
\end{align}
}

このようにすると,やはり定義 4の条件を全て満たしますので,\mathcal{F}もベクトル空間となります.

3.2.5. 内積の再考

さて,第3.2.1節内積の定義を見てから,その中で使われていた用語の意味を知るために長い道のりを経てきました.
ここまでの説明を踏まえて内積の定義を読み解くと,以下のように整理できます.

  1. 定義 4で定まるベクトル空間の任意の元を2つ取ってくる
  2. その2つの元を順序を考慮して並べた組を作る
  3. ベクトル空間を定義する際のスカラー倍で用いた空間\mathbb{K}から,作った組に対応する元をただ一つ定める対応関係を考える
  4. その対応関係が定義 1に記した4つの規則を満たすとき,この対応関係を「内積」と呼ぶ

ベクトルがこれまで知っていたものよりも遥かに多くのバリエーションを持っていたように,様々な演算を内積として考えることができます.

定義 1を満たしている演算は全て内積なのです
(それが定義なので当然なのですが・・・)

3.3. 関数の内積を考える

さて,記事が長すぎて目的を見失っているかもしれませんが,そもそも内積を理解しようと思った動機は,第3.1節で関数の内積を考えたかったためです.
三角関数が直交するか否かを判断するために,2つの三角関数内積が0になるかどうかを調べたかったのです.

第3.2.4.2.2節で例示したように,関数もベクトルとして考えることができます.
実数値関数空間での内積は,例えば次のように定義することができます.

\displaystyle{
\left\langle f \mid g \right\rangle := \int_{a}^{b} f(t)g(t) \mathrm{d}t.
}

これは定義 1の条件を全て満たします.

なお,ここでの積分区間[a, b]には特に制限はありません.
また,右辺に定数を掛けたとしても,定義 1の条件を満たすことに変わりありません.
したがって,関数の内積は無数に定義できることが分かります.

もうあの式にそっくりですね.

さて,ここまでくると式\eqref{eq:3}, \eqref{eq:5}, \eqref{eq:6}がなぜ三角関数の直交性を示すのか分かってきたのではないでしょうか?
これら3つの式の左辺は全て,三角関数同士の内積を意味しているのです.
そして既に述べたように,内積が0であることを「直交する」といいますので,異なる三角関数同士は全て直交していることが示されている,と分かります.

3.4. フーリエ係数の再考

内積に意識して,フーリエ係数の計算式である式\eqref{eq:8}, \eqref{eq:9}, \eqref{eq:10}をもう一度みてみましょう.
これらの計算内容は,対象とする関数f(t)と,振幅を調べたい三角関数内積に他なりません.

ここで,空間中の矢印でベクトルを学んだときのことを思い出してみます.
あるベクトルxと他のあるベクトルy内積\langle x \mid y \rangleを計算すると,ベクトルxをベクトルyを含むいくつかのベクトルで表現した際の,ベクトルyに関する成分を計算できたと思います.
この成分を仮にaとすれば,x = ay + ?ということです.
ベクトルxを完全に表現するためには,他にも適切なベクトルが必要になります.

このようにして任意のベクトルを表現可能な過不足ないベクトルのまとまりを,「基底」といいます.

以上のことと同様に,フーリエ級数展開では,周期的な関数の空間の基底として無数の三角関数を考え,対象とする関数ベクトルの各基底の成分を内積で求めている,ということになります.

4. まとめ

本記事ではラプラス変換と仲良くなることを目指し,その前段階のフーリエ変換のさらにその前のフーリエ級数展開について調べ,まとめてみました.
フーリエ級数展開ある周期的な関数を三角関数の組み合わせで表現する方法でした. ここで使用する三角関数は,対象の関数の周波数の自然数倍の周波数を持つものであり,それらの振幅は三角関数の直交性を利用した関数の内積によって求められました.

また,フーリエ級数展開において重要な関数の内積を理解するために,内積ベクトル空間直積空間写像などの用語とその定義を学びました.
このせいで文章量が凄いことになってしまいましたが,フーリエ係数の計算式をその形だけで見るよりも,多少は仲良くなれたのではないかと思います.

今のところはまだまだラプラス変換との繋がりがさっぱり見えてこないと思いますが,本記事で整理したイメージを大事にしておくことで,フーリエ変換ラプラス変換の意味を理解しやすくなると思います.

5. 参考文献


  1. 本来は入れ替えが可能かどうかを調べる必要がありますが,今回はラプラス変換の理解の前段階としてフーリエ級数展開を大まかに理解することを目的としているため,踏み込まないことにします.この辺りを簡潔に説明できる実力がついたら追記するかもしれません.今は,『入れ替えられる場合を対象にしてとりあえず考えを進めている』というように思ってください.

制御工学の基本用語

本記事の目的

制御工学を学び始めると,まず参考書の第1章で多くの専門用語を紹介されます.
これらは非常に重要ですが,初学者にとっては新しい情報の洪水のようで,受け止めきれないことも多いと感じます.

そこで少しでも整理しやすいように,各用語の気持ちを加えつつ,これらを紹介します.

想定する読者

  • 用語の適切な説明を忘れてしまった将来の自分
  • 制御工学を学び始める方

前提とする知識

何もなくても読める記事を目指しますが,「制御とは何か?」というイメージは掴めていると理解しやすいと思います.
該当する私の過去記事は以下のものです.

tenorea.hatenablog.com

目次

1. 制御の構成要素

まず「制御する」という行為が成り立つためには,最小で3つの要素が必要です.
各要素の説明をする前に,それぞれの関係を下の図に整理しました.

f:id:tenorea:20211009213703j:plain:w500
制御の最小構成要素
なお,このような図は制御工学でよく用いられるもので,「ブロック線図」と呼ばれます. 何かしらの機能をブロックで表現し,やり取りされる情報やエネルギーなどをで表現します.

さて,それでは各要素について,節を分けて以下に説明します.

1.1. 制御対象

注目している対象です.
この制御対象の状態を何かしらの目的に合うようにすることが制御の目的です.

例えば,部屋の照明を点けるためにスイッチを操作する場合,照明が制御対象です.

1.2. 操作量

制御するために対象に加えられるものです.

例えば,ある物体を押して所望の位置へ移動させる場合では,押す力が操作量です.

この操作量は,制御入力と呼ばれることもあります.

1.3. 制御量

制御対象に関する何らかの値であり,これを目標の値にすることが制御の目的です.

例えば,上述の部屋の照明の例では照明の点灯状態制御量です.
物体を押して移動させる例では,物体の位置制御量です.

この制御量は,制御出力と呼ばれることもあります.

制御されるのは制御対象?それとも制御量?

よく,制御対象は「制御される対象」と説明されます.
しかし制御量も「制御される量」とか「制御される出力」などと説明されます.

果たして「制御される」のは制御対象と制御量のどちらなのでしょうか?

これは「制御する」という言葉の意味が広いため,はっきりと分けることは難しそうです. したがって,文脈によって判断する,と思っておくのが良いでしょう.

例えば,ある物体を指して,これを制御するか否か話している際には,「制御される」のは「制御対象」です.

一方,例えばロボットの手先について,位置を制御するのか,力を制御するのか,といった話をしている場合,ここでの「制御する」の目的語は「制御量」ということになります.

「制御」という概念は様々なものを対象とするために抽象化されています.
そのため,このような「今注目している範囲はどこか?」によって指すものが変わるということが多々あります.

2. フィードフォワードとフィードバック

制御方法は非常に多く提案されており,様々な分類方法があります.

ここで説明する分類の分かれ目は,操作量(制御入力)を決める際に制御対象の状態を用いるか否かです.

非常に重要ですので,節を分けて以下に整理します.

2.1. フィードフォワード制御

制御対象の状態とは無関係に操作量を決める制御方法です.
つまり,制御を開始する前に操作量を決めることができます.

例えば,紙くずを投げてゴミ箱に入れようとする場合を考えます.
紙くずを制御対象,投げる力や方向を操作量,紙くずが落ちる位置を制御量とすれば,これはフィードフォワード制御です.

ただし,「制御対象の状態とは無関係に」というのは,制御対象の情報を全く用いない,ということではありません.

先ほどの紙くずの例で言えば,我々人間は紙くずを持った時の重さや大きさによって変わる感覚をもとに,過去の経験から投げ方を決めるはずです.
したがって操作量を決める際に,制御対象の情報を用いています.
しかしそれは制御開始前,つまり投げる前のことで,投げた後に紙くずの軌道を修正することはできません.

さてこの例の場合,紙くずの重さや大きさ,空気抵抗のはたらき方などが想像と異なると,紙くずは予想外のところへ落ちます.
さらに,紙くずを投げた後に不意に風が吹いてしまうと,もはやゴミ箱に入らないのは当たり前とも言えます.

このように,フィードフォワード制御では制御対象の動きの予想が外れていたり,不意の邪魔が入った際,思い通りの結果を達成できなくなります.

2.2. フィードバック制御

制御対象の状態を観察し,それに基づいて操作量を決定する制御方法です.
世の中の多くの制御はフィードバック制御です.

例えば,我々が普段歩く際,思い通りの方向へ進むためにもフィードバック制御が活用されています.
ここでは目というセンサで自分の現在の進行方向を知り,それが思い通りの方向と一致するように歩き方を調整しています.
もし目を閉じて歩けば,大抵の人は思い通りの方向へ歩けないでしょう.

フィードバック制御を行うためには,上の例での「目」のように,何かしらのセンサが必要になります.

3. 開ループと閉ループ

フィードフォワード制御フィードバック制御は,それぞれ「開ループ制御」「閉ループ制御」と呼ばれることもあります.
これは,それぞれが下の図のように表現できることに起因しています.

f:id:tenorea:20211009213844j:plain:w500
フィードフォワード制御(開ループ制御)
f:id:tenorea:20211009213908j:plain
フィードバック制御(閉ループ制御)

フィードフォワード制御では,操作量が制御対象に加えられ,その結果として得られる制御対象の制御量に注目します.
このように流れが一方通行であるものを,開ループと言います.

一方フィードバック制御では,制御対象の状態が操作量の決定に用いられるため,フィードフォワード制御の流れの向きとは逆の方向へ伝達される情報があります.
このように閉じた形となる(図形的に内側と外側に分かれる)ものを閉ループと言います.

開ループは何が「開いている」の?

私が最初に制御工学を勉強した際,『何で「開」なんだ?そもそも,何に対して開かれているとか閉じているとかを話しているんだ?』と感じ,なかなかしっくりきませんでした.

今の時点では,とりあえず閉ループの方は図形的に閉じている感じがするので納得することにして,開ループの方は「閉ループじゃないから開ループ」くらいの気持ちでいようと思っています.

開ループの方も閉ループと同じように図形的に見れば確かに開かれているとは思うのですが,閉ループと違ってどうも図形的に見にくい印象があります.
そこで上のように解釈しています.

4. 手動制御と自動制御

紙くずを投げる例では,私という「ヒト」がある物体に作用し,その状態(落ちる位置)を制御していました.
このように人手を介して行う制御を,「手動制御」といい,そうでない場合を「自動制御」と言います.

このような呼び方がありますが,私としてはあまり意識しなくていい分け方だと思っています.
「制御工学」は対象の数学的モデルに注目して議論する学問ですので,構成要素に「ヒト」がいるかどうかは重要ではないのではないか?と考えています.
また,人手を介するか否か,という分け方では上手くいかないことも多いです.

例えば,上で挙げた歩行の例でもヒトが関わっていますが,これは「自動制御」と呼ぶ方がいいように思います.
その根拠は,ヒト以外の何かを制御していないので,「手動で何かしてる」感がない,というとても曖昧なものです.
(これに関しては,他の方の意見も聞いてみたいです.)

また,近年さらに活発に研究されている遠隔操作は,一部が手動制御で一部が自動制御と言えます.
したがって遠隔操作全体を指す場合,それが手動制御なのか自動制御なのかは,何とも言えないと思います.

このようなことから,手動制御と自動制御の区分については,そういう呼び方もある,程度の理解で良いと思っています.

5. 制御系の構成要素

前節では,制御にヒトが関わるか否か,に注目しました.
このように制御に関わるものを全てまとめて,「制御系」と呼びます.

「系」って何?

ここで用いられる「系」という言葉は,「システム」とも呼ばれ,非常に多くの場面で使用されます.
系(システム)とは,いくつかの要素で構成される集合体のことです.
これに該当するものは無数にありますので,注目する範囲によって様々なものをシステムと呼べます.

例えば,ロボット全体はシステムです.
しかし見方を変えると,ロボットの構成要素であるセンサも,様々な電子部品で構成されたシステムです.
さらに見方を変えて,ロボットが関与する環境そのものをシステムと捉えることもあります.

なお,システムに加えられるものを「入力」,システムから得られるものを「出力」と呼びます.
入力と出力を合わせて,「入出力」という言葉も良く用いられます.
システムと同じように,何を入出力とするかは様々です.

制御系を構成する要素は,その役割に応じて以下のように呼ばれます.

  • 制御器/調節器:アクチュエータへの信号を生成する要素
  • アクチュエータ/操作部:制御対象に直接作用する要素
  • 制御対象(既出):制御される対象
  • フィードバック要素/センサ/検出部:制御対象の状態を読み取り,信号に変換する要素

この中で,アクチュエータは制御対象に含まれることが多いです.

例えば,カメラで対象の位置を読み取り,電動モータによって動くアームでその対象を掴むロボットを考えます.
この時,センサはカメラ,アクチュエータは電動モータです.制御器は制御用PCで実現されるでしょう.

これらの要素の間でやり取りされる信号には以下のような呼び名があります.

  • 目標値:制御の目標を示す信号
  • フィードバック信号:フィードバック要素から得られる信号
  • 制御偏差/動作信号:目標値とフィードバック信号の差
  • 操作量(既出):制御対象に加える信号
  • 制御量(既出):目標値に追従すべき信号
  • 外乱:外部から制御系に加えられる望ましくない信号の総称

「外乱」を除く用語は既に説明した内容から理解できると思います.

外乱は,様々なものが考えられます.

例えば,物体を押して動かす際,押す力以外に何かの力がその物体に作用していれば,それは外乱と呼べます.
また,センサと制御用PCの間でやり取りされる信号に,電気的なノイズが加わっていれば,それも外乱と呼べます.
さらに, 制御用PCからアクチュエータに送られる信号にも,電気的な外乱が加わる可能性があります.

良い制御系には,このように色々と考えられる外乱からの影響を抑えることが求められます.

6. まとめ

本記事では制御工学を学ぶにあたって,知っておいた方が良い基本用語を整理してみました.

他にも候補になる用語はあるのですが,ここでは用語の数を最低限に留めました.
説明できなかった用語については,それらに焦点があたる時に触れようと思います.

7. 参考文献

制御工学と微分方程式

本記事の目的

制御工学では多くの数式を扱います.
また,工学であるにも関わらず対象が抽象的なため,分かりにくい印象を持たれます.
このような抽象性から,数学っぽさの強い学問と言え,数学的議論に不慣れな方にとってはこの点が理解を妨げる根源の一つではないでしょうか.

本記事では,制御工学で数学的議論を行う理由について,制御と微分方程式との繋がりの観点から整理してみようと思います.

難しい数学的議論を一生懸命学ぶ理由を知ることで,モチベーションを維持しましょう.

想定する読者

  • 制御工学を最初から学び直そうとしている将来の私
  • 制御工学を学び始める方

目次

1. 制御とは?

「制御する」

まず,そもそも「制御する」とはどういうことでしょうか?

簡単に言うと,「ある注目するものを思い通りに操ること」です.

もう少し細かく表現すると,「ある対象に関するある状態を,ある目的に適合させるため,その対象に何らかの操作を加えること」と言えます.

以降では,「対象に操作を加えた結果,対象の状態が変化すること」を,「現象」と呼びます.
つまり,上に書いた「制御する」とは,「ある目的に適合する現象を起こすこと」と言い換えることもできます.

「現象を理解する」

それでは,上述した制御を実際に行うためには何をすればいいか考えてみます.

何らかの操作によって対象の状態を目的の状態にするためには,対象が操作に対してどのように反応するかを知っている必要があります.

例えば,帰宅して照明を点けたい時,私たちは当然のように対応するスイッチを操作します.
ここで操作対象となる照明を直接つついたり叩いたりしてみる人はほとんどいないでしょう.

このような行動は,私たちがスイッチによって照明の状態が切り替わるという「現象」を知っているからこそ実行できる行動です.

これと同じように,制御工学ではまず「現象」を理解することから始め,その後に操作の仕方を考えます.
現象を理解するための一つの方法として,現象を数式で表現し,その数式を用いた調査(解析)を行います.

2. 現象を表現する数学的モデル

現象を数式で表現する方法は様々あると思いますが,ここでは記事のタイトルにある微分方程式に注目します.

微分方程式の代表的なものとして,以下に示すニュートン運動方程式(運動の第2法則)がよく知られています.

\displaystyle{
Ma = M\frac{d^2x}{dt^2} = F \label{eq1} \tag{1}
}

ここで,Mはある物体の質量,aは物体の加速度,xは物体の位置,Fは物体に加えられる力としました.
この式は物体の位置の変化率である速度の,そのまた変化率である加速度と力の関係を示しています.

このように,世の中の多くの「現象」は微分方程式で表せることが様々な学問の取り組みによって分かっています.
このことを利用して「現象」を数式として表せば,その現象の特性を調べることができます.

なお,このような「現象を表す数式」を,「数学的モデル」などと呼びます.

2.1. 例1:バネマスダンパシステム

数学的モデルの代表例の一つとして,バネマスダンパシステムを紹介します.
これは下図に示すような物体の運動を表現する微分方程式です.

f:id:tenorea:20211004095243j:plain
バネマスダンパシステム

車輪のついた物体がバネとダンパという2つの機構部品によって壁に繋がっている状態です.
車輪により,物体は摩擦抵抗なしに左右方向へ移動できるものと考えます.

バネは一般によく知られている部品です.
伸ばせば縮む方向に力を発揮し,逆に縮ませれば伸びる方向へと力を発揮します.
これを表現すると,バネによる力をf_sとして,以下のように書けます.

\displaystyle{
f_s = -Kx \label{eq2}\tag{2}
}

ダンパはバネよりは知名度の低い部品ですが,バネの速度版と思えば理解しやすいです.
つまり,移動しようとする方向へ速度が生じると,それとは逆の方向に力を発揮します.
ドアが勢いよくバタンと閉まらないようにする機構をよく見ると思います.
このダンパによる力をf_dとすると,以下の式で表せます.

\displaystyle{
f_d = -D\frac{dx}{dt} \label{eq3}\tag{3}
}

物体にはバネとダンパによる力の他に,外部から与えられる力(外力)fも加えられています.
これらをまとめると,式\eqref{eq1}と同様,ニュートンの第2法則より,以下の式を得られます.

\displaystyle{
M\frac{d^2x}{dt^2} + D\frac{dx}{dt} + Kx = f \label{eq4}\tag{4}
}

なお,慣習にならって外力fを右辺に書き,それ以外を左辺にまとめました.

2.2. 例2:RLC回路

制御工学の参考書では,多くの場合,上記のバネマスダンパシステムと,RLC回路が紹介されています.
それはこの2つを表現する微分方程式に非常に重要な共通点があるためです.

RLC回路を下図に示します.

f:id:tenorea:20211004095352j:plain
RLC回路

左側の電圧e_iがこの回路を通過し,e_oという電圧として出力されます.
この時のe_oコンデンサの両端の電圧と等しいので,次の式で表せます.

\displaystyle{
e_o = e_o(0) + \frac{1}{C}\int^{t}_{0}i({\tau})d\tau \label{eq5}\tag{5}
}

ここでe_o(0)e_iを印加し始めた瞬間のe_oとし,Cコンデンサの容量[F]としました.

式\eqref{eq5}の両端を微分して整理すると,回路を流れる電流iを次式で表せます.

\displaystyle{
i = C\frac{de_o}{dt}
}

抵抗とコイルの両端の電圧はこの電流iを用いて表現でき,e_ie_oの差はこれらの両端の電圧の和になります.
したがって,式\eqref{eq5}を代入して一気に整理してしまうと,次式を得ることができます.

\displaystyle{
LC\frac{d^2e_o}{dt^2} + RC\frac{de_o}{dt} + e_o = e_i \label{eq6}\tag{6}
}

2.3. 共通する特性

例示した2つの微分方程式はそれぞれ,物体の力学的な現象と,回路の電気的な現象を表現しています.
このように運動方程式や回路方程式などの,対象の第一原理に基づいて数学的モデルを得ることを「第一原理モデリングと呼ぶこともあります.

つまり,式\eqref{eq4}と式\eqref{eq6}はそれぞれ異なる対象の異なる第一原理に基づいて得られた数学的モデルです.
このような違いにも関わらず,これらの式の形は非常によく似ています.

例えば,式\eqref{eq4}において,x = y, M=k_1, D = k_2, K = k_3, f = uと書き換えると,次式となります.

\displaystyle{
k_1\frac{d^2y}{dt^2} + k_2\frac{dy}{dt} + k_3y = u \label{eq7}{\tag7}
}

同様に式\eqref{eq6}についても,e_o = y, LC=k_1, RC=k_2, 1=k_3, e_i=uと書き換えると,式\eqref{eq7}となります.

どちらにおいても,k_1, k_2, k_3が何かしら具体的な値を持つパラメータであり,uが対象に加えられる操作,yが状態を示している点は変わりません.

つまり式\eqref{eq7}は,例示した2つのシステムを抽象化し,どちらも表現できる数式として整理したものと言えます.

2.4. 抽象化による汎用性向上

このようにあるものの集まりに対して,それらに共通する特徴に注目し,調べる方法があります.
それは「数学」です.

数学で対象となる数式は高度に抽象化され,もはやそれが現実における何を表しているかは議論になりません.
しかしご存知のとおり,数学における様々な成果は,私たちが暮らす現実世界の発展に大きく貢献しています.

これは,抽象化した数式を調べた結果を,同じ特徴を持つ集まりを調べるのに利用できるためです.
つまり,式\eqref{eq7}を調べて判明した特性は,式\eqref{eq4}で表される物体の運動や,式\eqref{eq6}で表される回路の挙動にも共通する特性として類推できます.

このことを利用すると,一つ一つの対象を調べ上げなくても,式\eqref{eq7}についてだけ入念に調べ上げれば良いことになります.
このように,あるものに対する結果から別のあるものについて類推することを「アナロジーと言います.

そして制御工学とは,多くの対象にその成果を利用できるよう,数学と同じ方法を取ります.
つまり,まず抽象化された数式に対して,その特性を調べ,目的の状態にするための操作を考えます.
次にそれを実際の対象に適用し,制御の目的を達成する
わけです.

もし同じ数式で表現できる別のものを制御したくなったときは,すぐに以前の結果を利用することができます.

これが冒頭で触れた,制御工学で多くの抽象化された数式を扱う理由です.

3. まとめ

本記事では制御工学で数式を扱う理由を整理しました.
簡単に言えば,一つ一つの対象をいちいち調べていては大変なので,多くの現象を表現できる数式を対象にして調べるためです.

そして微分方程式が多くの現象を表現できることから,微分方程式の難しさに挑むことになります.

蛇足ですが,このような抽象化の効果を利用する一方で,制御の対象があくまで現実に存在するものであることを利用する考えもあります.

あまり数学的に考えすぎると一般的になりすぎて扱えない問題も,実は対象の第一原理に基づいて問題を限定すれば色々と調べられる場合もあります.

参考文献

ブログ開設の動機

ロボットは多くの要素で出来ています.
また,その用途も非常に様々ですので,思いつくようなことはほとんど全てロボットに関連付けることができると思います.
そのため,ロボットを扱う分野である「ロボティクス」では多岐に渡る学問や技術を用います.

当然,様々なことを勉強する必要があるのですが,あまりにも多岐に渡るために,勉強してから実践的に活用するまでに時間が空く場合もあります.
時間が空くと,どうなるでしょうか?

少なくとも私の場合,忘れます.
何となくの概要やイメージは覚えていても,すぐにその学問や技術を利用できる状態ではなくなります.

忘れてしまった時,再び学習する場合もあれば,利用を諦める場合もあります.
どちらにせよ,すでに学習したはずの効果はあまり発揮されません.

一方で,一度でも他者に説明したものは,かなり記憶に残ります.
特に,説明するために入念な準備をしたものであれば,多くの場合,資料を見るだけで鮮明な記憶が蘇ります.

再学習が必要なほど忘れてしまう場合と,そうでない場合とに分かれる分岐点は,アウトプットしたかどうかのようです.

そこで,日々の学びをアウトプットする場として,本ブログを開設することにしました.

内容はただのメモレベルのもの,噛み砕いて解説したもの,書評など,様々になる予定です.
想定する読者は記事によって変わると思いますが,基本的に「それでも色々忘れてしまった将来の自分」に向けて書きます.

なお,記載されている内容は基本的に一切のレビュー等を受けていないため,確実性を保証されていません.
したがって参照される場合は書籍や論文などを確認してください.