Входные функции сети
Язык программирования содержит более 300 встроенных математических функций. Рассмотрим операцию дифференцирования, применяемую к каждой из этих функций. В большинстве случаев, одна или несколько новых функций появляются в качестве производных. Количественный анализ связей между функциями поможет нам получить представление о взаимосвязи между символами и операциями в Wolfram Language. В частности, следующий пример иллюстрирует процесс получения сети функций, которая возникает на базe дифференцирования низкого порядка.
Согласно элементарному курсу математического анализа, путем дифференциации натурального логарифма, получим производную функцию.
D[Log[x], x]
С другой стороны, для выполнения определенных функций, производная может быть выражена непосредственно через исходную функцию.
D[ProductLog[x], x]
Свойство "LowOrderDerivatives" функции MathematicalFunctionData обеспечивает быстрый и удобный доступ ко всем инструментам для работы с производными.
Entity["MathematicalFunction", "EllipticF"][
EntityProperty["MathematicalFunction",
"LowOrderDerivatives"]] // TraditionalForm
Соберем все необходимые функции и их аргументы для того, чтобы определить функцию после дифференциации. Например, на основе уравнения, , функция Sec включает в себя функции Tan, а также саму себя, в результате чего мы получаем два соединения функций.
makeConnection[Entity["MathematicalFunction", "Sec"] ,
Function[{x}, Inactivate[D[Sec[x], x] == Sec[x] Tan[x]]]]
Проанализируем производные и визуализируем полученную структуру на графике.
Посчитаем количество связей.
Flatten[allConnections, 1] // Length
Найдем петли на графике.
selfLoops =
Select[ConnectedComponents[
Graph[Flatten[allConnections /. DirectedEdge -> UndirectedEdge,
1][[All, 1]]]], Length[#] == 1 &]
Найдем группы функций, закрытых в процессе дифференцирования и визуализируем их на графике.
Большинство функций являются компонентами большого графика, показанного ниже. Вы можете навести курсор на вершины индивидуальных компонентов графика, чтобы увидеть функции, и на стороны, чтобы увидеть производные, которые объединяют эти функции.
allConnectionsRest =
Select[Flatten[allConnections, 1],
FreeQ[#,
Alternatives @@
Flatten[{selfLoops, smallLoops}], \[Infinity]] &];
grf = Graph[allConnectionsRest[[All, 1]],
VertexLabels -> Placed["Name", Tooltip],
EdgeLabels -> ((#1 -> Tooltip[" ", Column[#2]]) & @@@
allConnectionsRest),
PerformanceGoal -> "Quality",
ImageSize -> Full]
Разделение графа на сообщества или кластеры показывает несколько видов функций, включающие эллиптические функции, гипергеометрические функции, функции-окна, дзета-функции.
CommunityGraphPlot[grf,
FindGraphCommunities[grf, Method -> "Modularity"]]