Вычисление якобиана множества комплексных функций в Юлии - PullRequest
1 голос
/ 29 апреля 2020

Я хочу вычислить числовой якобиан сложных функций, используя пакет Julia ForwardDiff.

using ForwardDiff

f(θ,i,u) = [1im *i * exp(-1im * θ), 1im * u * exp(-1im * θ)] # Complex Current and Voltage

z = [1,1,1]
ForwardDiff.jacobian(x -> f(x[1],x[2],x[3]), z)
But when I run this simple example I get the following result:

2×3 Array{Complex{Dual{ForwardDiff.Tag{var"#138#139",Int64},Float64,3}},2}:
Dual{ForwardDiff.Tag{var"#138#139",Int64}}(0.0,0.0,0.0,0.0) + Dual{ForwardDiff.Tag{var"#138#139",Int64}}(0.0,0.0,0.0,0.0)im
...

Я не совсем уверен, что там произошло. Когда я использую реальную функцию для якобиана, я получаю ожидаемый результат.

f(θ,i,u) = [i * exp(-θ), u * exp(-θ)]

z = [10,1,1]
ForwardDiff.jacobian(x -> f(x[1],x[2],x[3]), z)

2×3 Array{Float64,2}:
 -4.53999e-5  4.53999e-5  0.0       
 -4.53999e-5  0.0         4.53999e-5

Затем, прочитав: https://discourse.julialang.org/t/automatic-differentiation-of-complex-valued-functions/30263, я удивляюсь, что сложная функция сработала вообще ...

...