偏微分のパラドクス 〜解析力学の最初の疑問〜

 ここでパラドクスは最初おかしく見えるが真実であるという意味のパラドクスである。

 f(x, y) = x+2y という関数を考えよう。x で偏微分すると 1、yで偏微分すると2である。さて、実は y = 3x という関係があったとする。偏微分は互いに独立な変数と仮定した元で行われるのだから、さっきの計算は誤りであったのだろうか。でも、偏微分を計算する段階で y と x に関係があるかないかなんて予め分からないのではないだろうか。

 そういえば、解析力学のEuler-Lagrange方程式で q, dq/dt で偏微分するが明らかにこの2つは関係しているのに偏微分して良いのだろうか。

 以上の疑問をさくっと解決する。

 ついでにPythonに軽く触れてみよう。Colaboratoryを使うと環境構築しなくてもPythonを即使える。ここで、Colaboratoryを使うとは、Colaboratoryと検索してみて最初にでてきたサイトにアクセスし、サイトの指示に従って登録を済ませ、左上の「ファイル」をクリックして出てきた「ノートブックを新規作成」という項をクリックするという意味である。

 灰色の細長い四角形が上に現れていると思う。それを「セル」と言い、セルにコードを書き、セルの左側にある三角(再生ボタンのマーク)をクリックすると実行される。

def f(x, y):
  return x + 2*y
  
print(f(2, 3))

と書いて実行してみよう。コピペするとなにかエラーが起きるかもしれないので、そのときは面倒だが手打ちしよう。とくにreturnの前の空白の文字数は決まっていてちょうど半角2文字分でないとエラーが起きる。

 上2行で、f(x, y)という関数が定義され (x, y) = (2, 3) のときの f(x, y)の値が表示させている。数字や関数をいじってみると挙動がよくわかるだろう。

 さて次に

def f(x, y):
 return x + 2*y
 
x = 1
y = 2
print(f(x, y))
print(f(2, 3))

とコードをまるごと書き換えてみよう。関数の定義は一緒だが x = 1, y = 2 とした。最初の print ではもちろんその時の f(x, y) の値が表示されている。注目するのは次の print で、x, y の値を決めてしまったが関数 f(x, y) に影響はなく先と同じ値を表示するはずだ。当たり前のことを言っているように感じるかもしれない。

 ここで注意するのは、関数を定めるときに用いた x, y とその後に定めた x = 1, y = 2 の x, y は無関係であるということだ。つまり

def f(a, b):
 return a + 2*b
 
x = 1
y = 2
print(f(x, y))
print(f(2, 3))

と書いたのと状況は変わらない。関数を定めるときに使った変数とたまたま同じ名前が後に現れただけで、Pythonにおいては元の関数の定義にはこのコードと同じ状況で影響を与えない。

 先の偏微分の話も全く同じである。f(x, y) を定義しそして偏微分するところまでのx, y と、実は関係があったという y = 3x の x, y は別物である。先のコードの書き換えと同じく説明すると、f(a, b) = a+2b と定義し a や b での偏微分 ∂f/∂a, ∂f/∂b を考える。そしてその後に、y = 3x の関係のある x, y を代入して f(x, y) (= f(x, 3x)), ∂f(x, y)/∂a, ∂f(x, y)/∂b を考えているということである。もちろん2, 3つ目は a, b で偏微分してから x, y を代入するという意味である。

 Euler-Lagrange方程式も同様である。Lagrangianは例えば L(x, y) という 2変数関数で定義されていて、∂L/∂x, ∂L/∂y を考えてからその x, y に q, dq/dt を代入しているのである。偏微分する変数と代入する変数が同じ文字で表してしまうことが多いので、代入する変数から逆輸入して dq/dt で偏微分するというような煩雑な記号で表現される文化が誕生してしまった。あるいは物理的な分かりやすい道筋からもこの書き方が自然に導かれてしまうのかもしれない。

 以上で解決である。

 ここからはちょっと私の意見になってしまうが、コードを見て感じるのは関数を定義するときの変数と関数に代入する変数が同じ記号だと分かりづらく偏微分も分かりづらいということだ。そこで、偏微分は ∂f/∂x というような変数名で表示するのは止めて何番目の変数で偏微分するか表示すると分かりやすいのではないだろうか。例えば f(x, y) を x で偏微分するとき、関数を定義するまでは x, y を用いて良いが、x すなわち1番目の変数での偏微分は ∂_1 f と表記してはどうだろうか。これなら、代入する変数名と偏微分する変数名がかぶることはなく分かりやすい気がする。

この記事が気に入ったらサポートをしてみませんか?