Mathematica v8 の御紹介

中村英史
fusashin@wolfram.com

創設者ステファン・ウルフラムは、15 歳で、素粒子論の学術論文を執筆、オックスフォード大学を17 歳で卒業。20 歳でカリフォルニア工科大学より学位を取得し、カリフォルニア工科大学、プリンストン高等研究所、イリノイ大学で教授を歴任後、1987 年に Wolfram Research Inc. を設立。

1988 年に Mathematica version1.0 をリリース以来、現在では、ノーベル賞受賞者を含めて、世界中で数百万人のユーザー物理、数学、医学、工学、経済学、統計学、社会学など広範囲な分野で Mathematica は活用されている。

Mathematica v8 は研究・教育のプラットフォーム

● コマンド入力と自由形式入力

● オーサリング・ツールとしての Mathematica 

● ダイナミック・インタラクティビティ

● バラエティに富んだ可視化機能と画像処理

● 強力な計算環境：数式処理、数値計算、並列計算、統計解析
 
● 計算可能データ：化学データ、ゲノムデータ、経済データ、等

● 未来の知識エンジン

● 豊富な解説、デモンストレーション、関連する学術情報の無償提供

● コンテンツの配布

コマンド入力と自由形式入力 (Wolfram|Alpha)

シンプルな構文規則

１．全てのコマンド名の先頭は、大文字を使用。　例：PrimeQ (素数判定）
２．計算したいパラメーターは、[    ] 大カッコを使用。
３．リストや範囲は｛　　　｝波カッコを使用。各要素はカンマ (,) で区切る

コマンドをセルに入力して、⇧+⌤ で実行

配列データの作成と平均値の計算

data={1,2,3,4,5,6,7,8,19,31}
Mean[data]

Sin(x) のグラフを x が -2π から 2π までの範囲で描く

Plot[Sin[x], {x, -2 π, 2 π}]

自由形式入力

本社のサーバが自然言語 (英語) を解釈して Mathematica コマンドを生成

オーサリング・ツールとしての Mathematica

計算可能ドキュメントの作成

・プレゼンテーション・パッケージの作成
　・・スタイル・シートの選択
　・・タイトル、サブタイトル、本文の入力とスタイルの編集
　・・スライド・ショーへの変更

・スライド・ショー内でのMathematica コマンドの入力と実行

Factor[x^4-1]

・慣用形表示と計算可能な活字組

Sum[1/2^k, {k, 0, Infinity}]

Limit[(x/n + 1)^n, n -> Infinity]

D[Sin[x*y]^3, {x, 2}, {y, 3}]

Integrate[1/(x^2 + 1), x]

他のアプリケーションとの連携

・多数のデータ形式をサポートする Import[ ] と Export[ ]

$ImportFormats
$ExportFormats

ダイナミック・インタラクティビティ

インタラクティブなGUI

(x+y)^n 乗を n=2,..., と変化させながら展開する

n=2;
Expand[(x+y)^n]

Manipulate[Expand[(x+y)^n],{n,1,100,1}]

正弦波のグラフを -2π から 2π までの範囲で、周波数と振幅を変化させながら、描く

Manipulate[Plot[Amplitude Sin[frequency x],{x,-2π,2π},PlotRange->{-5,5}],{frequency,1,5},{Amplitude,1,5}]

正弦・余弦・正接・余接波のグラフを -2π から 2π までの範囲で、周波数と振幅を変化させながら、描く

Manipulate[Plot[Amplitude Func[frequency x],{x,-2π,2π},PlotRange->{-5,5}],{frequency,1,5},{Amplitude,1,5},{Func,{Sin,Cos,Tan,Cot}}]

グラフィックス

強力な可視化機能：2 次元

複数のグラフで囲まれた領域の表示

Plot[{5Sin[x],5Sin[3 x]},{x,-5,5},Filling->{{1->{{2},Yellow}},{1->2}}]

ベクトル場と流線の表示

Row[{VectorPlot[{x^2+y,x-y^3},{x,-3,3},{y,-3,3}],StreamPlot[{x^2+y,x-y^3},{x,-3,3},{y,-4,4}]}]

等高線の表示

ContourPlot[Sin[x]Sin[x y],{x,0,2π},{y,0,2π}]

画像ファイルを頂点にしたグラフの作成 (食物連鎖)

GraphPlot[{->,->,->,->,->,->,->,->,->,->,->,->,->,->,->,->},VertexLabeling->True,DirectedEdges->True,ImageSize -> 700]

強力な可視化機能：3 次元

原点が特異点のグラフの表示とカラー・オプション

Row[{Plot3D[((Sin[x y])/(Sqrt[(x^2)+(y^2)])),{x,-3,3},{y,-3,3}],Plot3D[((Sin[x y])/(Sqrt[(x^2)+(y^2)])),{x,-3,3},{y,-3,3},ColorFunction->"Rainbow"]}]

陰関数で表された曲面や領域の表示

Row[{ContourPlot3D[x^2+y^2+1/4z^2==1,{x,-2,2},{y,-2,2},{z,-2,2}],RegionPlot3D[x^2+y^2+z^2<1&&x^2+y^2<z^2,{x,-1,1},{y,-1,1},{z,-1,1},PlotPoints->100,PlotRange->{{-1,1},{-1,1},{-1,1}}]}]

テクスチャ・マッピング

SphericalPlot3D[{1,2,3},{θ,0,π},{ϕ,0,3Pi/3},Mesh->None,Boxed->False,Axes->None,Background->Black,Lighting->{{"Ambient",White}},PlotStyle->Texture[Rotate[,90Degree]],ViewPoint->{0,30,.87},RotationAction->"Clip"]

トーラス

RevolutionPlot3D[{2+Cos[t],Sin[t]},{t,0,2Pi},Mesh->None,Boxed->False,Axes->None,Background->Black,RotationAction->"Clip",ImageSize->{400,400}]

トーラスにイメージを貼り付ける

RevolutionPlot3D[{2+Cos[t],Sin[t]},{t,0,2Pi},Mesh->None,Boxed->False,Axes->None,Background->Black,Lighting->{{"Ambient",White}},PlotStyle->Texture[],RotationAction->"Clip",ImageSize->{400,400}]

流線場を

StreamPlot[Evaluate[-D[(x^2+y^2) Exp[1-x^2-y^2],{{x,y}}]],{x,-3,3},{y,-3,3},Frame->None,StreamStyle->Black,ImageSize->400]

曲面に

Plot3D[(x^2+y^2) Exp[1-x^2-y^2],{x,-3,3},{y,-3,3},Mesh->None,PlotPoints->35]

テクスチャ・マッピングする

Plot3D[(x^2+y^2) Exp[1-x^2-y^2],{x,-3,3},{y,-3,3},PlotStyle->Texture[StreamPlot[Evaluate[-D[(x^2+y^2) Exp[1-x^2-y^2],{{x,y}}]],{x,-3,3},{y,-3,3},Frame->None,StreamStyle->Black]],ImageSize->400,Mesh->None,PlotPoints->35]

Lighting オプションによる光計算

myspheres = Table[{RGBColor[Random[], Random[], Random[]], Specularity[White, 128], Sphere[{x, y, z}, 1]}, {x, 0, 10, 4}, {y, 0, 10, 4}, {z, 0, 10, 4}]; Manipulate[Graphics3D[{White, PointSize[.02], Point[{t[[1]], t[[2]], 5}], myspheres}, Background -> Black, Boxed -> False, Lighting -> {RGBColor[.3, .3, .3], {White, {{{t[[1]], t[[2]], 5}, {0, 0, 0}}, 2}}}, PlotRange -> {{-1, 10}, {-1, 10}, {-1, 10}}, ImageSize -> 500], {t, {-15, -15}, {20, 20}}, SaveDefinitions -> True]

強力な可視化機能：画像処理

画像の入力は  Import[ ]  / コピー＆ペースト / ドラッグ＆ドロップ

フォトレタッチ

Row[{ImageEffect[ ,"OilPainting"],"    ",
ImageEffect[,{"MotionBlur",15}]}]

2 つの画像の積

ImageMultiply[,]

2 つの画像間の内挿

Manipulate[
ImageAdd[ImageMultiply[,t],ImageMultiply[,1-t]],{t,0,1}]

LOG フィルター (σ=1.0) を掛けた後、境界検出をする

ContourDetect[LaplacianGaussianFilter[,1],0.08]

ウェブカメラと画像処理

CurrentImage[]

Dynamic[CurrentImage[]]

計算

強力な計算環境：数式処理

通常では計算できない巨大桁数の掛け算

123 44444444444444444444444444442222555

π の平方根を 100 桁まで表示

N[(Sqrt[π]),100]

微分

Clear[x,y];
D[((Sin[x y])^3),{x,2},{y,3}]

積分

Integrate[1/(1-x^3),x]

Solve[ ] を使って、方程式の厳密解を求める

Clear[a,b,c];
sol=Solve[e (x^4)+d (x^3)+c (x^2)+b x+a==0,x]

DSolve[ ] を使って、微分方程式の厳密解を求める

Remove[x,y,t];
DSolve[{x'[t]==-2y[t]+3x[t],y'[t]==15x[t]-y[t],x[0]==a,y[0]==b},{x,y}, t]

微分方程式の厳密解を可視化する

ParametricPlot[Table[{x[t], y[t]}/.%/.{a->1/(13+m), b->1/(15+m)}, {m,0,20,7}], {t,-2,2},Evaluated->True]

自由形式入力では

行列はリストのリスト

Table[10i+j,{i,4},{j,3}]

行列の入力

(a)

行列の掛け算

(Subscript[matrix, 1])=(({{0, 1, -1}, {-1, 3, -1}, {2, -1, 2}}));
(Subscript[matrix, 2])=(({{1, 2, -2, -1}, {2, 0, 1, 3}, {-1, 3, 1, -4}})); 
(Subscript[matrix, 1]).(Subscript[matrix, 2])//MatrixForm

0 から 10 の整数の乱数を要素とする行列を作成し、行列式と逆行列を求める

(Subscript[matrix, 3])=RandomInteger[10,{5,5}]
Det[(Subscript[matrix, 3])]
Inverse[(Subscript[matrix, 3])]//MatrixForm

Jordan 分解：m → {s, j} ( j は m のジョルダン標準形、m=s.j.(s^(-1))) を出力する

(Subscript[matrix, 4])={{1,0,0,0},{0,1,0,0},{1,-1,1,0},{1,-1,1,1}};
(Subscript[matrix, 4])//MatrixForm
MatrixForm/@JordanDecomposition[(Subscript[matrix, 4])]

特異値分解：m → {u, w, v} ( w は 対角行列、m=u.w.(v^T)) を出力する

(Subscript[matrix, 5])={{1,2},{3,4},{4,6}};
(Subscript[matrix, 5])//MatrixForm
MatrixForm/@SingularValueDecomposition[(Subscript[matrix, 5])]

強力な計算環境：数値計算

Mathematica は、GMP / LAPACK / BLAS などの数値解析ライブラリを使用しており、数値計算において優れたパフォーマンスを発揮する。NDSolve[ ] / NIntegrate[ ] / Interpolation[ ] など各種の数値演算関数は、最適な数値解析ライブラリを選択して処理する

特異点のある重積分

NIntegrate[(1/(Sqrt[(x1/3)+(x2/2)+(x3/2)+(x4/10)])),{x1,0,1},{x2,0,1},{x3,0,1},{x4,0,1}]

1000 次元の線形方程式の数値解

mat=RandomReal[{1,0},{1000,1000}];
b=RandomReal[{0,1},{Length[mat]}];
Timing[invmatb=LinearSolve[mat,b]]

常微分方程式を数値積分して解を滑らかにプロットする

s=NDSolve[{y'[x]==y[x]Cos[x+y[x]],y[0]==1},y,{x,0,30}]
Plot[Evaluate[y[x]/.s],{x,0,30},PlotRange->All]

パラメータ付きの常微分方程式の数値積分

ss[a_]:=NDSolve[{y'[x]==y[x]Cos[x+a y[x]],y[0]==1},y,{x,0,30}]
Manipulate[Plot[Evaluate[y[x]/.ss[a]],{x,0,30},PlotRange->{0,3.0}],{a,0,2}]

拡散方程式の数値解と可視化

NDSolve[{(∂_t)u[t,x]==(∂_(x,x))u[t,x],u[0,x]==0,u[t,0]==Sin[t],u[t,5]==0},u,{t,0,10},{x,0,5}]
Manipulate[Plot[Evaluate[u[t,x]/.%],{x,0,5},PlotRange->1],{t,0.1,10}]

強力な計算環境：並列計算

Parallelize コマンドによる並列計算

Parallelize[(∑_(i=1)^250)i!]

並列計算が不可能な場合は通常の計算を行なう

Parallelize[∫((1+x^4)/(x^9+3x))\[DifferentialD]x]

メルセンヌ数の素数判定関数と 2,300 以下のメルセンヌ素数の表示と計算時間

MersennePrimeQ[n_Integer]:=PrimeQ[(2^n)-1];

AbsoluteTiming[Select[Range[2300], MersennePrimeQ]]

実行する関数を複数のコアに分配してから、並列計算を実行する (AbsoluteTiming[ ] による計算速度計測)

DistributeDefinitions[MersennePrimeQ];

AbsoluteTiming[Parallelize[Select[Range[2300], MersennePrimeQ]]]

v8 では、GPU をサポートし、より強力な並列計算を実行する

強力な計算環境：統計処理

バー・チャート、パイ・チャート、バブル・チャート

りんご=;梨=;さくらんぼ=;
Row[{
BarChart[{{1,3,2},{1,6,3}},ChartElementFunction->"GlassRectangle",ChartStyle->"Pastel"],BarChart[{{6,3,2},{2.5,4.3,3.7}},
ChartLegends->{"売り上げ：さくらんぼ", "売り上げ：りんご", "売り上げ：梨"},ChartElements->{{さくらんぼ,{1,1}},{りんご,{1,1}},{梨,{1,1}}},ChartLabels->{{"6 月","7 月"},{""}}],PieChart[Range[5],ChartStyle->"Rainbow"],BubbleChart[RandomInteger[{10,80},{10,10,3}]]
}]

バー・チャート、パイ・チャート、バブル・チャートとも三次元化が可能

Row[{
BarChart3D[{{1,3,2},{1,6,3}},ChartLegends->{"Set 1", "Set 2", "Set 3"}],
PieChart3D[Range[5],ChartStyle->"Rainbow"],
BubbleChart3D[RandomInteger[{10,80},{10,10,4}]]
}]

パラメータを含んだ既知分布による期待値

ExpectedValue[(x^4)+(x^2),PoissonDistribution[μ],x]

強力な計算環境：統計モデル

ランダム・データの線形回帰

regressdata={0.63,0.661,0.680,1.27,1.90,1.595,1.59,1.31,2.46,2.48,3.33,3.267,3.547,4.612,5.244,5.04,6.41,6.22,6.529,8.049,8.717};
mymodel1=LinearModelFit[regressdata,x,x];
mymodel2=LinearModelFit[regressdata,{x,x^2},x];
Through[{mymodel1,mymodel2}["ANOVATable"]]
Show[ListPlot[regressdata],Plot[{mymodel1[x],mymodel2[x]},{x,1,20}]]

クラスター分析

newdata={{-1.1,2.6},{3.9,-0.8},{4.2,-3.7},{3.3,3.5},{3.9,5.2},{4.1,-4.8},{3.8,3.7},{5.6,0.1},{3.1,-5.2},{-0.9,2.3},{2.9,4.1},{-2.3,3.9},{-2.5,3.},{2.6,-5.5},{5.2,1.9},{-0.7,1.3},{0.9,2.8},{-1.5,3.3},{3.8,1.2},{2.6,-5.1},{-0.8,3.2},{4.7,0.7},{3.,3.},{3.9,3.6},{4.5,1.4},{4.2,1.3},{-1.1,2.6},{4.8,2.4},{3.3,-3.5},{3.2,-4.6},{3.3,-4.9},{3.,3.5},{0.7,2.1},{3.2,-4.3},{-2.,0.5},{-1.2,2.},{-1.6,1.8},{-3.5,3.7},{4.8,0.2},{3.3,2.4},{-0.1,2.1},{-1.3,2.5},{4.4,3.9},{3.5,0.2},{0.1,2.9},{-1.,1.6},{-1.4,4.5},{3.2,2.5},{-1.6,2.4},{2.6,-5.1}};
ListPlot[FindClusters[newdata],PlotStyle->PointSize[Large]]

強力な計算環境：その他

シンセサイザーによる演奏

Row[{Sound[SoundNote[#,0.5,"Polysynth"]&/@{0,0,{7,4},{7,4},{9,5},{9,5},{7,4},None,{5,2},{5,2},{4,0},{4,0},{2,-4,-7},{2,-4,-7},{0-5,-8},None}],Sound[SoundNote/@RandomInteger[12,20],2.5]}]

セルラー・オートマトンによる炎のモデル

Manipulate[
s=6;DL=Table[Eigenvalues[Mod[Round[SeedRandom[a];RandomReal[{0,r},{s,s}]+CellularAutomaton[99,
PadRight[IntegerDigits[k,2],s],{{0,s-1}}]],2]],{k,1,(2^s)-1}];
ListDensityPlot[((Abs[DL])^n)//Transpose,PerformanceGoal->q,InterpolationOrder->3,ColorFunction->g,PlotRange->All,ImageSize->{500,125},AspectRatio->1/4,Frame->False],
{{a,1,"animate"},1,∞,1,ControlType->Trigger},
{{r,.51,"turbulence"},.5,1,.01},
{{n,1,"strength"},3,.05,.05},
{{q,"Quality","type"},{"Quality"->"flames","Speed"->"coals"}},
{{g,"SunsetColors","color"},{"SunsetColors"->"sunset colors","TemperatureMap"->"temperature map","SolarColors"->"solar colors","CherryTones"->"cherry tones"}},
TrackedSymbols->True]

データと処理

計算可能データ：化学

インターネットを経由して Wolfram 本社のサーバに接続してデータを取得

ChemicalData[]

カフェインの化学的性質

ChemicalData["Properties"]
ChemicalData["Caffein","MeltingPoint"]
ChemicalData["Caffein","MoleculePlot"]

自由形式入力では

計算可能データ：ライフ・サイエンス

たんぱく質のデータの取得。例として NAT1 の分子量と SERPINA3 の分子模型を表示

ProteinData []
ProteinData["NAT1","MolecularWeight"]
ProteinData["SERPINA3","MoleculePlot"]

ゲノム・データの取得。例として遺伝子シンボル ZXDB の遺伝子名と、ZXDB が存在する染色体を表示

GenomeData[]
GenomeData["ZXDB","Name"]
GenomeData["ZXDB","Chromosome"]

DNA の配列断片を検索

GenomeLookup["GATTACA"]

計算可能データ：金融・経済・地理・気象データ

株価や国内総生産のデータ (ほぼリアル・タイム) を取得して表示

Needs["PlotLegends`"]
Row[{
DateListPlot[FinancialData["GOOG","2010"],Filling->Bottom,Joined->True,PlotLabel->"Stock price of Google"],
Text["         "],
DateListPlot[{CountryData["Japan",{{"GDP"},{1970,2011}}],CountryData["China",{{"GDP"},{1970,2011}}]},Joined->True,PlotLabel->"GDP of Japan and China",PlotLegend->{"Japan","China"},LegendPosition->{1.0,-0.4}]
}]

トレーディング・チャートによる株価の可視化

InteractiveTradingChart[{"GOOG",{2011,1,1}}]

国に関するデータを取得

CountryData [ ]

知ることができる国の情報

CountryData ["Properties" ]

ウガンダの国旗と国の形と、国内の鉄道の線路総距離 (km)

Row[Map[CountryData ["Uganda",#1]&,{"Flag","Shape","RailwayLength"}],"       "]

大阪の気温と湿度

Row[{
DateListPlot[WeatherData ["Osaka","Temperature",{2010,12}],Joined->True, PlotLabel->{"Temperature"}],
DateListPlot[WeatherData["Osaka","Humidity",{2010,12}],Joined->True,PlotLabel->{"Humidity"}]}
,"       "]

各国の貧困率を色付けして世界地図上に表示

map=Graphics[{EdgeForm[Opacity[0.5]],({FaceForm[ColorData["TemperatureMap"][2CountryData[#,"PovertyFraction"]/._Missing->1/4]],CountryData[#,"SchematicPolygon"]}&)/@CountryData[]}]

各国の貧困率を色付けして世界地球儀上に表示

ParametricPlot3D[{Cos[u] Sin[v],Sin[u] Sin[v],Cos[v]} ,{u,0,2Pi},{v, 0,Pi}, Mesh->None,Boxed->False,TextureCoordinateFunction->({#4,1-#5}&),PlotStyle->Texture[Show[map,ImageSize->1000]],Lighting->"Neutral",Axes->False,RotationAction->"Clip"]

自由形式入力では

この他、元素・素粒子・天文・数学・言語データも使用可能

未来の知識エンジン

自由形式入力と Wolfram|Alpha

クエリに対するコンテンツ作成

豊富なリソース

ユーザが作成したデモンストレーション

Demonstration Projects (http://demonstrations.wolfram.com/)

豊富な Mathematica のリソース

● ウルフラム・アルファ (http://www.wolframalpha.com/)

● CDF (Computable Document Format) (http://www.wolfram.com/cdf)

● ヘルプ・ファイルのウェブ版 (http://reference.wolfram.com/cdf)

● ウルフラム・テクノロジー・ガイド (http://www.wolfram.com/technology/guide/compute.ja.html)

● Wolfram Mathematica ラーニング・センター (http://www.wolfram.com/learningcenter/index.ja.html) 

● Demonstration Site (http://www.demonstrations.wolfram.com/)

● Wolfram Faculty Program (http://www.wolfram.com/faculty/index.ja.html)

● 分野別アプリケーション・パッケージ (http://www.wolfram.com/products/fields/index.ja.html)

Computable Document Format

ウェブ・ブラウザで Mathematica ファイルを閲覧！

1) Mathematica ドキュメント・ファイル .nb を .cdf ファイルとしてエクスポート

2) 無償プラグイン CDF Player をウェブ・ブラウザにインストール
http://www.wolfram.com/cdf/

3) ブラウザで .cdf ファイルを開く

4) Manipulate[ ] で作成したデモは実行可能
 - Mathematica が入っていれば、全て実行可能

お問い合わせ先

fusashin@wolfram.com