SlideShare una empresa de Scribd logo
1 de 58
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 
勾配降下法の 最適化アルゴリズム
勾配降下法の最適化アルゴリズム勾配降下法の最適化アルゴリズム
勾配降下法の 最適化アルゴリズムnishio
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門Takuji Tahara
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
証明プログラミング超入門
証明プログラミング超入門証明プログラミング超入門
証明プログラミング超入門Kyoko Kadowaki
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみたSatoshi Sato
 
ターン制コマンドバトルにおける強化学習効率化
ターン制コマンドバトルにおける強化学習効率化ターン制コマンドバトルにおける強化学習効率化
ターン制コマンドバトルにおける強化学習効率化gree_tech
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門Eita Sugimoto
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
1072: アプリケーション開発を加速するCUDAライブラリ
1072: アプリケーション開発を加速するCUDAライブラリ1072: アプリケーション開発を加速するCUDAライブラリ
1072: アプリケーション開発を加速するCUDAライブラリNVIDIA Japan
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーYoshifumi Kawai
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)MITSUNARI Shigeo
 

La actualidad más candente (20)

C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
勾配降下法の 最適化アルゴリズム
勾配降下法の最適化アルゴリズム勾配降下法の最適化アルゴリズム
勾配降下法の 最適化アルゴリズム
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
証明プログラミング超入門
証明プログラミング超入門証明プログラミング超入門
証明プログラミング超入門
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
 
PFI会社案内
PFI会社案内PFI会社案内
PFI会社案内
 
ターン制コマンドバトルにおける強化学習効率化
ターン制コマンドバトルにおける強化学習効率化ターン制コマンドバトルにおける強化学習効率化
ターン制コマンドバトルにおける強化学習効率化
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
1072: アプリケーション開発を加速するCUDAライブラリ
1072: アプリケーション開発を加速するCUDAライブラリ1072: アプリケーション開発を加速するCUDAライブラリ
1072: アプリケーション開発を加速するCUDAライブラリ
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
 

Destacado

大人の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
 

Destacado (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 a 虚数は作れる!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 a 虚数は作れる!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
 
さくっと線形代数
さくっと線形代数さくっと線形代数
さくっと線形代数
 

Más de 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
 
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列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
 

Más de 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 (自動変換の野望)
 
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
 
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
 
プログラマのための線形代数再入門
プログラマのための線形代数再入門プログラマのための線形代数再入門
プログラマのための線形代数再入門
 

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