Wolfram Language

Acceso enriquecido a la base de conocimiento

Función especial de red de derivadas

Wolfram Language contiene más de 300 funciones matemáticas incorporadas. Considere la operación de diferenciación aplicada a cada una de estas funciones. En la mayoría de los casos, una o más funciones aparecen en las las derivadas resultantes. La cuantificación de las conexiones proporciona un estudio interesante sobre las relaciones entre los símbolos y operaciones en ellas. En particular, el siguiente ejemplo deriva la red que surge de la diferenciación de orden inferior.

Como se estudió en cálculo elemental, diferenciar el logaritmo natural proporciona una función recíproca.

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

Por otro lado, para ciertas funciones, una derivada puede ser expresada directamente por medio de la función original.

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

La propiedad "LowOrderDerivatives" de MathematicalFunctionData proporciona un acceso rápido y conveniente a todas las derivadas.

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

Recoja todas las funciones y sus patrones de argumentos con el fin de identificar la función que le sigue a la diferenciación. (Para evitar ocurrencias comunes de potencias, no busque la potencia ni la función de raíz cuadrada). Por ejemplo, con base en la identidad sec^'(x)=tan(x) sec(x), la función Sec involucra las funciones Tan, así como a sí misma, resultando en dos conexiones.

muestre la entrada completa de Wolfram Language
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]=

Analice todas las derivadas, elimine todos las reincidencias en los grafos resultantes, y visualice la estructura de grafo resultante.

muestre la entrada completa de Wolfram Language
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]=

Cuente el número de conexiones.

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

Encuentre las reincidencias.

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

Encuentre los grupos de funciones que están cerradas bajo diferenciación y visualice como grafos etiquetados.

muestre la entrada completa de Wolfram Language
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]=

La mayoría de las funciones forman parte de un componente gigante del grafo. Coloque el cursor sobre los vértices para ver las funciones y sobre los bordes para ver las derivadas que conectan las funciones.

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]=

Dividir el grafo en comunidades muestra las funciones elípticas, las funciones hipergeométricas, las funciones de ventana, funciones zeta y algunos otros grupos de funciones.

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

Ejemplos relacionados

de en ja ko pt-br ru zh