What’s New in the Wolfram Language

Wolfram Research Asia Limited. 　金光安芸子

New in Wolfram Language 11

「すべての分野の計算と知識を統合し, 自動化する」

今年30周年を迎え、開発の大きな節目となるMathematica 11は，ニューラルネットワーク計算，音声統合，言語計算を含む多様な分野における最新の研究開発の飛躍的進歩の上に構築されています．
Mathematicaをすでにお使いの方にとっても，インターフェース，言語，アルゴリズムの深さと効率における機能が，広範に便利な形で強化されたものになっています．

進化する微分方程式の解法

非周期的な数列の最大極限・最小極限と漸近解析

機械学習と訓練集合を使った組み込みの関数

Wolfram Cloud ワークフロー

Data Resources in the Wolfram Language

Wolfram Languageに関するリソース情報

進化する微分方程式の解法

単純でない領域上で、ポアソン(Poisson)方程式を解く

({{Ω: Region}, {-(∇^2)u=1 in Ω}, {u=0 on ∂Ω  }})

Region[RegionDifference[Rectangle[{0,0},{1,1}],Rectangle[{0.3,0.2},{0.5,0.4}]]]

ifun=NDSolveValue[{-Laplacian[u[x,y],{x,y}]==1,DirichletCondition[u[x,y]==0.,True]},u,{x,y}∈RegionDifference[Rectangle[{0,0},{1,1}],Rectangle[{0.3,0.2},{0.5,0.4}]]];ContourPlot[ifun[x,y],{x,y}∈ifun["ElementMesh"],PlotPoints->30,ColorFunction->"TemperatureMap"]

インタラクティブに領域を変えて解く

Manipulate[DynamicModule[{ifun},ifun=NDSolveValue[{-Laplacian[u[x,y],{x,y}]==1,DirichletCondition[u[x,y]==0.,True]},u,{x,y}∈RegionDifference[Rectangle[{0,0},{1,1}],Rectangle[p1,p2]]];ContourPlot[ifun[x,y],{x,y}∈ifun["ElementMesh"],PlotPoints->30,ColorFunction->"TemperatureMap"]],{{p1,{0.3,0.2}},Locator},{{p2,{0.5,0.4}},Locator}]

任意の領域上で、固有関数展開して微分方程式を解く

領域を指定（琵琶湖）し、画像メッシュに変換する

img=EntityValue[(Entity["Lake Biwa", Entity["Lake","LakeBiwa::g39k3"], "Entity[\"Lake\", \"LakeBiwa::g39k3\"]", "lake"]),"Image"]

img2=MeanShiftFilter[img,3,0.1]; 
mask=RegionBinarize[img2,,0.11]; 
Ω=ImageMesh[mask];
DiscretizeRegion[Ω,MaxCellMeasure->4]

ラプラス演算子の6つの最小固有値と固有関数を求める

{vals,funs}=NDEigensystem[
{-Laplacian[u[x,y],{x,y}],DirichletCondition[u[x,y]==0,True]},u[x,y],{x,y}∈Ω,6]

GraphicsGrid@Partition[tt=Table[ContourPlot[funs[[i]],{x,y}∈Ω,PlotRange->All,PlotLabel->vals[[i]],AspectRatio->Automatic,PlotTheme->"Minimal"],{i,Length[vals]}],3]

64個の固有関数を足し合わせて、全体を減衰振動させる

ℒ = -(Subscript[∇, {x,y}]^2)φ[x,y];
ℬ=DirichletCondition[φ[x,y]==0,True];
{Λ,Φ}=NDEigensystem[{ℒ,ℬ},φ[x,y],{x,y}∈Ω,64];

Θ[λ_, ξ_, t_] = FullSimplify[
  DSolveValue[Join[{ (∂_(t,t))ϑ[t] + ξ  (∂_t)ϑ[t] == -λ ϑ[t] }, {ϑ[0] ==1, ϑ'[0] ==0} ],ϑ[t], t],
  {λ > 0, ξ > 0, ξ^2 < 4 λ, t ∈ Reals} ];

n=64;

weights=Take[GaussianMatrix[{{n},n/2}],-n-1];
weights-=Last[weights];
weights=Most[weights];
weights*=1/First[weights];

wave[t_]=(Θ[Λ,0.005,t] weights (Φ/.{x->50,y->60})).Φ;

可視化（アニメーション作成）

waveColors=(Blend[{{-0.01,Purple},{-0.005,Blue},{0.,Green},{0.005,Orange},{0.01,Yellow}},#]&);
anim=Table[Rasterize@ContourPlot[wave[t],{x,y}∈Ω,PlotRange->{-0.01,0.012},AspectRatio->Automatic,Contours->Range[-0.01,0.012,0.0005],PlotTheme->"Minimal",ColorFunctionScaling->False,ContourStyle->None,ColorFunction->waveColors],{t,0,120,1}];

アニメーション

TabView[{"Image"->ImageResize[img,400],"Region"->DiscretizeRegion[Ω,MaxCellMeasure->4],"1"->tt[[1]],"2"->tt[[2]],"3"->tt[[3]],"4"->tt[[4]],"5"->tt[[5]],"6"->tt[[6]],"Propagation"->ListAnimate[anim]}]

有限要素法(FEM)

有限要素法パッケージをロードする．

Needs["NDSolve`FEM`"]

領域，境界条件(ディリクレ条件)，方程式の設定

({{-(∇^2)u=1}, {Ω:Disk}, {(Subscript[Γ, D]):u=0|x≥0}})

Ω=Disk[]; 
op=-Laplacian[u[x,y],{x,y}]-1;
(Subscript[Γ, D])=DirichletCondition[u[x,y]==0,x≥0];

微分方程式を解く

uif=NDSolveValue[{op==0,(Subscript[Γ, D])},u,{x,y}∈Ω]

可視化する

Plot3D[uif[x,y],{x,y}∈Ω,ColorFunction->"TemperatureMap"]

有限要素法(FEM) 情報の入手方法

チュートリアル

Solving PDE with FEM

Finite Element Method Usage Tips

Element Mesh Generation / Visualization

Finite Element Programming

Wolfram Technology Conferences

PDEs and Finite Elements

Workshop: PDEs and Finite Elements

Applications of Numerical Computation

Writing Your Own PDE Solvers - The Finite Element Method Interface

ビデオ (Virtual Conference)

Solving PDEs Over Regions with Symbolics and Numerics

Solving Engineering Problems with Mathematica’s PDE Tools

Stackexchange Mathematica

FEM

Differential Equations

Clear["Global`*"]

密な非周期的な数列の最大極限・最小極限

極限に関連する関数群が改良・追加された.

p[n_]:=(((Sin[2 n])^2)/(2+Cos[n]))

DiscretePlot[p[n],{n,1,550,5}]

極限は存在しない

DiscreteLimit[p[n],n->∞]

最大極限は実数の最大値として得られる:

maxlim=DiscreteMaxLimit[p[n], n -> ∞];
N[%]

最小極限は0:

minlim=DiscreteMinLimit[p[n], n -> ∞]

With[{r=p[n]},DiscretePlot[{r,maxlim,minlim},{n,1,550,5},PlotLabel->Style[HoldForm[DiscreteMaxLimit[r, n -> ∞]]==N[maxlim],13],PlotStyle->{Blue,Yellow,Green},PlotLegends->{r,N[maxlim],minlim}]]

Asymptotic analysis(漸近解析)

Asymptotic analysis(漸近解析)は, 0や無限大などの近くでの近似解を得るための方法である. 
ここでは、指数関数的に増加する整数分解の例を見ていこう.

IntegerPartitionsで, 整数の分割の全てのパターンを見てみる.

IntegerPartitions[6]

IntegerPartitions[6]//TableForm

整数 6 の無制限分割数は11通り.

PartitionsP[6]

PartitionsP(整数の無制限分割)は急激に増加する.例えば、200の時は約4兆通り.

PartitionsP[200]

Logとってほぼ線形に増えるということは、指数関数的増加

DiscretePlot[Log[10,PartitionsP[k]],{k,100}]

Hardy と Ramanujan が n が大きいときの近似を発見( in 1918)
以下の式で表される:

asymp(n_):=((exp(π (Sqrt[((2 n)/3)])))/(4 (Sqrt[3]) n))

asymp[200]//N

DiscreteLimitを使って、nが無限大になったときにこの近似式が正しいことを確認できる

(Underscript[\[Limit], n(Underscript[->, (Integers)])∞])((PartitionsP[n])/(asymp[n]))

http://blog.wolfram.com/2017/11/09/limits-without-limits-in-version-11-2/

http://blog.stephenwolfram.com/2016/04/who-was-ramanujan/

機械学習と訓練集合を使った組み込みの関数

Wolfram言語には，高度に自動化された関数から，最新のニューラルネットのアプローチを含む特定のメソッドや診断法に基づいた関数まで，統合された幅広い最新機械学習機能が含まれている．関数は，数値的，分類別，時系列，テキスト，画像，音声等多くの種類のデータに適用できる．

Classify で、きのこの山とたけのこの里を見分けられるか？

1. きのこの山を並べて撮影

kinokoall=;

顕著性フィルタリング

map=ImageAdjust@ImageSaliencyFilter[kinokoall,Method->"ImageSignature"]

二値化して膨張処理を行う

mask0=Dilation[Binarize[map,0.28],1.2]

ハイライト表示

HighlightImage[kinokoall,mask0,"Lighten"]

個々の”きのこの山”をトリミングしてトレーニングデータとする

kinokos=ImageTrim[kinokoall,#,10]&/@ComponentMeasurements[mask0,"BoundingBox"][[All,2]]

2. たけのこの里も同様に( Importでファイル名から読み込んでも良い）

takenokoall=;

map2=ImageAdjust@ImageSaliencyFilter[takenokoall,Method->"ImageSignature"];
Binarize[map2,0.25];mask3=Dilation[Binarize[map2,0.25],1.5];
HighlightImage[takenokoall,mask3,"Lighten"];
takes=ImageTrim[takenokoall,#,10]&/@ComponentMeasurements[mask3,"BoundingBox"][[All,2]]

3. 画像データが用意できたところで、Classifyで分類する

ランダムに５つをテストデータ、残りをトレーニングデータにセットする

SeedRandom[1];
testkinokos=RandomSample[#,5]&@kinokos;
trainkinokos=Complement[kinokos,testkinokos];
Length/@{testkinokos,trainkinokos}

SeedRandom[1];
testtakes=RandomSample[#,5]&@takes;
traintakes=Complement[takes,testtakes];

Classify関数で分類する

#->"kinoko"&/@trainkinokos;
#->"takenoko"&/@traintakes;
meijiChocoSnack=Classify@Flatten@{%%,%}

分類はうまくいくか？

RandomSample[Flatten[{testkinokos,testtakes}],5]
meijiChocoSnack[%]

機械学習と訓練集合を使った組み込みの関数

ImageRestyle:画像のスタイル変更

機械学習とその訓練集合を使って、指定したサンプルのグラフィカルなスタイルにしたがって、画像のスタイルを変更しようとする ImageRestyleが組み込まれた

Source: Huang, X., & Belongie, S. (2017). Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization. arXiv.org.

カメラで撮影した写真データのスタイルを変更してみる

garden=;

ゴッホの「星月夜」とカンディンスキーの「コンポジション8」

styleGogh=;styleKandinsky=;

Style 1:  van Gogh, De sterrennacht, 1889, Museum of Modern Art, New York
Style 2: Wassily Kandinsky, Komposition VIII, 1923, Solomon R. Guggenheim Museum, New York

画像のスタイルをそれぞれ変更する

Grid[{{ImageRestyle[garden,styleGogh],ImageRestyle[garden,styleKandinsky]}}]

２つのサンプルの重み付けを指定する

ImageRestyle[garden,{0.6-> styleGogh,0.3-> styleKandinsky}]

インタラクティブに重みを変えて見てみる

ListAnimate[Table[ImageRestyle[garden,weight->styleKandinsky],{weight,0,1,0.1}]]

機械学習と訓練集合を使った組み込みの関数

人物の顔を検出する FindFaces

i=;

FindFaces[i,{0,35},"Image"]

顔の部分をハイライト表示

HighlightImage[i,{"Boundary",Green,FindFaces[#,{0,35},"BoundingBox"]&}]

検出された顔をすべて求め，ぼかす

HighlightImage[i,{{"Blur",5},Rectangle@@@FindFaces[#,{0,40},"BoundingBox"]&}]

年齢や感情などの特徴も抽出（顔の特徴は、FacialFeatures を参照）

FindFaces[i,{0,35},{"Image", "Emotion","Age"}]

Wolfram Cloud ワークフロー

即時API : API Function

country という名前のパラメータに任意の国名を指定すると、地図を得るAPI関数を作る.

func=APIFunction["country"-> "Country", GeoGraphics[Polygon[#country]]&, "PNG"]

func[<|"country"-> "Japan"|>]

CloudDeployを使ってAPI関数をWolfram Cloudに配備する：

配備されたAPI関数は，Webブラウザでクラウドオブジェクトにアクセスし，そのURLに?country=value を追加することで呼び出すことができる.

CloudDeploy[APIFunction["country"-> "Country", GeoGraphics[Polygon[#country]]&, "PNG"]]

アプリケーションに拡張していく

Wolfram|Alpha のデータをインポートし、可視化する.

例えば、1970年から2017年までのGDPの日付を含む時系列データをDateListPlotで可視化する.

DateListPlot[CountryData[(Entity["United States", Entity["Country","UnitedStates"], "Entity[\"Country\", \"UnitedStates\"]", "country"]),{{"GDP"},{1970,2017}}]]

データを選択できるようなインターフェイスを作ることも簡単.

国名をリストから選ぶと、その国のGDPデータをプロットする.

Manipulate[DateListPlot[CountryData[country,{{"GDP"},{1970,2017}}],Filling->Axis,ImageSize->450,PlotLabel->ToString[country]<>"のGDP",PlotRange->Full],{country,{"France","Japan","China","India","UnitedStates"}}]

同じように、色付けした地図を表示するインターフェイス.

Manipulate[GeoGraphics[{EdgeForm[Red],Yellow,Polygon[CountryData[country]]},GeoRange->"World"],{country,{"France","Japan","China","India","UnitedStates"}}]

クラウドに配備する

インタラクティブなManipulateで作った地図とGDPの時系列データプロットのインターフェイスをクラウドに配備する.

CloudDeploy[Manipulate[Grid[{{GeoGraphics[{EdgeForm[Red],Yellow,Polygon[CountryData[country]]},GeoRange->"World",ImageSize->300],DateListPlot[CountryData[country,{{"GDP"},{1970,2017}}],Filling->Axis,ImageSize->300,PlotLabel->ToString[country]<>"のGDP",PlotRange->Full]}}],{country,{"France","Japan","China","India","UnitedStates"}}],Permissions->"Public"]

URLを短くするURLShortenを使って、URLを簡単に.

URLShorten[CloudObject[(HyperlinkURL["https://www.wolframcloud.com/objects/dfa7730a-e194-45db-adfb-90271ba6e6c9", https://www.wolframcloud.com/objects/dfa7730a-e194-45db-adfb-90271ba6e6c9])],"JapanWebinar2018"]

バーコードを生成しても

BarcodeImage["https://wolfr.am/JapanWebinar2018","QR", 400]

http://www.wolfram.com/cloud/

Data Resources in the Wolfram Language

Wolfram|AlphaおよびWolfram言語の動力となっているWolfram Knowledgebase

何千もの領域に及ぶ専門的な知識が含まれている．何兆もの単なるデータ要素ではなく，ほぼすべての分野のメソッドやモデルをカプセル化した膨大な数のアルゴリズムも含まれている．

https://www.wolfram.com/knowledgebase/

?*Data

Data Resources in the Wolfram Language

Wolfram Data Repository

常に拡張されている計算可能な精選データ集合をホストする公開リソース. 簡単にWolfram言語にインポートできるデータ集．

http://datarepository.wolframcloud.com/

Data Resources in the Wolfram Language

Wolfram Neural Net Repository

約70のニューラルネットモデルをホストする公開リソース. 
Wolfram言語のNetModelでアクセス可能．

https://resources.wolframcloud.com/NeuralNetRepository/

http://blog.wolfram.com/2018/06/14/launching-the-wolfram-neural-net-repository/

Data Resources in the Wolfram Language

ResourceDataでダイレクトにデータを読み込み

Webサイトから例題をコピーする:

分析の例をStep-by-step で:

Data Repositoryから世界気象機関(WMO)の降水量データを読み込む.

rain=ResourceData["Rain Frequency by WMO Station"];

データの中からランダムに５つのサンプルを表示:

RandomSample[rain,5]

1月の降水量のトップ５:

rain[TakeLargestBy["Jan",5]]

1月のトップ１の測地位置（緯度経度）:

rain[TakeLargestBy["Jan",1],"Coordinates"]

月のキーをmonthsにセットする:

months=Keys[rain[1]][[6;;17]]

各月のトップ１の測地位置データを取得:

Normal[rain[TakeLargestBy[#,1],"Coordinates"]]&/@months

GeoMarkerで各月のトップ１の観測位置にマーカーをつけて、Tooltipで月を表示する.

Tooltip[GeoMarker[First@Normal[rain[TakeLargestBy[#,1],"Coordinates"]]],#]&/@months

世界地図上に表示：

GeoGraphics[Tooltip[GeoMarker[First@Normal[rain[TakeLargestBy[#,1],"Coordinates"]]],#]&/@months]

http://blog.stephenwolfram.com/2017/04/launching-the-wolfram-data-repository-data-publishing-that-really-works/

Wolfram Languageに関するリソース情報

ドキュメントセンターに豊富な例題

1)  Mathematicaのドキュメントセンター（ヘルプー＞Wolframドキュメント）＊V11.3よりワークフローガイドが追加された

2)  http://reference.wolfram.com 　どこからでもアクセス可能なWeb版のドキュメントセンター. 簡単コピーできる機能も.

Wolfram U  - Open courses for students and professionals -

オンデマンドの無料コースから、世界各地で行われるトレーニングコースまで.

http://www.wolfram.com/wolfram-u/

Wolfram Blog

http://blog.wolfram.com

最新のトピックを様々な開発者が紹介しています. Mathematicaのファイルをダウンロードできることも.

Wolfram Community

http://community.wolfram.com/

全世界から, 18,000人以上がコミュニティに参加しています

Wolfram Technology Conference 
 (2018/10/16-19 @IL, Wolfram’s Headquaters)

http://www.wolfram.com/events/technology-conference/2018/

Wolfram Innovator Award

http://www.wolfram.com/events/technology-conference/innovator-award/

待望の日本語書籍が出版！
ハンズ・オン・スタートMathematica-Wolfram言語によるプログラミング -

ご静聴ありがとうございました

akikok@wolfram.com