特殊関数の導関数ネットワーク
Wolfram言語は300以上の組込みの数学関数を含んでいる.これらの関数のそれぞれに微分操作を適用することを考えてみよう.多くの場合,微分の結果として1つあるいは複数の新たな関数が現れる. これらの連結を数量化すると,シンボルとその操作の関係の興味深い研究ができる.特に,次の例は低次の微分から発生したネットワークを導き出すものである.
初等微積分で学んだように,自然対数の微分は逆関数を与える.
In[1]:=
D[Log[x], x]
Out[1]=
一方,ある種の関数については,もとの関数から導関数が直接表現できる.
In[2]:=
D[ProductLog[x], x]
Out[2]=
MathematicalFunctionDataの"LowOrderDerivatives" 特性は,すべての導関数に素早く簡単にアクセスできるようにする.
In[3]:=
Entity["MathematicalFunction", "EllipticF"][
EntityProperty["MathematicalFunction",
"LowOrderDerivatives"]] // TraditionalForm
Out[3]//TraditionalForm=
微分後の関数を識別するために,すべての関数とその引数パターンを集める(よく現れるベキを避けるために,ベキ関数と平方根関数は無視する).例えば,恒等式に基づいて,関数Secは関数Tanとそれ自身を含み,結果として2つの連結が作成されることになる.
完全なWolfram言語入力を表示する
In[10]:=
makeConnection[Entity["MathematicalFunction", "Sec"] ,
Function[{x}, Inactivate[D[Sec[x], x] == Sec[x] Tan[x]]]]
Out[10]=
すべての導関数を分析し,自明な自己ループはすべて結果のグラフから除外して,結果のグラフ構造を可視化する.
完全なWolfram言語入力を表示する
Out[12]=
連結数を数える.
In[13]:=
Flatten[allConnections, 1] // Length
Out[13]=
自己ループを求める.
In[14]:=
selfLoops =
Select[ConnectedComponents[
Graph[Flatten[allConnections /. DirectedEdge -> UndirectedEdge,
1][[All, 1]]]], Length[#] == 1 &]
Out[14]=
微分の下で閉じている関数群を求め,ラベル付きのグラフとして可視化する.
完全なWolfram言語入力を表示する
Out[16]=
ほとんどの関数がグラフの巨大成分の一部である.頂点上にマウスを動かすと関数が,辺の上に動かすと関数を連結する導関数が見られる.
In[17]:=
allConnectionsRest =
Select[Flatten[allConnections, 1],
FreeQ[#,
Alternatives @@
Flatten[{selfLoops, smallLoops}], \[Infinity]] &];
In[18]:=
grf = Graph[allConnectionsRest[[All, 1]],
VertexLabels -> Placed["Name", Tooltip],
EdgeLabels -> ((#1 -> Tooltip[" ", Column[#2]]) & @@@
allConnectionsRest),
PerformanceGoal -> "Quality",
ImageSize -> Full]
Out[18]=
グラフをコミュニティに分割して楕円関数,超幾何関数,窓関数,ゼータ関数,その他幾つかの関数を示す.
In[19]:=
CommunityGraphPlot[grf,
FindGraphCommunities[grf, Method -> "Modularity"]]
Out[19]=