M.Hiroi's Home Page

Julia Language Programming

お気楽 Julia プログラミング超入門

[ Home | Light | Julia ]

線形代数編

●複素数

今回は Julia の複素数について簡単にまとめてみました。

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 Array{Complex{Int64},1}:
 1 + 2im
 3 + 4im

julia> b = [5 + 6im, 7 + 8im]
2-element Array{Complex{Int64},1}:
 5 + 6im
 7 + 8im

julia> conj.(a)
2-element Array{Complex{Int64},1}:
 1 - 2im
 3 - 4im

julia> conj.(b)
2-element Array{Complex{Int64},1}:
 5 - 6im
 7 - 8im

julia> a + b
2-element Array{Complex{Int64},1}:
  6 + 8im
 10 + 12im

julia> a - b
2-element Array{Complex{Int64},1}:
 -4 - 4im
 -4 - 4im

julia> a .* b
2-element Array{Complex{Int64},1}:
  -7 + 16im
 -11 + 52im

julia> a ./ b
2-element Array{Complex{Float64},1}:
 0.2786885245901639 + 0.06557377049180328im
 0.4690265486725664 + 0.035398230088495575im

julia> a .+ c
2-element Array{Complex{Int64},1}:
 2 + 1im
 4 + 3im

julia> a .- c
2-element Array{Complex{Int64},1}:
 0 + 3im
 2 + 5im

julia> a .* c
2-element Array{Complex{Int64},1}:
 3 + 1im
 7 + 1im

julia> a ./ c
2-element Array{Complex{Float64},1}:
 -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 Array{Complex{Int64},2}:
 1+1im  1-1im
 2+3im  2+1im

julia> transpose(a)
2×2 Transpose{Complex{Int64},Array{Complex{Int64},2}}:
 1+1im  2+3im
 1-1im  2+1im

julia> a'
2×2 Adjoint{Complex{Int64},Array{Complex{Int64},2}}:
 1-1im  2-3im
 1+1im  2-1im

julia> adjoint(a)
2×2 Adjoint{Complex{Int64},Array{Complex{Int64},2}}:
 1-1im  2-3im
 1+1im  2-1im

julia> a''
2×2 Array{Complex{Int64},2}:
 1+1im  1-1im
 2+3im  2+1im

julia> b = [1+0im 1+1im; 1-1im 0+1im]
2×2 Array{Complex{Int64},2}:
 1+0im  1+1im
 1-1im  0+1im

julia> (a + b)'
2×2 Adjoint{Complex{Int64},Array{Complex{Int64},2}}:
 2-1im  3-2im
 2+0im  2-2im

julia> a' + b'
2×2 Array{Complex{Int64},2}:
 2-1im  3-2im
 2+0im  2-2im

julia> c
1 - 1im

julia> (c .* a)'
2×2 Adjoint{Complex{Int64},Array{Complex{Int64},2}}:
 2+0im  5-1im
 0+2im  3+1im

julia> conj(c) .* a'
2×2 Array{Complex{Int64},2}:
 2+0im  5-1im
 0+2im  3+1im

julia> (a * b)'
2×2 Adjoint{Complex{Int64},Array{Complex{Int64},2}}:
 1+1im   5-2im
 1-3im  -2-7im

julia> b' * a'
2×2 Array{Complex{Int64},2}:
 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 Array{Complex{Float64},2}:
 -0.3-0.4im   0.3-0.1im
  0.1+0.8im  -0.1-0.3im

julia> inv(a)'
2×2 Adjoint{Complex{Float64},Array{Complex{Float64},2}}:
 -0.3+0.4im   0.1-0.8im
  0.3+0.1im  -0.1+0.3im

julia> inv(a')
2×2 Adjoint{Complex{Float64},Array{Complex{Float64},2}}:
 -0.3+0.4im   0.1-0.8im
  0.3+0.1im  -0.1+0.3im

julia> u = [1+2im, 3+4im]
2-element Array{Complex{Int64},1}:
 1 + 2im
 3 + 4im

julia> v = [5+6im, 7+8im]
2-element Array{Complex{Int64},1}:
 5 + 6im
 7 + 8im

julia> a * u
2-element Array{Complex{Int64},1}:
  6 + 4im
 -2 + 18im

julia> dot(a * u, v)
184 - 126im

julia> dot(u, a' * v)
184 - 126im

Copyright (C) 2021 Makoto Hiroi
All rights reserved.

[ Home | Light | Julia ]