理系大学生のブログ

学んだことを書いていく

多変数合成関数の微分(連鎖律)の正しい理解

ある2変数関数f:(s,t)\mapsto f(s,t)の変数として、別の関数g:(x,y)\mapsto g(x,y)=(g_1(x,y),g_2(x,y))の値g(x,y)をとった 合成関数の微分\frac{\partial f\circ g}{\partial x}を展開した式は、よく以下のように略記される。

\displaystyle{\begin{eqnarray}
\left(\frac{\partial f\circ g}{\partial x}=\right)
\frac{\partial f}{\partial x}=\frac{\partial f}{\partial g_1}\frac{\partial g_1}{\partial x}+\frac{\partial f}{\partial g_2}\frac{\partial g_2}{\partial x}
\end{eqnarray}}

しかしあくまでこれは略記法であって、記号法として正確さを欠いた部分がいくつかある。

1つ目に、合成関数の微分\frac{\partial f\circ g}{\partial x}を合成する前の関数の微分\frac{\partial f}{\partial x}として表記している。

2つ目に、微分の記号(ライプニッツ記法)の分母の\partialの横に来るものは、分子の\partialの横に来る関数(微分される関数) の独立変数であるべきであり*1\frac{\partial f}{\partial g_1}はこのルールに反している。

略記法の形で連鎖律を覚えていると、いざ具体的な計算をする段になってこのあいまいさで混乱することがある。 例えば、\frac{\partial f}{\partial g_1}の部分を求めるには具体的に何を計算すべきなのか、などで迷うことがある。 この記事では、多変数合成関数の微分(連鎖律)のできるだけ正確な表現に立ち返ることにより連鎖律の正確な理解を得ることを目指す。

連鎖律の正確な表現

冒頭の例を一般化する。関数ff:(y_1,...,y_n)\mapsto f(y_1,...,y_n)とし、 関数gg:(x_1,...,x_m)\mapsto g(x_1,...,x_m)=(g_1(x_1,...,x_m),...,g_n(x_1,...,x_m))としたとき、合成関数f\circ gの変数x_iについての 微分

\displaystyle{\begin{eqnarray}
\frac{\partial f\circ g}{\partial x_i}=\sum_{j=1}^{n}\left(\frac{\partial f}{\partial y_j}\circ g\right)\cdot\frac{\partial g_j}{\partial x_i}
\end{eqnarray}}

この等式は合成関数の全微分の間に行列積の関係があることから導出することができる*2。 この等式は値としての一致ではなく、関数としての一致を表している。黒い点は関数の点ごとの積を表す*3\frac{\partial f}{\partial y_j}\circ ggから合成した合成関数の形になっているのは必然である。もし単にfy_j微分だったら、 左辺はm変数関数の微分なので入力の型はm変数だが、右辺にn個の変数を入力としてとる部分ができてしまう。

略記法の解釈

冒頭で挙げた略記法の不正確さの1つ目について、今扱っている関数が独立な変数のみからなる関数なのか、それともある別の関数を引数に とった合成関数なのかを文脈から判断することで解決可能と思われる。ある関数の独立変数を表す文字を決めておき、微分の分母にその文字がきたら 普通の微分、そうでなければ分母に現れた文字を独立変数にとる関数を合成した合成関数の微分であると解釈する。ただ例えば、ff:(x,y)\mapsto f(x,y)g(s,t)\mapsto g(s,t)=(h(s,t),t)などという形になっているとき、f\circ gの変数tについての微分は略記法では

\displaystyle{\begin{eqnarray}
\frac{\partial f}{\partial t}&=&\frac{\partial f}{\partial h}\frac{\partial h}{\partial t}+\frac{\partial f}{\partial t}\frac{\partial t}{\partial t}\\
&=&\frac{\partial f}{\partial h}\frac{\partial h}{\partial t}+\frac{\partial f}{\partial t}
\end{eqnarray}}

となり、同じ記号\frac{\partial f}{\partial t}で表されるものが両辺をみると食い違っているように見える。このような混乱を避けるには 略記法をあきらめて正確な表現に努めるしかないだろう。(合成関数のほうにはチルダを付けるなど。)

不正確さの2つ目について、これは\frac{\partial f}{\partial g_1}\frac{\partial f}{\partial y_j}\circ gとして解釈することで救える。

まとめ

連鎖律について、略記法で\frac{\partial f}{\partial x}とあらわされているものが正確な表現では合成関数の微分\frac{\partial f\circ g}{\partial x} に対応し、また略記法で\frac{\partial f}{\partial g_1}とあらわされているものは正確な表現では\frac{\partial f}{\partial s}\circ gに対応する。

その他合成関数の微分に関して注意したいこと

以下のサイトの内容が参考になる。そもそも合成関数を微分していると気づきにくい場合について説明している。 www.mynote-jp.com

*1:そうでなければどの変数で偏微分するのか明らかでなくなる。

*2:この記事では導出しない。

*3:「点ごとの積」の意味については Wikipediaの記事などを参照

対数の計算をする際の注意(積の対数を対数の和に分解する公式の前提条件)

次の式変形は正しいだろうか?

\displaystyle{\begin{eqnarray}
\ln{x^2}\stackrel{?}{=}2\ln{x}
\end{eqnarray}}

答えを言うと正しくない。

反例はx=-1のとき、左辺は0であるが、右辺は対数の中身が負の数になり定義できなくなる。

正しくない理由

この式変形は、

\displaystyle{\begin{eqnarray}
\ln{x^k}=k\ln{x}
\end{eqnarray}}

という対数に関する公式を利用したものだと思われるが、公式を適用できる条件を忘れたため間違ってしまった。 この公式が、常に等号が成り立つことを保証しているのはx>0のときのみである。

同様に、

\displaystyle{\begin{eqnarray}
\ln{xy}=\ln{x}+\ln{y}\\
\ln{\frac{x}{y}}=\ln{x}-\ln{y}\\
\end{eqnarray}}

などの公式も、x>0,y>0という条件が必要である。

正しい変形

公式が使えるように、対数の中身を正の数のべき乗に書き直すと、

\displaystyle{\begin{eqnarray}
\ln{x^2}&=&\ln{|x|^2}\\
&=&2\ln{|x|}
\end{eqnarray}}

これが正しい式変形である。*1 (ちなみに1行目右辺の対数の中身が0でないことは、変形前の式の値が定義できることから明らか。)

まとめ

対数の中身に積や商があるときに、対数を和や差の形に分解する公式は積や商の構成要素が正になっているように変形してから用いる。

*1:ある数の2乗のルートには絶対値がつくのと似ている。

VSCodeのMarkdown+Mathでブラケット記法を使う方法

VSCode拡張機能であるMarkdown+Mathを使って、Markdown文書を作成していたところ、 量子力学におけるブラケット記法がなぜか使えなかった。

\bra{\phi}

のように記述しても、プレビューでうまく表示されない。Markdown+Mathが使っているKaTeXは ブラケット記法をサポートしているはずだが・・・。(Supported Functions · KaTeX

setteings.jsonファイルを変更してマクロでコマンドを定義することにより、ブラケット記法を使えるようにした。

ブラケット記法を使えるようにする方法

まず、VSCodeを開いて、ウィンドウ左下の歯車アイコンをクリックして設定を開く。

設定のタブの右上にあるアイコンをクリックしてsettings.jsonを開く。 (マウスオーバーで「設定(JSON)を開く」と表示される方のアイコン)

settings.jsonファイルの一番外側の中括弧の中に、以下の内容を追加する。(すでに他の設定がある場合は、前後にカンマを入れるのを忘れないこと。)

"mdmath.macros": {
        "\\bra":"\\left\\langle#1\\right|",
        "\\ket":"\\left|#1\\right\\rangle",
        "\\braket":"\\left\\langle#1\\middle|#2\\right\\rangle",
        "\\bramket":"\\left\\langle#1\\middle|#2\\middle|#3\\right\\rangle"
    }

保存して、VSCodeをいったん閉じると、次回以降.mdファイルを開いたときにはプレビューでブラケット記法が正常に表示されるようになっている。 ただし、TeXコマンドの名前は上のコードのダブルクオーテーション内で設定したとおりになっているので、好みに合わせて変更すること。

Markdown All in Oneでの数式の書き方、数式の等号のそろえ方

Markdown All in OneはVisual Studio CodeVSCode)の拡張機能の一つであり、 VSCodeMarkdownの文書を書く際に便利なショートカットを提供したり、 プレビューを表示してくれたりする。この拡張機能を使う際の数式の書き方、 また数式の等号のそろえ方(式が複数行にわたるとき)を紹介する。


数式の書き方

インライン数式(文章内に埋め込まれる数式)は

$数式$

のように記述する。

ディスプレイ数式(それ専用の行を使って表示される数式)は

$$
数式
$$

のように記述する。($$で一行使わないとうまくいかない。)

数式は基本的にLaTeXの記法で記述する。例えば分数a/bをインライン数式で書きたかったら、

$\frac{a}{b}$

のように書く。

数式の等号のそろえ方

ディスプレイ数式について、数式が複数行にわたる場合、 等号をそろえたければ以下のように記述する。

$$
\begin{aligned}
数式 &= 数式 \\
&= 数式
\end{aligned}
$$

\begin{align}ではなく\begin{aligned}であることに注意。(KaTeXを使っていることが原因らしい? 詳しいことはわからない。)

像、逆像と包含関係

この記事では、集合の包含関係が像、逆像それぞれをとる操作のもとで 保存されることを示す。具体的には下記の二つの命題を示す。また、 それぞれの逆は成り立たないことを反例を挙げて示す。なお、 前提条件として、写像ff:X\to Yで、集合A,BA,B\subset X、集合C,DC,D\subset Yであるとする。

命題1
A\subset B\Rightarrow f(A)\subset F(B)
命題2
C\subset D\Rightarrow f^{-1}(C)\subset f^{-1}(D)

命題1の証明

\displaystyle{\begin{eqnarray}
y\in f(A)&\Leftrightarrow&\exists x\in A,f(x)=y\\
&\Rightarrow&\exists x\in B,f(x)=y\\
&\Leftrightarrow&y\in f(B)
\end{eqnarray}}

命題2の証明

\displaystyle{\begin{eqnarray}
x\in f^{-1}(C)&\Leftrightarrow&f(x)\in C\\
&\Rightarrow&f(x)\in D\\
&\Leftrightarrow&x\in f^{-1}(D)
\end{eqnarray}}

命題1の逆の反例

命題1の逆は「f(A)\subset f(B)\Rightarrow A\subset B
f:\mathbb{R}\to\mathbb{R}としてf(x)=x^ 2を考える。 ここで

\displaystyle{\begin{eqnarray}
f([1,2])=[1,4]\\
f([-3,-1])=[1,9]
\end{eqnarray}}

f([1,2])\subset f([-3,-1])だが[1,2]\not\subset [-3,-1]。 反例になっている。

命題2の逆の反例

命題2の逆は「f^{-1}(C)\subset f^{-1}(D)\Rightarrow C\subset Df:(0,1)\to\mathbb{R}としてf(x)=xを考える。 ここで

\displaystyle{\begin{eqnarray}
f^{-1} ( (1,2) )=\emptyset\\
f^{-1} ( (0,1) )=(0,1)
\end{eqnarray}}

f^{-1}( (1,2) )\subset f^{-1}( (0,1) )だが(1,2)\not\subset (0,1)。 反例になっている。

2020/06/05現在「逆像 包含関係」でgoogle検索すると上位に出てくるあるサイトには、 命題2の逆も正しいとする記述があるが、誤りだと自分は思う。

レビチビタ記号に関する性質の証明

この記事では、三階のレビチビタ記号(エディントンのイプシロンとも呼ばれる)のいくつかの性質について証明をする。 定義は以下のウィキペディアの記事などを参考にしてほしい。証明する性質はともにウィキペディアの記事に載っており そのどちらも記事に証明がないためここに書くことにした。

エディントンのイプシロン - Wikipedia

今回証明する性質は以下の二つ。(なお記事内のi,j,k,l,m,nは1,2,3のいずれかとする。)

性質1

\displaystyle{\begin{eqnarray}
\epsilon_{ijk}\epsilon_{lmn}=\rm{det}\left(
\begin{array}{ccc}
\delta_{il}&\delta_{im}&\delta_{in}\\
\delta_{jl}&\delta_{jm}&\delta_{jn}\\
\delta_{kl}&\delta_{km}&\delta_{kn}
\end{array}\right)
\end{eqnarray}}

性質2

\displaystyle{\begin{eqnarray}
\sum_{k}\epsilon_{ijk}\epsilon_{lmk}&=&\rm{det}\left(
\begin{array}{cc}
\delta_{il}&\delta_{im}\\
\delta_{jl}&\delta_{jm}
\end{array}\right)\\
&=&\delta_{il}\delta_{jm}-\delta_{im}\delta_{jl}
\end{eqnarray}}

性質1の証明

i,j,kのうちどれか二つ以上が等しいとき

左辺は0。また右辺も例えばi=jのとき第一行と第二行が同じになるため 行列式の性質から0。

i,j,kのうちどの二つも等しくないとき

つまり、(i,j,k)(1,2,3)の置換になっているときである。まず偶置換の場合を考える。 このとき

\displaystyle{\begin{eqnarray}
(\rm{LHS})=\epsilon_{lmn}
\end{eqnarray}}

また右辺について、(i,j,k)が偶置換より偶数回の行の入れ替えを行うことにより、

\displaystyle{\begin{eqnarray}
(\rm{RHS})=\rm{det}\left(
\begin{array}{ccc}
\delta_{1l}&\delta_{1m}&\delta_{1n}\\
\delta_{2l}&\delta_{2m}&\delta_{2n}\\
\delta_{3l}&\delta_{3m}&\delta_{3n}
\end{array}\right)
\end{eqnarray}}

つぎに奇置換の場合を考える。このとき

\displaystyle{\begin{eqnarray}
(\rm{LHS})=-\epsilon_{lmn}
\end{eqnarray}}

また右辺について、(i,j,k)が奇置換より奇数回の行の入れ替えを行うことにより、

\displaystyle{\begin{eqnarray}
(\rm{RHS})=-\rm{det}\left(
\begin{array}{ccc}
\delta_{1l}&\delta_{1m}&\delta_{1n}\\
\delta_{2l}&\delta_{2m}&\delta_{2n}\\
\delta_{3l}&\delta_{3m}&\delta_{3n}
\end{array}\right)
\end{eqnarray}}

よってこの場合、

\displaystyle{\begin{eqnarray}
\epsilon_{lmn}=\rm{det}\left(
\begin{array}{ccc}
\delta_{1l}&\delta_{1m}&\delta_{1n}\\
\delta_{2l}&\delta_{2m}&\delta_{2n}\\
\delta_{3l}&\delta_{3m}&\delta_{3n}
\end{array}\right)
\end{eqnarray}}

を示せばよい。
(l,m,n)(1,2,3)の置換にならないときは先ほどと同様に両辺0になる。
また(1,2,3)の置換になるときは、先ほどと同様にして列を入れ替えれば右辺は単位行列行列式または その符号違いになり両辺が等しくなる。

性質2の証明

i=jのとき

左辺は0。右辺も第一行と第二行が等しくなり0。

i\neq jのとき

左辺について(i,j,k)(1,2,3)の置換になるkのみ生き残る。ここでこの残った項について 性質1を適用すると

\displaystyle{\begin{eqnarray}
(\rm{LHS})&=&\epsilon_{ijk}\epsilon_{lmk}\\
&=&\rm{det}\left(
\begin{array}{ccc}
\delta_{il}&\delta_{im}&\delta_{ik}\\
\delta_{jl}&\delta_{jm}&\delta_{jk}\\
\delta_{kl}&\delta_{km}&\delta_{kk}
\end{array}\right)
\end{eqnarray}}

\delta_{kk}=1またijkと異なるので、余因子展開を用いると

\displaystyle{\begin{eqnarray}
(\rm{LHS})
&=&\rm{det}\left(
\begin{array}{ccc}
\delta_{il}&\delta_{im}&0\\
\delta_{jl}&\delta_{jm}&0\\
\delta_{kl}&\delta_{km}&1
\end{array}\right)\\
&=&\rm{det}\left(
\begin{array}{cc}
\delta_{il}&\delta_{im}\\
\delta_{jl}&\delta_{jm}
\end{array}\right)
\end{eqnarray}}

Overleafでマルチカーソルが使える

Overleafはオンライン上でLaTeXコードが書け、コンパイルもできるサービスで、 LaTeXで文章を作成する際に非常に便利である。 先日Overleafを使っている際に、マルチカーソルが使えることを発見した。

マルチカーソルの出し方

マルチカーソルを追加したいところにカーソルを置いてCtrl+クリックすればよい。

また、Ctrl+Alt+上or下キーで上の行または下の行にマルチカーソルを一つずつ追加していくことができる。