今回は Julia の複素数について簡単にまとめてみました。
complex(a, b)
julia> complex(1, 2)
1 + 2im
julia> complex(1.0, 2)
1.0 + 2.0im
julia> complex(1.0)
1.0 + 0.0im
julia> typeof(1 + 2im)
Complex{Int64}
julia> typeof(1.0 + 2im)
Complex{Float64}
julia> a = 1 + 2im
1 + 2im
julia> b = 1 - im
1 - 1im
julia> a + b
2 + 1im
julia> a - b
0 + 3im
julia> a * b
3 + 1im
julia> a / b
-0.5 + 1.5im
julia> a * a
-3 + 4im
julia> a ^ 2
-3 + 4im
julia> a == a
true
julia> a != a
false
julia> a != b
true
julia> real(a)
1
julia> imag(a)
2
julia> abs(a)
2.23606797749979
julia> abs2(a)
5
julia> abs(b)
1.4142135623730951
julia> abs2(b)
2
julia> angle(a)
1.1071487177940904
julia> angle(b)
-0.7853981633974483
julia> cis(0)
1.0 + 0.0im
julia> cis(pi/4)
0.7071067811865476 + 0.7071067811865475im
julia> cis(pi/2)
6.123233995736766e-17 + 1.0im
julia> cis(pi)
-1.0 + 1.2246467991473532e-16im
julia> cis(angle(a))
0.44721359549995804 + 0.8944271909999159im
julia> cis(angle(b))
0.7071067811865476 - 0.7071067811865475im
julia> sqrt(-1 + 0im)
0.0 + 1.0im
julia> sqrt(-2 + 0im)
0.0 + 1.4142135623730951im
julia> sqrt(-1 + 0im) ^ 2
-1.0 + 0.0im
julia> sqrt(-2 + 0im) ^ 2
-2.0000000000000004 + 0.0im
julia> exp(complex(0, pi/4))
0.7071067811865476 + 0.7071067811865475im
julia> exp(complex(0, pi)) + 1
0.0 + 1.2246467991473532e-16im
julia> using LinearAlgebra
julia> a = [1 + 2im, 3 + 4im]
2-element Vector{Complex{Int64}}:
1 + 2im
3 + 4im
julia> b = [5 + 6im, 7 + 8im]
2-element Vector{Complex{Int64}}:
5 + 6im
7 + 8im
julia> conj.(a)
2-element vector{Complex{Int64}}:
1 - 2im
3 - 4im
julia> conj.(b)
2-element Vector{Complex{Int64}}:
5 - 6im
7 - 8im
julia> a + b
2-element Vector{Complex{Int64}}:
6 + 8im
10 + 12im
julia> a - b
2-element Vector{Complex{Int64}}:
-4 - 4im
-4 - 4im
julia> a .* b
2-element Vector{Complex{Int64}}:
-7 + 16im
-11 + 52im
julia> a ./ b
2-element Vector{Complex{Float64}}:
0.2786885245901639 + 0.06557377049180328im
0.4690265486725664 + 0.035398230088495575im
julia> a .+ c
2-element Vector{Complex{Int64}}:
2 + 1im
4 + 3im
julia> a .- c
2-element Vector{Complex{Int64}}:
0 + 3im
2 + 5im
julia> a .* c
2-element Vector{Complex{Int64}}:
3 + 1im
7 + 1im
julia> a ./ c
2-element Vector{Complex{Float64}}:
-0.5 + 1.5im
-0.5 + 3.5im
julia> dot(a, b)
70 - 8im
julia> dot(b, a)
70 + 8im
julia> dot(a, a)
30 + 0im
julia> dot(b, b)
174 + 0im
julia> norm(a)
5.477225575051661
julia> norm(b)
13.19090595827292
julia> a = [1+1im 1-1im; 2+3im 2+1im]
2×2 Matrix{Complex{Int64}}:
1+1im 1-1im
2+3im 2+1im
julia> transpose(a)
2×2 transpose(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
1+1im 2+3im
1-1im 2+1im
julia> a'
2×2 adjoint(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
1-1im 2-3im
1+1im 2-1im
julia> adjoint(a)
2×2 adjoint(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
1-1im 2-3im
1+1im 2-1im
julia> a''
2×2 Matrix{Complex{Int64}}:
1+1im 1-1im
2+3im 2+1im
julia> b = [1+0im 1+1im; 1-1im 0+1im]
2×2 Matrix{Complex{Int64}}:
1+0im 1+1im
1-1im 0+1im
julia> (a + b)'
2×2 adjoint(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
2-1im 3-2im
2+0im 2-2im
julia> a' + b'
2×2 Array{Matrix{Int64}}:
2-1im 3-2im
2+0im 2-2im
julia> c = 1 - 1im
1 - 1im
julia> (c .* a)'
2×2 adjoint(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
2+0im 5-1im
0+2im 3+1im
julia> conj(c) .* a'
2×2 Matrix{Complex{Int64}}:
2+0im 5-1im
0+2im 3+1im
julia> (a * b)'
2×2 adjoint(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
1+1im 5-2im
1-3im -2-7im
julia> b' * a'
2×2 Matrix{Complex{Int64}}:
1+1im 5-2im
1-3im -2-7im
julia> det(a)
-4.0 + 2.0000000000000004im
julia> det(a')
-4.0 - 2.0im
julia> conj(det(a))
-4.0 - 2.0000000000000004im
julia> inv(a)
2×2 Matrix{Complex{Float64}}:
-0.3-0.4im 0.3-0.1im
0.1+0.8im -0.1-0.3im
julia> inv(a)'
2×2 adjoint(::Matrix{ComplexF64}) with eltype ComplexF64:
-0.3+0.4im 0.1-0.8im
0.3+0.1im -0.1+0.3im
julia> inv(a')
2×2 adjoint(::Matrix{ComplexF64}) with eltype ComplexF64:
-0.3+0.4im 0.1-0.8im
0.3+0.1im -0.1+0.3im
julia> u = [1+2im, 3+4im]
2-element Vector{Complex{Int64}}:
1 + 2im
3 + 4im
julia> v = [5+6im, 7+8im]
2-element Vector{Complex{Int64}}:
5 + 6im
7 + 8im
julia> a * u
2-element Vector{Complex{Int64}}:
6 + 4im
-2 + 18im
julia> dot(a * u, v)
184 - 126im
julia> dot(u, a' * v)
184 - 126im