Skip to content

cometscome/Wiltingerderivative.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wiltingerderivative.jl

Build Status

Definition

We consider the complex plane (in a sense of expressing a complex number $z = x+iy$ real numbers $x$ and $y$). The Wirtinger derivatives are defined as the following linear partial differential operators of first order:

$$\begin{align} \frac{\partial f}{\partial z} = \frac{1}{2} \left(\frac{\partial f}{\partial x} - i \frac{\partial f}{\partial y} \right) \\\ \frac{\partial f}{\partial \bar{z}} = \frac{1}{2} \left(\frac{\partial f}{\partial x} + i \frac{\partial f}{\partial y} \right) \end{align}$$

Basic properties

Linearity:

$$\begin{align} \frac{\partial}{\partial z} (\alpha f + \beta g) = \alpha \frac{\partial f}{\partial z} + \beta \frac{\partial g}{\partial z} \\\ \frac{\partial}{\partial \bar{z}} (\alpha f + \beta g) = \alpha \frac{\partial f}{\partial \bar{z}} + \beta \frac{\partial g}{\partial \bar{z}} \end{align}$$

Product rule:

$$\begin{align} \frac{\partial}{\partial z} (f g) = \frac{\partial f}{\partial z} g + f \frac{\partial g}{\partial z} \\\ \frac{\partial}{\partial \bar{z}} (f g) = \frac{\partial f}{\partial \bar{z}} g + f \frac{\partial g}{\partial \bar{z}} \end{align}$$

Chain rule:

$$\begin{align} \frac{\partial}{\partial z} f(g(z)) = \frac{\partial f}{\partial g} \frac{\partial g}{\partial z} + \frac{\partial f}{\partial \bar{g}} \frac{\partial \bar{g}}{\partial z} \\\ \frac{\partial}{\partial \bar{z}} f(g(z)) = \frac{\partial f}{\partial g} \frac{\partial g}{\partial \bar{z}} + \frac{\partial f}{\partial \bar{g}} \frac{\partial \bar{g}}{\partial \bar{z}} \end{align}$$

Examples

$$f(z) = z^4 + 2 z \bar{z} + z$$ $$\begin{align} \frac{\partial f}{\partial z} = 4 z^3 + 2 \bar{z} + 1 \\\ \frac{\partial f}{\partial \bar{z}} = 2 z \end{align}$$

Code examples

a = ComplexField(2+3im)
b = ComplexField(4+im)
c = ComplexField(1+2im)
println(a*b)
println(a*b')
f(x) = real(x)
gnu = numerical_Wiltingerderivative(f,a)
println("Numerical grad: ", gnu)

g = gradient(f,a)[1]
println("Autograd: ", g)
@test abs(gnu-g.z) < 1e-4

f2(x) = real(x*x'+x+x'+x*x*x')
gnu = numerical_Wiltingerderivative(f2,a)
println("Numerical grad: ", gnu)
g = gradient(f2,a)[1]
println("Autograd: ", g)
@test abs(gnu-g.z) < 1e-4

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages