ラグランジュの未定乗数法

長い間、難しいものだと思い込んでいた・・・。

[
前の記事へ]  [解析力学の目次へ]  [次の記事へ]


基本の確認

 多変数関数\( f( x, y, z ) \)が極値を取る条件を求めたいとする。関数\( f \)の全微分は、
\[ \begin{align*} \diff f\ =\ \pdif{f}{x} \diff x + \pdif{f}{y} \diff y + \pdif{f}{z} \diff z \end{align*} \]
であるが、どんな微小変化\( ( \diff x, \diff y, \diff z ) \)に対してもこれが 0 になることが必要である。つまり、
\[ \begin{align*} \pdif{f}{x} = 0\ \ \ \ \ \ \pdif{f}{y} = 0\ \ \ \ \ \ \pdif{f}{z} = 0 \end{align*} \]
となることが取敢えずの極値の条件である。残念ながらこの条件から導かれる点\( ( x, y, z ) \)が極小か極大か、ただの停留点か、あるいは鞍点であるかということは分からない。

 鞍点というのは、例えば 2 変数関数をグラフにしたときの図形が馬の鞍のようになる場合の話で、ある方向には極小であるがある方向には極大である、という状況になる点である。山の尾根沿いの道に例えてもいいかも知れない。道の左右はどちらを向いても下り坂だが、前後は両方とも上り坂ということがある。そういう点だ。

 その他にも、現在点は水平だが、前には上り坂、後ろには下り坂という状況だってある。上に書いた条件だけではそこまでの判定はできないが、とりあえず、極値になりそうな候補をすべて導き出すことならば出来る。


条件付極値判定

 ではこれに対して、二つほどの束縛条件が加わったらどうなるだろう。
\[ \begin{align*} g( x, y, z ) = 0 \\ h( x, y, z ) = 0 \end{align*} \]
 これでは\( \diff x \)\( \diff y \)\( \diff z \)はそれぞれ独立に、自由には動かせなくなってしまう。\( \diff x \)だけ変化させて\( \diff f \)が変化するかどうかを見たくても、同時に\( \diff y \)\( \diff z \)が動いてしまうのだ。そんな状況で\( \diff f \)が 0 になるところを探さなくてはならない。いやいや、\( \diff f \)が 0 になるところを探せというだけなら前と同じ点が答えだろう。

 問題はもう少し複雑だ。求まった地点は関数\( g \)と関数\( h \)の 2 つの束縛条件を満たす点でなければならないというのが第一に求められている条件だ。

 地形に例えよう。ある範囲の土地の中で無条件に極値を探せ、と言われたら、山の頂上や谷底を見つければいい。しかし、束縛条件はその中で一本の調査コースを指定されるようなものだ。そのコースの中で一番高かった地点、低かった地点、平らだった地点を探す必要がある。そのコース以外の場所の起伏は一切関係ない。頂上や谷底も関係ない。ただ指定されたコース上の上下変化だけが問題になる。

 こういう問題をあっと言う間に解決するテクニックが、「ラグランジュの未定乗数法」だ。


ラグランジュの方法

 やり方はめちゃくちゃ簡単だ。新しい変数\( \alpha \)\( \beta \)を用意して、次のような関数を作る。
\[ \begin{align*} F( x,y,z,\alpha,\beta )\ =\ f( x,y,z )\ +\ \alpha \ g(x,y,z)\ +\ \beta \ h(x,y,z) \end{align*} \]
 この変数\( \alpha \)\( \beta \)が「ラグランジュの未定乗数」と呼ばれるものだ。そして、次の条件式を解く。
\[ \begin{align*} & \pdif{F}{x} = 0 \ \ \ \ \ \ \pdif{F}{y} = 0 \ \ \ \ \ \ \pdif{F}{z} = 0 \\ & \ \ \ \ \ \ \pdif{F}{\alpha} = 0 \ \ \ \ \ \ \pdif{F}{\beta} = 0 \end{align*} \]
 式が 5 つあるので変数\( ( x, y, z, \alpha, \beta ) \)の組み合わせが求まるだろう。その内の\( ( x, y, z ) \)の値がなぜか、知りたかった答えになっている。以上だ。

 ちょっと補足しておこう。上の 5 つの条件式を計算してやると、

\[ \begin{align*} &\pdif{f}{x} + \alpha \pdif{g}{x} + \beta \pdif{h}{x} = 0 \\ &\pdif{f}{y} + \alpha \pdif{g}{y} + \beta \pdif{h}{y} = 0 \\ &\pdif{f}{z} + \alpha \pdif{g}{z} + \beta \pdif{h}{z} = 0 \\ &\ g( x, y, z ) = 0 \\ &\ h( x, y, z ) = 0 \end{align*} \]
である。教科書によってはこちらの書き方をしてあるものもあって、ちょっと複雑な手続きが要るように見えるが、全く同じことを言っているだけだ。

 ここでは 3 変数の関数に対して 2 つの束縛条件を付けたが、2 変数以上の関数になら全く同じようにしてこのテクニックが使えて、束縛条件の数も、変数の数より少なければ幾つでもいい。


少し変わったやり方

 上と同じ内容なのだが、ちょっと変わった応用の仕方がある。関数\( f( x, y, z ) \)の全微分\( \diff f \)と束縛条件\( g( x, y, z ) \)\( h( x, y, z ) \)の全微分\( \diff g \)\( \diff h \)をそれぞれ計算して、
\[ \begin{align*} \diff f + \alpha \diff g + \beta \diff h = 0 \end{align*} \]
という式を作る。この式と、束縛条件\( g = 0 \)\( h = 0 \)さえあれば、上でやったのと同じことが言えるというのである。

 確かめてみよう。全微分というのはそれぞれ、

\[ \begin{align*} \diff f &= \pdif{f}{x} \diff x + \pdif{f}{y} \diff y + \pdif{f}{z} \diff z \\ \diff g &= \pdif{g}{x} \diff x + \pdif{g}{y} \diff y + \pdif{g}{z} \diff z \\ \diff h &= \pdif{h}{x} \diff x + \pdif{h}{y} \diff y + \pdif{h}{z} \diff z \end{align*} \]
であるので、先の式に代入すれば
\[ \begin{align*} &\left( \pdif{f}{x} + \alpha \pdif{g}{x} + \beta \pdif{h}{x} \right) \diff x \\ &\ \ \ +\ \left( \pdif{f}{y} + \alpha \pdif{g}{y} + \beta \pdif{h}{y} \right) \diff y \\ &\ \ \ \ \ \ +\ \left( \pdif{f}{z} + \alpha \pdif{g}{z} + \beta \pdif{h}{z} \right) \diff z\ =\ 0 \end{align*} \]
となる。この式全体が 0 になるためには、左辺の各項が 0 になる必要があるから、確かにこれだけで前にやったのと同じ 3 つの式を計算したことになるわけだ。

 この形式を知っていれば、幾つもの条件式を作って書き並べなくていいので、非常にシンプルに話を進めることができるという利点がある。逆に知らないと、このやり方を見たときに、一体何の計算をやっているのだろうと困惑することになる。


なぜこれで解けるのか

 あまりに簡単なテクニックなので、なぜこれで問題が解決してしまうのかという理由についても簡単に理解できるはずだと思ってしまうだろう。しかしそれほど単純ではないのだ。そこは注意してもらいたい。

 「未定乗数法が理解できない」と思っている学生のほとんどは、やり方さえ分かっていない。なぜなら多くの教科書は、この方法が使える理由の方からじっくりと説明するからだ。そして最後の最後に「・・・そういうわけで、こんな簡単な方法が使えることが分かる」と結論する。しかし、要領の悪い学生はすでに理解することを諦めて逃げ出してしまっている。

 あるいは最近は、あたかも簡単に理解できることであるかのように軽く説明してある参考書も増えてきた。しかしそういう説明には穴が多い。イメージだけ先行して理屈がしっかりしておらず、状況を説明しきれていないのだ。すると、「あたかも簡単なことであるかのような説明をされているにも関わらず、言っていることが理解できないということは、私はよっぽどの馬鹿なのか」と落ち込んでしまう人も出てきてしまうことだろう。

 私は控え目に、2 変数関数で 1 つの束縛条件がある場合についてだけ、この方法が使える理由を説明しておくことにしよう。


2 変数、1 条件の場合

 関数\( f( x, y ) \)がどこで極大、極小を取るかを知りたい。しかし、その地点は関数\( g( x, y ) = 0 \)を満たすような点でなければならない。

 そういう時、グラフを描くといい。\( f( x, y ) = c \)というグラフを描く。\( c \)を変化させることで、このグラフは変化する。もし\( f( x, y ) = x^2 + y^2 \)だったら、円の半径が変わるだろうし、\( f( x, y ) = x + y \)だったら上下に移動することだろう。

 そしてもう一つ、\( g( x, y ) = 0 \)のグラフを描く。求めたい点は、このグラフ上になければならない。\( c \)の値は関数\( f( x, y ) \)の値そのものであり、\( c \)を徐々に増やした時、\( f \)のグラフが\( g \)のグラフに真っ先に接する時、それは\( f( x, y ) \)が極小となる点であるに違いない。\( c \)がそれ以下の値の時には、g との交点はなかったのだから。

 それ以外にも、\( c \)を変化させることによって、いたるところで、\( f \)\( g \)が接するところが見つかるだろう。それが、\( c \)の極大だったり、停留点だったり、極小だったりするわけだ。

 ところで、2 つのグラフが接する時というのは、その地点での 2 つのグラフの傾きは同じになっているはずである。なぜなら、もし傾きが違えば、それは接点にはならず、交点になってしまう。それ以外のところですでに接しているはずだからだ。

 関数\( f( x, y ) \)と関数\( g( x, y ) \)のグラフの傾きを知りたいところだが、もしこれらが\( y = f(x) \)という形で表された陽関数なら、その傾きは微分することで簡単に\( f'(x) \)と求められるのだろうが、残念ながら今考えているのは陰関数である。よって、陰関数定理と呼ばれるものを使って傾きを表すことになる。

\[ \begin{align*} f(x,y)\text{の傾き}\ =\ - \left( \pdif{f}{x} \right)\Big/\left( \pdif{f}{y} \right) \\ g(x,y)\text{の傾き}\ =\ - \left( \pdif{g}{x} \right)\Big/\left( \pdif{g}{y} \right) \end{align*} \]
 定数\( c \)についてはこの微分で消えてしまうので影響はない。これらの傾きが等しいことから、
\[ \begin{align*} \left( \pdif{f}{x} \right)\Big/\left( \pdif{f}{y} \right) \ =\ \left( \pdif{g}{x} \right)\Big/\left( \pdif{g}{y} \right)\ =\ k \end{align*} \]
と書ける。\( k \)はこの後の計算の為に定数として導入した。この式は次の 2 つに分けることが出来る。
\[ \begin{align*} \pdif{f}{x}\ =\ k \pdif{f}{y} \tag{1} \\ \pdif{g}{x}\ =\ k \pdif{g}{y} \tag{2} \end{align*} \]
 (2) 式を 定数\( \alpha \)倍して (1) 式と足し合わせると、
\[ \begin{align*} \pdif{f}{x} + \alpha \pdif{g}{x} = k \left(\pdif{f}{y} + \alpha \pdif{g}{y}\right) \end{align*} \]
となるが、この式が成り立つためには、\( k \)が 0 でない限り、両辺は 0 でないといけない。つまり、
\[ \begin{align*} \pdif{f}{x} + \alpha \pdif{g}{x} = 0 \\ \pdif{f}{y} + \alpha \pdif{g}{y} = 0 \end{align*} \]
である。これに\( g( x, y ) = 0 \)という式を合わせて 3 つを連立すれば、ラグランジュの未定乗数法で使う式そのものである。