今回は 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