Wolfram Language

Acesso mais produtivo à base de conhecimento

Função especial de rede de derivadas

A Wolfram Language contém mais de 300 funções matemáticas integradas. Considere a operação de diferenciação aplicada a cada uma destas funções. Na maioria dos casos, uma ou mais novas funções aparecem nas derivadas resultantes. A quantificação das conexões resulta em um estudo interessante sobre a relação entre os símbolos e operações sobre elas. Em particular, o exemplo a seguir deriva da rede que surge da diferenciação de ordem inferior.

Conforme aprendido em cálculo elementar, diferenciar o logaritmo natural resulta uma função inversa.

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

Por outro lado, para algumas funções, uma derivada pode ser expressa diretamente através da função original.

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

A propriedade "LowOrderDerivatives" de MathematicalFunctionData oferece acesso rápido e conveniente a todas as derivadas.

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

Colete todas as funções e seus padrões de argumento para identificar a função após a diferenciação. (Para evitar ocorrências comuns de potências, não busque pela potência nem a função de raiz quadrada.) Por exemplo, com base na identidade sec^'(x)=tan(x) sec(x), a função Sec envolve as funções Tan assim como a ela mesma, resultando em duas conexões.

mostre o input completo da 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]=

Analise todas as derivadas, elimine todas as reincidências nos gráficos resultantes e visualize a estrutura gráfica resultante.

mostre o input completo da 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]=

Conte o número de conexões.

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

Ache as reincidências.

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

Encontre os grupos de funções que são fechados sob diferenciação e visualize como gráficos legendados.

mostre o input completo da 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]=

A maioria das funções são parte do componente gigante do gráfico. Passe o mouse sobre os vértices para ver as funções e sobre as bordas para ver as derivadas que conectam as funções.

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 o gráfico em comunidades mostra funções elípticas, funções hipergeométrica, funções de janela, funções zeta, e mais alguns grupos de funções.

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

Exemplos Relacionados

de en es fr ja ko ru zh