« 統計学復習メモ9: 主成分分析の計算方法 | メイン | Java servletをPerl CGIに移植してみる »

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

統計学を復習していて、どうやらそれを使わないと非常に難しいらしい問題に突き当たったので、ラグランジュの未定乗数法を復習する。
その響きで一瞬怯んでしまうが、前提条件にさえ気を付ければ使う分には何も難しくない、ロピタルの定理のような便利技である。

どこにでも書いてあるので、わざわざここに書くまでもないが、ラグランジュの未定乗数法とは、x1...xnの関数fが束縛条件g=0の下で極値を持つ時、その極点のx1...xnは、f-λg(λは仮置きの定数)をx1...xnで偏微分したものが0になる値として求めることができるというものである。
数式で書くと、

である。ロピタルの定理同様、考えてみるとミラクルである。

例題として、2008年2月1日にフジテレビから放送された「たけしのコマネチ大学数学科」の第75回の問題を取り上げる。

問:

このような円柱と三角錐を組み合わせた鉛筆形の立体があり、体積が決まると、円柱の半径と円柱・円錐の高さは鉛筆形の表面積が最小になるように決まるとする。円錐部分の稜線の長さ(頂点から円錐面に沿って引いた線の長さ)が3の時、円柱部分の半径はいくらか。

解答:
円柱の半径をx、円柱の高さをy、円錐の稜線の長さをzとすると、表面積Sと体積Vは、中学校で習った公式を思い出すと
S=2¥pi x^2+2¥pi xy+¥pi xz
V=¥pi x^2y+¥frac{¥pi x^2}{3}¥sqrt{z^2-x^2}
と求まる。

まずは失敗の例から。普通に考えると、例えばVの式をyについて解いて、Sの式に代入してyを消して、
S=¥frac{2¥left( 3V-¥pi {x}^{2}¥sqrt{{z}^{2}-{x}^{2}}¥right) }{3x}+¥pi xz+¥pi {x}^{2}
このSを最小にするx,zを求めれば良いのだが、よく見ると1つの式に対して変数がx,z,Vと3つある上、例えばxについて偏微分すると
¥frac{¥partial S}{¥partial x}=-¥frac{¥sqrt{{z}^{2}-{x}^{2}}¥,¥left( 6¥,V-3¥,¥pi ¥,{x}^{2}¥,z-6¥,¥pi ¥,{x}^{3}¥right) +2¥,¥pi ¥,{x}^{2}¥,{z}^{2}-4¥,¥pi ¥,{x}^{4}}{3¥,{x}^{2}¥,¥sqrt{{z}^{2}-{x}^{2}}}
(右辺はMaximaの出力)となり、いわゆる強靭な計算力が必要な状況に陥る。ちなみに、Maximaでz,Vについても偏微分させてそれぞれ=0の連立方程式を解かせると、"system too complicated."というエラーを出してgive upする。

そこでラグランジュの未定乗数法である。
Vという条件の下でSの最小値を求める問題なので、

である。(正確にはVは(V-体積)だが、偏微分で体積が消えるので不要)
yについての式を実際に偏微分すると

となり、λ=2/xが得られる。次に、zについての式を偏微分してλを消去すると、

となり、これにz=3を代入すると、x=√5と求まる。
Vもyもわからないままで良い。なんということであろうか。

今回使ったMaximaへの入力を記録する。

S: %pi*x^2 + 2*%pi*x*y + %pi*x*z;
V: %pi*x^2*y + %pi*x^2*sqrt(z^2-x^2)/3;
diff(S-L*V,x) = 0;
diff(S-L*V,y) = 0;
diff(S-L*V,z) = 0;
solve(diff(S-L*V,y) = 0,x);
eq: diff(S-L*V,z) = 0, L=2/x;
solve(eq,z);
solve(%^2,x);

筆者はこの回の放送を観た時に初めて「ラグランジュの未定乗数法」を理解した。
改めて見ると、実にいい問題だ。まるで表面張力のようだ。

トラックバック

このエントリーのトラックバックURL:
http://ynomura.dip.jp/cgi-bin/mt/mt-tb.cgi/118

この一覧は、次のエントリーを参照しています: ラグランジュの未定乗数法:

» ラグランジュの未定乗数法 送信元 assari (PukiWiki/TrackBack 0.3)
Lagrange multiplier EMANの物理学・解析力学・ラグランジュの未定乗数法 ラグランジュの未定乗数法 (Weblog on mebius... [詳しくはこちら]

コメント (4)

ぼんど:

Maximaの使い方を探していて、立ち寄りました。

ラクランジュ未定乗数法は確かに簡単ですね。
ただ、今回の場合は、最初の方法では解き方を間違っているために、おかしなことになっています。

単に、xを求めるだけであれば、Vが外生変数ですので、問題を解く時には定数で、
あるVに対するx、zの関係がでてきます。Vで偏微分して、解こうとしたら解けません。

1行目から4行目までは基本的に一緒です。
SYというのは、体積をYについて解いたものを代入した式です。
ここで、体積がzに対して最小化するように決まるのですから、zで偏微分してxについて解けば
x=5^(1/2)/3zが求まりますので、z=3をいれれば、x=5^(1/2)となります。

S: %pi*x^2 + 2*%pi*x*y + %pi*x*z;
solve(%pi*x^2*y + %pi*x^2*sqrt(z^2-x^2)/3=V,y);
SY:%pi*x*z+2*%pi*x*(3*V-%pi*x^2*sqrt(z^2-x^2))/(3*%pi*x^2)+%pi*x^2;
assume(z>0);
solve(diff(SY,z)=0,x);

ynomura:

ぼんど様
ご指摘ありがとうございます。
ほんとですね。Vはxやzと独立ではないので、Vで偏微分するのは意味が無いし、ここではVは定数扱いですね。
紙の上でyを消したSの式(SYに相当)の形を見て計算不能と決めつけてましたが、これをzで偏微分するとVが消えるので、確かにdiff(SY,z)=0として解けますね。
しかし、たまたまそうであっただけで、もしSYがxやzで偏微分してVが消えない形なら、やはりSYを最小にするx,zを求めるのは困難なのでは…

ぼんど:

Vは与えられる定数で、その中で解きますので、Vが残った時は、V=の式を作って、それを連立させて消すことで、xとzとの式に帰着できます。

dS/dx=(d/dx) f(x,z,V)=0、dS/dz=(d/dx) f(x,z,V)=0となり、どちらかの式からV=を作り、これを使ってVを消去して、x=g(z)という式を導けばOKです。

ちなみに、未定乗数法というのは、代入法を簡単にしたと考えることができます。
未定乗数法が真価を発揮するのは、与えられた条件が陽に解けない場合です。

f(x,y,z)=0という式があったときに、これを、y=f(x、z)といった形に変形することを陽といいます。f(x,y,z)=0は、各変数の関係が式の中に隠れていますので陰(関数)です。
今回の問題の場合は、y=の形に式が変形できていますので、未定乗数法を使わなくても解くことが容易です。

ところが、式によっては、y=という形に式を変形して、代入できない場合があります。

こういうときは、未定乗数法を使うことで、y=という式を意識しないで問題を解くことができます。(ただし、陰関数定理によって、具体的には陽にできないけれども、理論的にはy=が存在することは保証されないといけません)

例えば、z=f(x,y)という式の極値を、g(x,y)=0という条件下で考える時、条件を書き換えて、y=j(x)という形にできるなら、これを代入することでz=f(x,j(x))という関数になりますので、これを微分して
dz/dx=df/dx+(df/dy)(dj/dx)=0・・・(1)  
とすれば、xが求まります。

ここで、面白いのは、y=j(x)としなくても、g(x,y)=0を用いて未定乗数法を行うと、dj/dxがj(x)という関数を使わずに表現することができます。
j(x)がどんな形かわわかりませんが、あるという前提で、g(x,j(x))=0とします。これを微分すると、dg/dx+(dg/dy)(dj/dx)=0となりますので、式変形すると dj/dx=-(dg/dx)/(dg/dy)です。

この結果を、(1)に代入すると
dz/dx=df/dx+(df/dy)(dj/dx)=df/dx-(df/dy){(dg/dx)/(dg/dy)}=0
となります。
この式のすごいところは、g(x,y)=0という陰関数が与えられれば、それを各変数について陽の形にすることができなくても、変形して代入した時と同じ微分の条件が作れてしまうところです。

ラグランジュ未定乗数法は、未定乗数を使うことで、機械的に上記の計算ができるようになっています。また、未定乗数λにも意味があり、例えば今回の問題でλの値を求めると、それはVを変化させた時に、どれくらいSが変化するかを表しています。

ynomura:

わかり易いご説明ありがとうございます。微分の公式を繙きつつ数式の変形を追って、感動致しました。
なるほど、(f-λg)'=0のλってのはdf/dgのことだったんですね。だからf+λgじゃなくてf-λgなんですか。
2つの陰関数の関係式が、1つの変数だけ陽でそれ以外は陰のままで表すことができるのがすごいですね。変数を1つだけ順に表に出してくることができる感じだと思いました。

dS/dx=0とdS/dz=0からのVの消去についても、理解しました。例えばそれらの2つの微分方程式の両方がVの2次関数だったりするとV=w(x,z)の形にするのは容易ではないのではないか、という疑問だったのですが、Vの式の%pi*x^2*yの部分を%pi*x^2*y^2や%pi*x^2*sqrt(y)にしたり、yの項を増やしたりしてMaximaで試した所、いずれも容易にV=w(x,z)の形にできました。y=f(x,z)と書けた上で本当に上の連立微分方程式からVが消去困難だと、きっとf(x,z)が陽関数とは言えない形をしているのだろうと思いました。

コメント投稿フォーム

※投稿されたコメントはオーナーが承認するまで表示されません。


Powered by Movable Type 3.35