Как отобразить математическую функцию в Юлии? - PullRequest
1 голос
/ 20 июня 2019

Я новичок в Юлии, и я пытаюсь научиться манипулировать исчислением на нем.Как мне поступить, если я вычисляю градиент функции с помощью «ForwardDiff», как показано в приведенном ниже коде, и вижу следующую функцию?Я знаю, что если я введу некоторые значения, это даст мне значение градиента в этой точке, но я просто хочу увидеть функцию (градиент f1).

julia> gradf1(x1, x2) = ForwardDiff.gradient(z -> f1(z[1], z[2]), [x1, x2])
gradf1 (generic function with 1 method)

1 Ответ

1 голос
/ 21 июня 2019

Чтобы пояснить комментарий Фелипе Лемы, вот несколько примеров использования SymPy.jl для различных задач:

@vars x y z
f(x,y,z) = x^2 * y * z
VF(x,y,z) = [x*y, y*z, z*x]

diff(f(x,y,z), x)  # ∂f/∂x

diff.(f(x,y,z), [x,y,z]) # ∇f, gradiant

diff.(VF(x,y,z), [x,y,z]) |> sum  # ∇⋅VF, divergence

J = VF(x,y,z).jacobian([x,y,z])
sum(diag(J))  # ∇⋅VF, divergence

Mx,Nx, Px, My,Ny,Py, Mz, Nz, Pz = J
[Py-Nz, Mz-Px, Nx-My] # ∇×VF

Дивергенция и градиент также являются частью SymPy, но не раскрыты.Их использование является более общим, но громоздким для этой задачи.Например, это находит curl:

import PyCall
PyCall.pyimport_conda("sympy.physics.vector",       "sympy")
RF = sympy.physics.vector.ReferenceFrame("R")

v1 = get(RF,0)*get(RF,1)*RF.x + get(RF,1)*get(RF,2)*RF.y + get(RF,2)*get(RF,0)*RF.z
sympy.physics.vector.curl(v1, RF)
...