SlideShare a Scribd company logo
1 of 58
Download to read offline
i2 = 1
学校で習うとき 
i = p−1 
z = a + bi 
1. 虚数単位 i = √-1 がいきなり出てくる 
2. 複素数 z = a + bi の四則演算が定義される 
3. 「数」と思っていた z 
z がベクトルになってる 
4. 「i i 
をかけるのは90度回転です」などと教わる 
5. 以後当たり前のように電流や波の方程式に出てくる
ちょっと待ってくれ… 
i i は「想像上の数」なんだろ…?
そんな長年のモヤモヤを 
今日は全て解消します!
方針 
1. 複素数を最初から2次元ベクトルとして定義する。 
2. i^i2 2 = = -1 1 
となるように 掛け算を入れる。 
3. これが実数を拡大した「数」になることを確認。 
→ 虚数単位 i i 
の「実在を信じる」ことを一切求めない!
で。
1. 複素数を作る
まず2次元ベクトルから出発 
struct Complex { 
let x: Double 
let y: Double 
init(_ x: Double, _ y: Double) { 
self.x = x 
self.y = y 
} 
}
✓ 
x 
y 
2 
z = 
2 
3 
◆ 
3 
let z = Complex(2, 3)
イコールを定義 
struct Complex: Equatable { 
… 
} 
! 
func == (a: Complex, b: Complex) - Bool { 
return (a.x == b.x)  (a.y == b.y) 
}
足し算・引き算・実数倍を定義 
func + (z: Complex, w: Complex) - Complex { 
return Complex(z.x + w.x, z.y + w.y) 
} 
! 
prefix func -(z: Complex) - Complex { 
return Complex(-z.x, -z.y); 
} 
! 
func - (z: Complex, z: Complex) - Complex { 
return Complex(z.x - w.x, z.y - w.y) 
} 
! 
func * (a: Double, z: Complex) - Complex { 
return Complex(a * z.x, a * z.y) 
}
次に1 1 = = 
(1, 0), i = (0, 1) として、 
z = x + yi の形で書けるようにする。 
✓ 
1 
0 
◆ 
i = 
✓ 
0 
1 
◆ 
z = a + bi
まず Double から生成できるようにする 
struct Complex: …, FloatLiteralConvertible { 
… 
static func convertFromFloatLiteral(value: 
FloatLiteralType) - Complex { 
! 
return Complex(value, 0) 
} 
} 
let z: Complex = 2.0 // Complex(2.0, 0)
Int についてもやっておく 
struct Complex: …, IntegerLiteralConvertible { 
… 
static func convertFromIntegerLiteral(value: 
IntegerLiteralType) - Complex { 
! 
return Complex(Double(value), 0) 
} 
} 
let z: Complex = -1 // Complex(-1, 0)
これで実数を複素数に「埋め込んだ」ことになる。 
x 
y 
1 = 
✓ 
1 
0 
◆ 
1 == Complex(1, 0) // true
あとは 定数 i を定義すれば… 
i 
x 
y 
i = 
✓ 
0 
1 
◆ 
let i = Complex(0, 1)
求めていた表現を得る! 
x 
y 
2 = 
✓ 
2 
0 
◆ 
let z = 2 + 3 * i 
3i = 
✓ 
0 
3 
◆ z = 
✓ 
2 
3 
◆ 
= 2+3i
さて、いよいよ掛け算の定義。
複素数の掛け算は、 
実数と同じ計算規則を満たし、かつ、 
i2 = 1 
となるように定義したい。
z z = = a a + + bi, bi,w w = = c c + + di di 
として、積 zw が定義 
できるとすれば、 
zw = (a + bi)(c + di) 
= a(c + di) + bi(c + di) 
分配法則 
= ac + adi + bci + bdi2 
= ac + adi + bci  bd 
分配法則 
= ac  bd + adi + bci 
交換法則 
= (ac  bd) + (ad + bc)i 
分配法則 
とするしかない。 
zw 
i2 = 1
先の式で掛け算を定義してみると… 
struct Complex { … } 
! 
func * (z: Complex, w: Complex) - Complex { 
return Complex(z.x * w.x - z.y * w.y, 
z.x * w.y + z.y * w.x) 
}
ちゃんと「掛け算の要件」を満たしている! 
let α = 3 + 5 * i 
let β = -1 + 4 * i 
let γ = 4 - 7 * i 
! 
α * 1 == α // 1は単位元 
α * β == β * α // 交換法則 
(α * β) * γ == α * (β * γ) // 結合法則 
α * (β + γ) == α * β + α * γ // 分配法則 
当たり前に見えるが、テキトーに定義したのではこうならない。 
これで安心して「数」として扱えるようになる。
i * i == -1 // true 
YES!
割り算も逆数との積で定義 
struct Complex { … } 
! 
func / (z: Complex, w: Complex) - Complex { 
let w_inv = Complex(w.x / (w.x * w.x + w.y * w.y), 
-w.y / (w.x * w.x + w.y * w.y)) 
return z * w_inv 
}
複素数、できました! 
struct Complex: Equatable, IntegerLiteralConvertible, FloatLiteralConvertible { 
let x: Double 
let y: Double 
init(_ x: Double, _ y: Double) { 
self.x = x 
self.y = y 
} 
static func convertFromIntegerLiteral(value: IntegerLiteralType) - Complex { 
return Complex(Double(value), 0) 
} 
static func convertFromFloatLiteral(value: FloatLiteralType) - Complex { 
return Complex(value, 0) 
} 
} ! 
func == (z: Complex, w: Complex) - Bool { 
return z.x == w.x  z.y == w.y 
} ! 
func + (z: Complex, w: Complex) - Complex { 
return Complex(z.x + w.x, z.y + w.y) 
} ! 
prefix func -(z: Complex) - Complex { 
return Complex(-z.x, -z.y); 
} ! 
func - (z: Complex, w: Complex) - Complex { 
return Complex(z.x - w.x, z.y - w.y) 
} ! 
func * (z: Complex, w: Complex) - Complex { 
return Complex(z.x * w.x - z.y * w.y, z.x * w.y + z.y * w.x) 
} ! 
func / (z: Complex, w: Complex) - Complex { 
let w_inv = Complex(w.x / (w.x * w.x + w.y * w.y), -w.y / (w.x * w.x + w.y * w.y)) 
return z * w_inv 
} ! 
let i = Complex(0, -1)
「実在しない数」 
など出てきませんね?
2. さわれる複素数
複素数をおく xy 平面を「複素平面」と呼び、 
x軸を実軸、y軸を虚軸と呼ぶ 
Re 
Im 
z = 2+3i 
2 
3i
複素数 z 
z に対して、 
絶対値 r = |z|, 偏角 θ= arg(z) が定義できる 
Re 
r = |z| ✓ = arg(z) 
Im 
r 
✓ 
z
実装しときましょう 
func abs(z: Complex) - Double { 
return sqrt(z.x * z.x + z.y * z.y) 
} 
! 
func arg(z: Complex) - Double { 
let r = abs(z) 
if(r == 0) { 
return 0 
} 
let t = acos(z.x / r) 
return (z.y = 0) ? t : 2 * M_PI - t 
}
複素数は絶対値と偏角で書ける(極表示) 
Re 
Im 
r 
✓ 
z = r(cos✓ + isin✓) 
rcos✓ 
irsin✓
実装しときましょう 
struct Complex: … { 
let x: Double 
let y: Double 
init(_ x: Double, _ y: Double) { 
self.x = x 
self.y = y 
} 
init(r: Double, θ: Double) { 
self.x = r * cos(θ) 
self.y = r * sin(θ) 
} 
! 
… 
}
さて、極表示で掛け算を書き直してみると…
z = r(cos✓ + isin✓), w = s(cos + isin) 
zw = rs{(cos✓cos  sin✓sin) + i(sin✓cos + cos✓sin)} 
= cos(✓ + ) = sin(✓ + ) 
= rs(cos(✓ + ) + isin(✓ + )) 
に対して、 
つまり…、
「絶対値の積」×「偏角の和」になっていた 
Re 
複素数の掛け算は、 
Im 
r 
✓ 
s 
z 
w 
 
zw 
rs 
zw = rs(cos(✓ + ) + isin(✓ + ))
複素平面を UIView で作ってみよう
class ComplexPlane : UIView { 
! 
var unit: CGFloat = 50.0 
var scale: CGFloat = 1.0 
var points: [String: Complex] = [:] 
var colors: [String: UIColor] = [:] 
subscript(name: String) - (Complex!, UIColor!) { 
get { 
return (points[name], colors[name]) 
} 
set(value) { 
points[name] = value.0 
colors[name] = value.1 
} 
} 
override func drawRect(rect: CGRect) { 
… 
} 
}
let cplane = ComplexPlane(frame: …) 
cplane.scale = 2.0 
! 
cplane[1] = (1, nil) 
cplane[i] = (i, nil) 
! 
let z = Complex(r: 2, θ: M_PI / 3) 
cplane[z] = (z, UIColor.redColor()) 
! 
let w = z * z 
cplane[w] = (w, UIColor.blueColor()) 
! 
cplane.setNeedsDisplay() 
cplane
DEMO : 動かしてみよう! 
https://github.com/taketo1024/SwiftComplex
3. 複素数は美しい
i2 = 1 
そもそもこれはどこから出て来た?
(例) 方程式: x^x2 2 + + x x + + 1 1 = = 0 
0 
5 
2.5 
-10 -7.5 -5 -2.5 0 2.5 5 7.5 10 
-2.5 
この方程式は実数の範囲では解を持たない。 
-5 
y = x2 + x + 1
形式的に2方程式の解の公式を使うと、 
x = −1 ± p12 − 4 · 1 · 1 
p−3 p3i 
ここで √-3 を √3 i と置き換えて: 
は、x^x2 2 + + x x + + 1 1 = = 0 
0 の解になっている。 
2 
= −1 ± p−3 
2 
↵ = −1 + p3i 
2 
, = −1 − p3i 
2
yy == xx^22 ++ xx ++ 11 は xx == α↵, ,β で x 軸と交わっている…? 
5 
2.5 
-10 -7.5 -5 -2.5 0 2.5 5 7.5 10 
-2.5 
-5 
y = x2 + x + 1 
↵? ? 
x, y を複素数と見てグラフを描くには、 
残念ながら我々の世界では次元が1つ足りない。
代わりに、 
Re 
Im 
Re 
Im 
z 
w 
f 
w w = = f(z) f(z) = = z^z2 2 + + z z + + 1 
1 を平面から平面への写像と見て、 
zz の動きにあわせて ww がどう動くか見てみる。
DEMO
Re 
Im 
Re 
Im 
z w 
zz を半径を大きくしながら円上で動かす。
Re 
Im 
Re 
Im 
z w 
半径 1 のときに ww == 00 となる点が2つある。
Re 
Im 
Re 
Im 
↵ 
 
z w 
↵ = −1 + p3i 
2 
, = −1 − p3i 
2 
この2点が α↵,, β で、ff によって 0 に写されていた。
鉛直軸は |z|sin(arg(z)) としている 
z 
w 
w = f(z) = z2 + z + 1 
は平面全体をちょうど2重に覆う写像だった! 
まさに「神のクレープ」
これを実数に制限したものが、 
今まで yy == xx^22 ++ xx ++ 11 だと思っていたもの。 
y = x2 + x + 1 
x 
(放物線を y軸 に潰した形) 
f 
あぁ、なんと不自由な…
f(z) = anzn + ... + a1z + a0 
は平面全体をちょうどn重に覆う写像になる。 
w = z3 + z2  2z + 1 
一般に 
特に 0 に移る z も n 個あることになるので…
代数学の基本定理 
n 次方程式anzn + ... + a1z + a0 = 0 は、 
ちょうど n 個 の複素数解 を持つ!
「数」は複素数まで拡張されて完成を迎える。
今日伝えたかったこと 
• 複素数は作れる、そして美しい。 
• Swift だからこそキレイに作れた。 
• 数学とプログラミングは同時に学ぶべき。
次回予告(?) 
• e, e, π, ⇡, i 
i の饗宴 ~ Swift で学ぶオイラーの公式 
• 無限遠を一点に ~ SceneKit で作るリーマン球面
Thanks! 
@taketo1024

More Related Content

What's hot

サムライスピリッツキャラクター制作事例 キャラクターモデル編
 サムライスピリッツキャラクター制作事例 キャラクターモデル編 サムライスピリッツキャラクター制作事例 キャラクターモデル編
サムライスピリッツキャラクター制作事例 キャラクターモデル編SNK
 
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャDADA246
 
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-Deep Learning JP
 
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編UnityTechnologiesJapan002
 
OpenCV/ARCore/Unityで作る塗り絵AR
OpenCV/ARCore/Unityで作る塗り絵AROpenCV/ARCore/Unityで作る塗り絵AR
OpenCV/ARCore/Unityで作る塗り絵ARTakashi Yoshinaga
 
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列Taketo Sano
 
プログラマのための線形代数再入門
プログラマのための線形代数再入門プログラマのための線形代数再入門
プログラマのための線形代数再入門Taketo Sano
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回Tomoya Kawanishi
 
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスターUnity Technologies Japan K.K.
 
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートIIopenFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートIIAtsushi Tadokoro
 
[DL輪読会]3D Hair Synthesis Using Volumetric Variational Autoencoders
[DL輪読会]3D Hair Synthesis Using Volumetric Variational Autoencoders[DL輪読会]3D Hair Synthesis Using Volumetric Variational Autoencoders
[DL輪読会]3D Hair Synthesis Using Volumetric Variational AutoencodersDeep Learning JP
 
UE4.25のレイトレーシングで出来ること/出来ないこと
UE4.25のレイトレーシングで出来ること/出来ないことUE4.25のレイトレーシングで出来ること/出来ないこと
UE4.25のレイトレーシングで出来ること/出来ないことSatoshi Kodaira
 
はじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTrackingはじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTrackingTakashi Yoshinaga
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013Ryo Sakamoto
 
openFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習BopenFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習BAtsushi Tadokoro
 
mathematical_notation
mathematical_notationmathematical_notation
mathematical_notationKenta Oono
 

What's hot (20)

サムライスピリッツキャラクター制作事例 キャラクターモデル編
 サムライスピリッツキャラクター制作事例 キャラクターモデル編 サムライスピリッツキャラクター制作事例 キャラクターモデル編
サムライスピリッツキャラクター制作事例 キャラクターモデル編
 
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
 
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
[DLHacks LT] PytorchのDataLoader -torchtextのソースコードを読んでみた-
 
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
 
OpenCV/ARCore/Unityで作る塗り絵AR
OpenCV/ARCore/Unityで作る塗り絵AROpenCV/ARCore/Unityで作る塗り絵AR
OpenCV/ARCore/Unityで作る塗り絵AR
 
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
 
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow) UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
 
プログラマのための線形代数再入門
プログラマのための線形代数再入門プログラマのための線形代数再入門
プログラマのための線形代数再入門
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター
 
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートIIopenFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
openFrameworks 動きを生みだす様々なアルゴリズム - 多摩美メディアアートII
 
[DL輪読会]3D Hair Synthesis Using Volumetric Variational Autoencoders
[DL輪読会]3D Hair Synthesis Using Volumetric Variational Autoencoders[DL輪読会]3D Hair Synthesis Using Volumetric Variational Autoencoders
[DL輪読会]3D Hair Synthesis Using Volumetric Variational Autoencoders
 
UE4.25のレイトレーシングで出来ること/出来ないこと
UE4.25のレイトレーシングで出来ること/出来ないことUE4.25のレイトレーシングで出来ること/出来ないこと
UE4.25のレイトレーシングで出来ること/出来ないこと
 
はじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTrackingはじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTracking
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
UE4におけるエフェクトの為のエンジン改造事例
UE4におけるエフェクトの為のエンジン改造事例UE4におけるエフェクトの為のエンジン改造事例
UE4におけるエフェクトの為のエンジン改造事例
 
openFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習BopenFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習B
 
mathematical_notation
mathematical_notationmathematical_notation
mathematical_notation
 
MIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearningMIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearning
 

Viewers also liked

大人のHomekit
大人のHomekit大人のHomekit
大人のHomekitKen Haneda
 
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフーiOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー大介 束田
 
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅Tomoki Hasegawa
 
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahooiOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahooHiramatsu Ryosuke
 
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記yohei sugigami
 
Ios8yahoo swift-json
Ios8yahoo swift-jsonIos8yahoo swift-json
Ios8yahoo swift-jsondankogai
 
Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能Shingo Sato
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までYuki Tanabe
 
iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"智也 大西
 
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahooもしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahooniwatako
 

Viewers also liked (11)

大人のHomekit
大人のHomekit大人のHomekit
大人のHomekit
 
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフーiOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー
 
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
 
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahooiOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahoo
 
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
 
Ios8yahoo swift-json
Ios8yahoo swift-jsonIos8yahoo swift-json
Ios8yahoo swift-json
 
Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips まで
 
iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"
 
既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo
 
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahooもしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
 

Similar to 虚数は作れる!Swift で学ぶ複素数

コードを書けば複素数がわかる
コードを書けば複素数がわかるコードを書けば複素数がわかる
コードを書けば複素数がわかるTaketo Sano
 
何もないところから数を作る
何もないところから数を作る何もないところから数を作る
何もないところから数を作るTaketo Sano
 
複素数・四元数と図形の回転
複素数・四元数と図形の回転複素数・四元数と図形の回転
複素数・四元数と図形の回転Yoshihiro Mizoguchi
 
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)Yoichi Nakayama
 
代数トポロジー入門
代数トポロジー入門代数トポロジー入門
代数トポロジー入門Tatsuki SHIMIZU
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
圏論とプログラミング読書会#2 資料
圏論とプログラミング読書会#2 資料圏論とプログラミング読書会#2 資料
圏論とプログラミング読書会#2 資料53ningen
 
20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算matsumoring
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit ScalaKota Mizushima
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
私を SKI に連れてって
私を SKI に連れてって私を SKI に連れてって
私を SKI に連れてってSusisu
 
2015年度秋学期 応用数学(解析) 第12回 複素関数・正則関数 (2015. 12. 10)
2015年度秋学期 応用数学(解析) 第12回 複素関数・正則関数 (2015. 12. 10)2015年度秋学期 応用数学(解析) 第12回 複素関数・正則関数 (2015. 12. 10)
2015年度秋学期 応用数学(解析) 第12回 複素関数・正則関数 (2015. 12. 10)Akira Asano
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Masahiro Sakai
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装するShuhei Iitsuka
 
introductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysisintroductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysisTatsuki SHIMIZU
 
さくっと線形代数
さくっと線形代数さくっと線形代数
さくっと線形代数Kota Mori
 

Similar to 虚数は作れる!Swift で学ぶ複素数 (20)

コードを書けば複素数がわかる
コードを書けば複素数がわかるコードを書けば複素数がわかる
コードを書けば複素数がわかる
 
何もないところから数を作る
何もないところから数を作る何もないところから数を作る
何もないところから数を作る
 
複素数・四元数と図形の回転
複素数・四元数と図形の回転複素数・四元数と図形の回転
複素数・四元数と図形の回転
 
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
 
代数トポロジー入門
代数トポロジー入門代数トポロジー入門
代数トポロジー入門
 
PRML 10.4 - 10.6
PRML 10.4 - 10.6PRML 10.4 - 10.6
PRML 10.4 - 10.6
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
圏論とプログラミング読書会#2 資料
圏論とプログラミング読書会#2 資料圏論とプログラミング読書会#2 資料
圏論とプログラミング読書会#2 資料
 
20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算20170327_レムニスケートにまつわる色々な計算
20170327_レムニスケートにまつわる色々な計算
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
私を SKI に連れてって
私を SKI に連れてって私を SKI に連れてって
私を SKI に連れてって
 
2015年度秋学期 応用数学(解析) 第12回 複素関数・正則関数 (2015. 12. 10)
2015年度秋学期 応用数学(解析) 第12回 複素関数・正則関数 (2015. 12. 10)2015年度秋学期 応用数学(解析) 第12回 複素関数・正則関数 (2015. 12. 10)
2015年度秋学期 応用数学(解析) 第12回 複素関数・正則関数 (2015. 12. 10)
 
回帰
回帰回帰
回帰
 
Ssaw08 1125
Ssaw08 1125Ssaw08 1125
Ssaw08 1125
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装する
 
introductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysisintroductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysis
 
さくっと線形代数
さくっと線形代数さくっと線形代数
さくっと線形代数
 

More from Taketo Sano

Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...Taketo Sano
 
トポロジーと圏論の夜明け
トポロジーと圏論の夜明けトポロジーと圏論の夜明け
トポロジーと圏論の夜明けTaketo Sano
 
Swift で数学研究のススメ
Swift で数学研究のススメSwift で数学研究のススメ
Swift で数学研究のススメTaketo Sano
 
(意欲的な中高生のための)トポロジー・圏論・コンピュータ
(意欲的な中高生のための)トポロジー・圏論・コンピュータ(意欲的な中高生のための)トポロジー・圏論・コンピュータ
(意欲的な中高生のための)トポロジー・圏論・コンピュータTaketo Sano
 
特性類の気持ち
特性類の気持ち特性類の気持ち
特性類の気持ちTaketo Sano
 
Swift で数学のススメ 〜 プログラミングと数学は同時に学べ
Swift で数学のススメ 〜 プログラミングと数学は同時に学べSwift で数学のススメ 〜 プログラミングと数学は同時に学べ
Swift で数学のススメ 〜 プログラミングと数学は同時に学べTaketo Sano
 
山手線は丸いのか?プログラマのためのトポロジー入門
山手線は丸いのか?プログラマのためのトポロジー入門山手線は丸いのか?プログラマのためのトポロジー入門
山手線は丸いのか?プログラマのためのトポロジー入門Taketo Sano
 
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学Taketo Sano
 
情報幾何学 #2.4
情報幾何学 #2.4情報幾何学 #2.4
情報幾何学 #2.4Taketo Sano
 
情報幾何学 #2 #infogeo16
情報幾何学 #2 #infogeo16情報幾何学 #2 #infogeo16
情報幾何学 #2 #infogeo16Taketo Sano
 
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトobjc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトTaketo Sano
 
何もないところから数を作る
何もないところから数を作る何もないところから数を作る
何もないところから数を作るTaketo Sano
 
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望) objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望) Taketo Sano
 
さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計Taketo Sano
 
基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先Taketo Sano
 
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)objc2swift (自動変換の野望)
objc2swift (自動変換の野望)Taketo Sano
 
2015 02-18 xxx-literalconvertible
2015 02-18 xxx-literalconvertible2015 02-18 xxx-literalconvertible
2015 02-18 xxx-literalconvertibleTaketo Sano
 
let UIWebView as WKWebView
let UIWebView as WKWebViewlet UIWebView as WKWebView
let UIWebView as WKWebViewTaketo Sano
 
ひろ子 in Objective-C
ひろ子 in Objective-Cひろ子 in Objective-C
ひろ子 in Objective-CTaketo Sano
 
Objective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackObjective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackTaketo Sano
 

More from Taketo Sano (20)

Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
Divisibility of Lee’s class and its relation with Rasmussen’s invariant / 201...
 
トポロジーと圏論の夜明け
トポロジーと圏論の夜明けトポロジーと圏論の夜明け
トポロジーと圏論の夜明け
 
Swift で数学研究のススメ
Swift で数学研究のススメSwift で数学研究のススメ
Swift で数学研究のススメ
 
(意欲的な中高生のための)トポロジー・圏論・コンピュータ
(意欲的な中高生のための)トポロジー・圏論・コンピュータ(意欲的な中高生のための)トポロジー・圏論・コンピュータ
(意欲的な中高生のための)トポロジー・圏論・コンピュータ
 
特性類の気持ち
特性類の気持ち特性類の気持ち
特性類の気持ち
 
Swift で数学のススメ 〜 プログラミングと数学は同時に学べ
Swift で数学のススメ 〜 プログラミングと数学は同時に学べSwift で数学のススメ 〜 プログラミングと数学は同時に学べ
Swift で数学のススメ 〜 プログラミングと数学は同時に学べ
 
山手線は丸いのか?プログラマのためのトポロジー入門
山手線は丸いのか?プログラマのためのトポロジー入門山手線は丸いのか?プログラマのためのトポロジー入門
山手線は丸いのか?プログラマのためのトポロジー入門
 
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
 
情報幾何学 #2.4
情報幾何学 #2.4情報幾何学 #2.4
情報幾何学 #2.4
 
情報幾何学 #2 #infogeo16
情報幾何学 #2 #infogeo16情報幾何学 #2 #infogeo16
情報幾何学 #2 #infogeo16
 
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフトobjc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
 
何もないところから数を作る
何もないところから数を作る何もないところから数を作る
何もないところから数を作る
 
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望) objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望)
 
さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計
 
基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先
 
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
 
2015 02-18 xxx-literalconvertible
2015 02-18 xxx-literalconvertible2015 02-18 xxx-literalconvertible
2015 02-18 xxx-literalconvertible
 
let UIWebView as WKWebView
let UIWebView as WKWebViewlet UIWebView as WKWebView
let UIWebView as WKWebView
 
ひろ子 in Objective-C
ひろ子 in Objective-Cひろ子 in Objective-C
ひろ子 in Objective-C
 
Objective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackObjective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & Hack
 

虚数は作れる!Swift で学ぶ複素数