Más contenido relacionado
20160319 プログラマのための数学勉強会
- 2. 2016 / 3 / 19 渋谷 dots. Page 2
のセッション今日
簡単な歴史:
むかしむかし、イギリスに Stephen Wolfram という頭の良い少年がいました。彼
は物理が大好きで、12歳の時に自分で物理学の辞書を書きました。
最初の30分は、できるだけ商売抜きでお話します。
で、、、、最後の2分は本日のスポンサーとして、宣伝させてください。
Wolfram Language って聞いたことがあります?
15歳になると彼は量子場理論と素粒子力学を研究し始めました。17歳で、
オックスフォード大学に入ったのですが、卒業することなく大西洋を渡ることを
決心しました。
大陸を横断し、カリフォルニア工科大学に入りました。そこで彼は20歳で素粒
子力学において博士号をとりました(ファインマンらが指導)。そのままカリ
フォルニア工科大学の教授として研究を続けました。その後、イリノイ大学に移
り、教鞭をとっていました。
- 3. Mathematica へ: カリフォルニア工科大学での研究の時に、自分が使う数式の
処理のために、現在の Mathematica の原型となる処理システムを作ったと言われ
ています。
Wolfram Language って聞いたことがあります? > つづき
1986年にイリノイ大学を退職し、このシステムを販売するために Wolfram
Research という会社を作りました。
1987年、 Stephen は NeXT にいた Steve Jobs と出会い、製品の話をしました。
Stephen が考えていた名前は Omega と PolyMath でしたが、 Jobs は「みにくい
名前だ」と言いました。 Sony Trinitron の名前を例に出して、 Jobs は
「 Mathematica 」という名前を提案し、それ以来、 Mathematica という名前に
なったとさ。
続編: それから20年以上がたちました。 Mathematica はぐんぐん育ち、その
数学的機能も、計算能力もパソコンの中に収まりきらなくなりました。
2010年代になって Mathematica の計算能力を活かした Computational
Engine 、 Wolfram|Alpha のサービスが開始しました。さらに世界は広が
り、 Mathematica で記述するための言語も、単なる数学の枠を超え始めたため、
その体系を Wolfram Language とよぶようになりました。
2016 / 3 / 19 渋谷 dots. Page 3
- 4. で、 は の今日 何 話?
Web ページを検索する検索エンジンではない
なんか単語(英語)を入れると、データベース化されている「数値化されているデー
タ」から 何か情報を引っ張ってきてくれる
「 Cheeseburger 」 >>> 何が返ってくる?
「 Today 」 >>> 何が返ってくる?
「 Triangle and circle 」 >>> 何が返ってくる?
「 Triangle in a circle 」 に変えると???
「 How many baseballs fit in a Boeing 747? 」
自然言語的な記述で数式を解いてくれる。可視化してくれる
>> 例は次のページ から
Wolfram | Alpha でできること
まずは、軽いところで、 Woflram|Alpha で遊ぶ方法を見てみます。最近は、ちょ
っと難しいことをさせようとすると、「お金を払うバージョンにしてください」な
んていうようになってしまいましたが、無料で遊べる範囲で使ってみます。
2016 / 3 / 19 渋谷 dots. Page 4
- 5. 次のようなグラフを書いてみます。
「 plot x^3 - 6x^2 + 4x + 12 」
に かしようとすると の次 何 有料 「 PRO にしろと ってくる う む。。」版 言 ! ~
。
もう少し違う関数で
「 plot sin(x)/x 」
x3
-6 x2
+4 x+12
Sin(x)
x
2016 / 3 / 19 渋谷 dots. Page 5
- 6. んじゃ、次は3次元グラフ
「 plot sin(x)*cos(y) 」
インタラクティブには せない。回
表示範囲もこんな感じで指定 (英語そのもの)
「 plot sin(x)*cos(y) from 0 to 10*pi 」
Sin(x) x Cos(y)
Sin(x) x Cos(x) (0<x<10π)
2016 / 3 / 19 渋谷 dots. Page 6
- 7. んじゃ、 Fourier Transform をさせてみる?
「 Fourier transform ln(x) 」
微積分
「 Differential 4*x^3+5*x^2+2*x+7 」
「 Integral 4*x^3+5*x^2+2*x+7 」
構文を気にせず、ほぼ英語の自然言語で表現できるので、プログラミングをしている
感覚はない
これが Wolfram Language ???
2016 / 3 / 19 渋谷 dots. Page 7
- 9. Woflram Mathematica とか、 Mathematica Online
とかで使う、プログラミング言語のことを
「 Wolfram Language 」
と呼びます。
ここまで紹介してきた Wolfram Alpha も、
自然言語 ⇒ Wolfram Language
に変換して、 Mathematica のグリッド
版、 gridMathematica に食わせています。
2016 / 3 / 19 渋谷 dots. Page 9
- 11. Mathematica は他のプログラミング言語で言
うところの IDE と思ってよいでしょう。
作成したファイルはノートブック( .nb )と呼
ばれます。
>>> つまり、自分でノートを書いて次々
と計算をさせていく感じ。思考と実証を繰り
返しながら、計算の目的地に到達するという
のがコンセプトです。
2016 / 3 / 19 渋谷 dots. Page 11
- 12. 2 次元の線グラフを書いてみる1 ( sin(x) )
Python
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(- 2*np.pi, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y)
plt.axes()
plt.show()
2016 / 3 / 19 渋谷 dots. Page 12
- 13. 2 次元の線グラフを書いてみる1 ( sin(x) )
Wolfram Language
Plot[Sin[x], {x, -2*π, 2*π}]
ちょっと座標軸が違うが、まあ
こんな感じ
2016 / 3 / 19 渋谷 dots. Page 13
実際の画面で実際の画面で
- 14. 2 次元の線グラフを書いてみる2 ( a sin(b x) )
Python
前のページのコードに a と b を変化させるスライドバーと、その
移動にあわせてグラフを書くのは結構、行数を書く必要があります。
スライダーを書くだけでも:
Import wx
panel = wx.Panel(frame, wx.ID_ANY)
slider = wx.Slider(panel,
style=wx.SL_HORIZONTAL)
な感じ。
a と b は定数だが、ダイナミックに変えて状態を確認したい
2016 / 3 / 19 渋谷 dots. Page 14
- 15. 2 次元の線グラフを書いてみる2 ( a sin(b x) )
Wolfram Language
Manipulate[Plot[a * Sin[b * x],
{x, -2*π, 2*π}], {a, 1, 3},
{b, 1, 4}]
の1行で OK 。これで a と b を可変にして
変化を見ることができる。
これは結構簡単。
a と b は定数だが、ダイナミックに変えて状態を確認したい
2016 / 3 / 19 渋谷 dots. Page 15
実際の画面で実際の画面で
- 16. 3次元のグラフを動かすぞ ( sin(a x) * cos (b y) )
Python
グラフが3次元になっても同じ。
a と b は定数だが、ダイナミックに変えて状態を確認したい
2016 / 3 / 19 渋谷 dots. Page 16
- 17. 3次元のグラフを動かすぞ ( sin(a x) * cos (b y) )
Wolfram Language
Manipulate[
Plot3D[Sin[a*x]*Cos[b*y],{x, 0, 6*π}, {y, 0, 6*π}],
{a, 1, 3}, {b, 1, 4}]
の1行で OK 。これで a と b を可変にして
変化を見ることができる。
スライダーが動いているときは、描画
速度を上げるために画像が荒くなった
りする。
a と b は定数だが、ダイナミックに変えて状態を確認したい
2016 / 3 / 19 渋谷 dots. Page 17
実際の画面で実際の画面で
- 18. 書く行数が少ないだけでなく、シンボリックに簡単
に計算できる
2016 / 3 / 19 渋谷 dots. Page 18
a x2
+ bx + c = 0 を に を れないまま定数 数値 入 計算
Python
from sympy import *
a = Symbol(‘a’)
b = Symbol(‘b’)
c = Symbol(‘c’)
result = solve(a*x**2 + b*x + c, x)
print(result)
な感じ。結果は、
[(-b + sqrt(-4*a*c + b**2))/(2*a),
-(b + sqrt(-4*a*c + b**2))/(2*a)]
- 20. 微分方程式を解いてみる ( y’(x)+y(x) = a sin(x) )
2016 / 3 / 19 渋谷 dots. Page 20
Python
from sympy import *
a,x = symbols(‘a x’)
y = symbols(‘y’, cls=Fuction)
result = dsolve(Eq(y(x).diff(x)+y(x), a*sin(x)), y(x))
print(result)
な感じ。結果は、
y(x) == (C1 + a*(sin(x) - cos(x)
*exp(x)/2)*exp(-x)
- 21. 微分方程式を解いてみる ( y’(x)+y(x) = a sin(x) )
Wolfram Language
DSolve[y’[x] + y[x] == a Sin[x], y[x], x]
の1行で OK 。
dsolve を実装しだしたのは、 Mathematica が先なんだろうな―、と
想像します。裏を取っていないので、信じないように。
2016 / 3 / 19 渋谷 dots. Page 21
実際の画面で実際の画面で
ちなみに上の入力を Wolfram Alpha
に突っ込むと計算してくれたりする
- 24. 株式会社ヒューリンクス
今日紹介した Wolfram Mathematica を始め、科学
技術研究開発用ソフトを海外から輸入して開発してい
る会社です。
数学・統計・データ系でいうと:
Mathematica 、 Geometry Expressions,
KaleidaGraph 、 IGOR Pro
SigmaPlot 、 Pro Fortran 、 Predictive Modeler
2016 / 3 / 19 渋谷 dots. Page 24