Skip to content

Instantly share code, notes, and snippets.

@jwscook
Created October 15, 2025 14:03
Show Gist options
  • Save jwscook/0ef2d0164ad9267e23cf2765c78fab00 to your computer and use it in GitHub Desktop.
Save jwscook/0ef2d0164ad9267e23cf2765c78fab00 to your computer and use it in GitHub Desktop.
Complex derivatives in julialang, taking only the first Wirtinger derivative
using ForwardDiff, StaticArrays
function jacobi(f, x)
x_real = @SArray [real(x), imag(x)]
function f_real(v)
z = complex(v[1], v[2])
result = f(z)
return @SArray [real(result), imag(result)]
end
J = ForwardDiff.jacobian(f_real, x_real)
du = complex(J[1,1], J[2,1])
dv = complex(J[1,2], J[2,2])
return du, dv
end
function jacobi(f, x)
x_real = @SArray [real(x), imag(x)]
function f_real(v)
z = complex(v[1], v[2])
result = f(z)
return @SArray [real(result), imag(result)]
end
J = ForwardDiff.jacobian(f_real, x_real)
du = complex(J[1,1], J[2,1])
dv = complex(J[1,2], J[2,2])
return du, dv
end
function wirtinger(f, x)
du, dv = jacobi(f, x)
df_dz = (du - im * dv) / 2
df_dz̄ = (du + im * dv) / 2
return (dz = df_dz, dz̄ = df_dz̄)
end
complexderivative(f, z) = wirtinger(f, z).dz
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment