Входные функции сети
Язык программирования содержит более 300 встроенных математических функций. Рассмотрим операцию дифференцирования, применяемую к каждой из этих функций. В большинстве случаев, одна или несколько новых функций появляются в качестве производных. Количественный анализ связей между функциями поможет нам получить представление о взаимосвязи между символами и операциями в Wolfram Language. В частности, следующий пример иллюстрирует процесс получения сети функций, которая возникает на базe дифференцирования низкого порядка.
Согласно элементарному курсу математического анализа, путем дифференциации натурального логарифма, получим производную функцию.
![Click for copyable input](assets.ru/special-function-derivative-network/In_274.png)
D[Log[x], x]
![](assets.ru/special-function-derivative-network/O_185.png)
С другой стороны, для выполнения определенных функций, производная может быть выражена непосредственно через исходную функцию.
![Click for copyable input](assets.ru/special-function-derivative-network/In_275.png)
D[ProductLog[x], x]
![](assets.ru/special-function-derivative-network/O_186.png)
Свойство "LowOrderDerivatives" функции MathematicalFunctionData обеспечивает быстрый и удобный доступ ко всем инструментам для работы с производными.
![Click for copyable input](assets.ru/special-function-derivative-network/In_276.png)
Entity["MathematicalFunction", "EllipticF"][
EntityProperty["MathematicalFunction",
"LowOrderDerivatives"]] // TraditionalForm
![](assets.ru/special-function-derivative-network/O_187.png)
Соберем все необходимые функции и их аргументы для того, чтобы определить функцию после дифференциации. Например, на основе уравнения, , функция Sec включает в себя функции Tan, а также саму себя, в результате чего мы получаем два соединения функций.
![Click for copyable input](assets.ru/special-function-derivative-network/In_283.png)
makeConnection[Entity["MathematicalFunction", "Sec"] ,
Function[{x}, Inactivate[D[Sec[x], x] == Sec[x] Tan[x]]]]
![](assets.ru/special-function-derivative-network/O_188.png)
Проанализируем производные и визуализируем полученную структуру на графике.
![](assets.ru/special-function-derivative-network/O_189.png)
Посчитаем количество связей.
![Click for copyable input](assets.ru/special-function-derivative-network/In_286.png)
Flatten[allConnections, 1] // Length
![](assets.ru/special-function-derivative-network/O_190.png)
Найдем петли на графике.
![Click for copyable input](assets.ru/special-function-derivative-network/In_287.png)
selfLoops =
Select[ConnectedComponents[
Graph[Flatten[allConnections /. DirectedEdge -> UndirectedEdge,
1][[All, 1]]]], Length[#] == 1 &]
![](assets.ru/special-function-derivative-network/O_191.png)
Найдем группы функций, закрытых в процессе дифференцирования и визуализируем их на графике.
![](assets.ru/special-function-derivative-network/O_192.png)
Большинство функций являются компонентами большого графика, показанного ниже. Вы можете навести курсор на вершины индивидуальных компонентов графика, чтобы увидеть функции, и на стороны, чтобы увидеть производные, которые объединяют эти функции.
![Click for copyable input](assets.ru/special-function-derivative-network/In_290.png)
allConnectionsRest =
Select[Flatten[allConnections, 1],
FreeQ[#,
Alternatives @@
Flatten[{selfLoops, smallLoops}], \[Infinity]] &];
![Click for copyable input](assets.ru/special-function-derivative-network/In_291.png)
grf = Graph[allConnectionsRest[[All, 1]],
VertexLabels -> Placed["Name", Tooltip],
EdgeLabels -> ((#1 -> Tooltip[" ", Column[#2]]) & @@@
allConnectionsRest),
PerformanceGoal -> "Quality",
ImageSize -> Full]
![](assets.ru/special-function-derivative-network/O_193.png)
Разделение графа на сообщества или кластеры показывает несколько видов функций, включающие эллиптические функции, гипергеометрические функции, функции-окна, дзета-функции.
![Click for copyable input](assets.ru/special-function-derivative-network/In_292.png)
CommunityGraphPlot[grf,
FindGraphCommunities[grf, Method -> "Modularity"]]
![](assets.ru/special-function-derivative-network/O_194.png)