Wolfram Language

Umfassenderer Zugang zur Knowledgebase

Ableitungsnetzwerk spezieller Funktionen

Die Wolfram Language enthält mehr als 300 eingebaute mathematische Funktionen. Jede einzelne von ihnen kann differenziert werden. In den meisten Fällen ergeben sich als daraus resultierende Ableitungen eine oder mehrere neue Funktionen. Die Quantifizierung dieser Verbidnungen ist eine interessante Untersuchung der Beziehung zwischen Symbolen und den mit ihnen ausgeführten Operationen. Im folgenden Beispiel wollen wir uns das Netzwerk, das aus Differenzierung niedriger Ordnung entsteht, näher ansehen.

Erinnert man sich an die Grundlagen der Infinitesimalrechnung, so ergibt sich aus der Differenzierung des natürlichen Logarithmus die Kehrwertfunktion.

In[1]:=
Click for copyable input
D[Log[x], x]
Out[1]=

Bei manchen Funktionen kann eine Ableitung auch direkt durch die ursprügliche Funktion ausgedrückt werden.

In[2]:=
Click for copyable input
D[ProductLog[x], x]
Out[2]=

Die "LowOrderDerivatives"-Eigenschaft von MathematicalFunctionData bietet schnellen und bequemen Zugang zu allen Ableitungen.

In[3]:=
Click for copyable input
Entity["MathematicalFunction", "EllipticF"][ EntityProperty["MathematicalFunction", "LowOrderDerivatives"]] // TraditionalForm
Out[3]//TraditionalForm=

Sammeln Sie alle Funktionen und deren Argumente, um die Funktion nach der Differenzierung zu identifizieren. Um häufig vorkommende Potenzen zu vermeiden, lassen Sie die Potenz- und Quadratwurzelfunktion unbeachtet. Auf Basis der Identität sec^'(x)=tan(x) sec(x) ist die Funktion Sec zum Beispiel mit den Tan-Funktionen und mit sich selbst verknüpft, es ergeben sich somit zwei Zusammenhänge.

Den kompletten Wolfram Language-Input zeigen
In[4]:=
Click for copyable input
allFunctions = DeleteCases[MathematicalFunctionData[], Entity["MathematicalFunction", "Sqrt"] | Entity["MathematicalFunction", "Power"]];
In[5]:=
Click for copyable input
patts = EntityValue[allFunctions, EntityProperty["MathematicalFunction", "ArgumentPattern"]];
In[6]:=
Click for copyable input
toPattern[p_] := Activate[Hold @@ { p /. Verbatim[PatternTest][a_, b_] :> a /. Verbatim[Alternatives][a_, __] :> a /. Verbatim[Blank][_] :> _}]
In[7]:=
Click for copyable input
pairs = {#1, toPattern[#2]} & @@@ Transpose[{allFunctions, patts}];
In[8]:=
Click for copyable input
(identify[#2] = #1) & @@@ pairs;
In[9]:=
Click for copyable input
makeConnection[f1_, id_] := Module[{indices, heldSubexpressions, f2List, \[ScriptCapitalF]\[GothicCapitalF]}, indices = Quiet[Cases[ MapIndexed[\[ScriptCapitalF]\[GothicCapitalF], id, {0, \[Infinity]}], _\[ScriptCapitalF]\[GothicCapitalF], \ \[Infinity]][[All, -1]]]; heldSubexpressions = Union[Extract[id, indices, Hold]]; f2List = Union[Last /@ DeleteCases[({#1, identify[#1]} & /@ heldSubexpressions), {_, _identify}]]; {f1 \[DirectedEdge] #, id /. HoldPattern[Function[_, Inactivate[x_]]] :> HoldForm[x]} & /@ f2List]
In[10]:=
Click for copyable input
makeConnection[Entity["MathematicalFunction", "Sec"] , Function[{x}, Inactivate[D[Sec[x], x] == Sec[x] Tan[x]]]]
Out[10]=

Analysieren Sie alle Ableitungen, eliminieren Sie alle trivialen Schleifen in den daraus resultierenden Graphen und visualisieren Sie die entstandene Graphenstruktur.

Den kompletten Wolfram Language-Input zeigen
In[11]:=
Click for copyable input
\[Lambda]F = Length[allFunctions]; Monitor[ allConnections = Table[ fD = allFunctions[[\[ScriptJ]]]; derivatives = Activate[ allFunctions[[\[ScriptJ]]][ EntityProperty["MathematicalFunction", "LowOrderDerivatives"]] /. HoldPattern[Power[E, z_]] :> Exp[z]]; connections = If[derivatives === Missing["NotAvailable"], {}, {#[[1, 1]], SortBy[#[[All, -1]], LeafCount]} & /@ GatherBy[ Flatten[makeConnection[fD, #] & /@ derivatives, 1] // Union, First]], {\[ScriptJ], \[Lambda]F}];, Row[{"function ", \[ScriptJ], " of ", \[Lambda]F, ": ", fD}]];
In[12]:=
Click for copyable input
gr = Graph[Flatten[allConnections, 1][[All, 1]]]
Out[12]=

Zählen Sie die Anzahl der Zusammenhänge.

In[13]:=
Click for copyable input
Flatten[allConnections, 1] // Length
Out[13]=

Finden Sie die Schleifen.

In[14]:=
Click for copyable input
selfLoops = Select[ConnectedComponents[ Graph[Flatten[allConnections /. DirectedEdge -> UndirectedEdge, 1][[All, 1]]]], Length[#] == 1 &]
Out[14]=

Dies sind die Gruppen der Funktionen, die bezüglich die Differenzierung abgeschlossen sind und visualisieren Sie diese als beschriftete Graphen.

Den kompletten Wolfram Language-Input zeigen
In[15]:=
Click for copyable input
smallLoops = Select[ConnectedComponents[ Graph[Flatten[allConnections /. DirectedEdge -> UndirectedEdge, 1][[All, 1]]]], 1 < Length[#] < 20 &];
In[16]:=
Click for copyable input
Graph[Select[Flatten[allConnections, 1], MemberQ[#, Alternatives @@ Flatten[smallLoops], \[Infinity]] &][[ All, 1]], VertexLabels -> ((# -> MapAt[Nothing &, CommonName[#], {{1, 1}}]) & /@ Union[Flatten[smallLoops]])]
Out[16]=

Die meisten Funktionen sind Teil der großen Graphenkomponente. Bewegen Sie die Maus über die Knoten, um die Funktionen zu sehen, und über die Kanten, um die Ableitungen zu sehen, die die Funktionen verbinden.

In[17]:=
Click for copyable input
allConnectionsRest = Select[Flatten[allConnections, 1], FreeQ[#, Alternatives @@ Flatten[{selfLoops, smallLoops}], \[Infinity]] &];
In[18]:=
Click for copyable input
grf = Graph[allConnectionsRest[[All, 1]], VertexLabels -> Placed["Name", Tooltip], EdgeLabels -> ((#1 -> Tooltip[" ", Column[#2]]) & @@@ allConnectionsRest), PerformanceGoal -> "Quality", ImageSize -> Full]
Out[18]=

Wenn Sie den Graphen in Gemeinschaften zerlegen, werden elliptische Funktionen, hypergeometrische Funktionen, Fensterfunktionen, Zeta-Funktionen und einige andere Funktionengruppen sichtbar.

In[19]:=
Click for copyable input
CommunityGraphPlot[grf, FindGraphCommunities[grf, Method -> "Modularity"]]
Out[19]=

Verwandte Beispiele

en es ja ko pt-br ru zh