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

パターン認識と機械学習入門
パターン認識と機械学習入門パターン認識と機械学習入門
パターン認識と機械学習入門Momoko Hayamizu
 
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料Ken'ichi Matsui
 
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列Taketo Sano
 
基礎線形代数講座
基礎線形代数講座基礎線形代数講座
基礎線形代数講座SEGADevTech
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングYuichi Ito
 
強化学習その2
強化学習その2強化学習その2
強化学習その2nishio
 
強化学習その1
強化学習その1強化学習その1
強化学習その1nishio
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介T. Suwa
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計Yoshinori Matsunobu
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
型安全性入門
型安全性入門型安全性入門
型安全性入門Akinori Abe
 
海外ゲーム技術勉強会#1 OGRE3D
海外ゲーム技術勉強会#1 OGRE3D海外ゲーム技術勉強会#1 OGRE3D
海外ゲーム技術勉強会#1 OGRE3DKazuhisa Minato
 
最適化超入門
最適化超入門最適化超入門
最適化超入門Takami Sato
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 

What's hot (20)

パターン認識と機械学習入門
パターン認識と機械学習入門パターン認識と機械学習入門
パターン認識と機械学習入門
 
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料
「ベータ分布の謎に迫る」第6回 プログラマのための数学勉強会 LT資料
 
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
基礎線形代数講座
基礎線形代数講座基礎線形代数講座
基礎線形代数講座
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
 
強化学習その2
強化学習その2強化学習その2
強化学習その2
 
強化学習その1
強化学習その1強化学習その1
強化学習その1
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
海外ゲーム技術勉強会#1 OGRE3D
海外ゲーム技術勉強会#1 OGRE3D海外ゲーム技術勉強会#1 OGRE3D
海外ゲーム技術勉強会#1 OGRE3D
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
HashMapとは?
HashMapとは?HashMapとは?
HashMapとは?
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 

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
 
プログラマのための線形代数再入門
プログラマのための線形代数再入門プログラマのための線形代数再入門
プログラマのための線形代数再入門Taketo Sano
 
ひろ子 in Objective-C
ひろ子 in Objective-Cひろ子 in Objective-C
ひろ子 in Objective-CTaketo 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
 

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