• 検索結果がありません。

> data2d:=< <($1..15)> RandomVector(15,ge 線形補間を生成する plot コマンドを次に示します このコマンドの目的は 上記コマンドの代わりにスムーズな曲線を生成することです > display( plot(data2d, color=black), poin

N/A
N/A
Protected

Academic year: 2021

シェア "> data2d:=< <($1..15)> RandomVector(15,ge 線形補間を生成する plot コマンドを次に示します このコマンドの目的は 上記コマンドの代わりにスムーズな曲線を生成することです > display( plot(data2d, color=black), poin"

Copied!
25
0
0

読み込み中.... (全文を見る)

全文

(1)

> >

M a p l e 1 6 の補間プロットと平滑化

このワークシートのトピックは、指定した 2-D データと 3-D データの補間と平滑化です。構成 は、次元、タスク、およびデータの規則性によって分類されます。 共通するタスクは、データポイントを通過または近似する曲線または面として、データのプロット だけを生成することです。 もう 1 つのタスクは、データを近似し、元のデータポイントの近くにある個々のポイントの値をク エリすることできるプロシージャや区分関数スプライン式を生成することです。 もう 1 つの選択肢は、指定したデータポイントを通過する曲線または面を生成する (つまりデータ ポイントを補間する) か、指定したデータポイントを (平滑化によって) 単に近似するかということ です。データにノイズや測定誤差が含まれているかどうかを確認してください。依存データに誤 差やノイズが含まれることが予想される場合、データを平滑化した面や曲線を適合させることが妥 当です。この場合、平滑化したカーブフィットが、必ずしも、指定したデータポイントの従属デー タを通過したり、そのデータと一致するとは限りません。一方、データが完全に正確なことが予想 される場合、指定したすべてのデータポイントを通過する、補間処理した曲線または面を生成する ことが妥当です。 データから直接、曲線または面をプロットすることも、最初にプロシージャや ( 2 次元の場合は) 区 分関数スプラインを作成してから、p l o t または p l o t 3 d コマンドにそのプロシージャやスプライン を提供することで間接的にプロットを実行することもできます。作成したプロシージャは、個々の 1 次元または 2 次元独立データポイントを受け付け、その入力に対する従属スカラー値を計算しま す。 3 D データの関連するもう 1 つの区分は、データの独立部が、2 D 平面の規則的な格子上に配置さ れるか、双方向で不規則に配置されているポイントによって構成されているかという点です。 このワークシートでは、2 D プロットと 3 D プロットに対するこのような手法の詳細な説明と比較 を行います。 r e s t a r t ; w i t h ( L i n e a r A l g e b r a ) : w i t h ( C u r v e F i t t i n g ) : w i t h ( p l o t s ) : w i t h ( S t a t i s t i c s ) : r a n d o m i z e ( ) :

1 次元の場合

X データポイントは、1 ~ 1 5 の範囲の整数として均一に取得されます。しかし、これらのデー タポイントは順番が正しい限り、不均一な間隔に配置されるほうが望ましいこともあります。 この例では、d a t a 2 D は 1 5 x 2 の行列で、最初の列は順序のある x 方向のデータポイント、2 番目の列はその y の値です。

(2)

> > > > > > d a t a 2 D : = < < ( $ 1 . . 1 5 ) > | R a n d o m V e c t o r ( 1 5 , g e n e r a t o r = 0 . 0 . . 5 . 0 ) > : 線形補間を生成する p l o t コマンドを次に示します。このコマンドの目的は、上記コマンドの 代わりにスムーズな曲線を生成することです。 d i s p l a y ( p l o t ( d a t a 2 D , c o l o r = b l a c k ) , p o i n t p l o t ( d a t a 2 D , s y m b o l s i z e = 1 0 , c o l o r = r e d ) ) ; 2 4 6 8 10 12 14 1 2 3 4 ここでは、補間スプラインの区分関数式を生成し、この式をプロットします。 f : = S p l i n e ( d a t a 2 D , v ) : d i s p l a y ( p l o t ( f , v = 1 . . 1 5 , c o l o r = b l a c k ) , p o i n t p l o t ( d a t a 2 D , s y m b o l s i z e = 1 0 , c o l o r = r e d ) ) ;

(3)

> > > > v 2 4 6 8 10 12 14 0 1 2 3 4 5 区分関数スプラインの記号式を生成する上記手法は、最もシンプルな手法です。この手法で は、プロッターは任意の数の補間ポイント数を選択できます。S p l i n e コマンドは、複数のオプ ションを指定して呼び出すことができます。.しかし多数のオリジナルポイントを処理するに は、この手法は効率的ではありません。この手法で生成される区分関数式は場合によって非常 に処理しづらいものとなり、多くのポイントでの数値評価コストは大きく増加します。次 に、ArrayInterpolation コマンドを使った、補間対象となるポイントの事前作成メッシュの使 用方法について説明します。 ここでは固定メッシュの生成、対象ポイントでの補間、および生成された値のプロットを実行 します。元のデータポイントが 1 5 個存在するため、1 / 1 0 の間隔で不均一に配置されたポイン トを使って、1 5 0 ポイントの 精細メッシュ A1 を作成します。 これは時間がかからず、メモリ消費量も少ない手法です。しかし、評価ポイントはX 軸に沿っ て均等に配置されるため、見た目が美しいプロットが生成されるとは限りません。曲線の中に は、この手法で得られる結果と、デフォルトの適用 2 D プロッタで得られる結果の違いが著し く大きなものもあります。 A 1 : = < ( i / 1 0 $ i = 1 . . 1 5 0 ) > : f : = A r r a y I n t e r p o l a t i o n ( d a t a 2 D , A 1 , m e t h o d = s p l i n e ) : g : = A r r a y I n t e r p o l a t i o n ( d a t a 2 D , A 1 , m e t h o d = c u b i c ) : d r a w f u n : = f _ - > d i s p l a y ( p l o t ( < A 1 | f _ > , c o l o r = b l a c k ) ,

(4)

> > > > > > p o i n t p l o t ( d a t a 2 D , s y m b o l s i z e = 1 0 , c o l o r = r e d ) ) : d i s p l a y ( A r r a y ( [ d r a w f u n ( f ) , d r a w f u n ( g ) ] ) , v i e w = [ 0 . . 1 5 , 0 . . 5 ] ) ; 0 5 10 15 0 1 2 3 4 5 0 5 10 15 0 1 2 3 4 5

補間プロシージャの取得

上記の方式では、事前作成したベクトル A1 を使用します。これは固定された均一の補間ポ イントで構成されています。また特定の数値入力に対して単一のスカラー数値出力を生成す るプロシージャを指定して p l o t コマンドを実行した場合、補間ポイントを動的に選択する こともできます。次の例では、前述のように動作する演算子 F をデモンストレーションしま す。 F は元のデータを使用しますが、補間ポイントを前もって提供する必要はないという点に注 意してください。この手法をより効率的に実装する方法については、「付録」を参照してく ださい。 2-D プロットの場合、M a p l e はデフォルトで適応プロットを実行します。この場合、変化す る関数の検出方法に応じて、特定の領域でプロットする関数の評価頻度が増加しま

(5)

> > > >

(1.1.1.1)

(1.1.1.1)

> > > >

(1.1.1.2)

(1.1.1.2)

> > す。p l o t コマンドの a d a p t i v e オプションの詳細については、p l o t , o p t i o n s のヘルプペー ジを参照してください。 F : = x - > C u r v e F i t t i n g : - A r r a y I n t e r p o l a t i o n ( d a t a 2 D , A r r a y ( 1 . . 1 , 1 . . 1 , [ [ x ] ] ) , m e t h o d = s p l i n e ) [ 1 ] : d i s p l a y ( p l o t ( F , 0 . . 1 5 , c o l o r = b l a c k ) , p o i n t p l o t ( d a t a 2 D , s y m b o l s i z e = 1 0 , c o l o r = r e d ) , v i e w = [ 0 . . 1 5 , 0 . . 5 ] ) ; 0 5 10 15 0 1 2 3 4 5

一般的な使用方法

その他の一般的な計算で、F などの補間プロシージャをスカラー値関数として使用するこ ともできます。 O p t i m i z a t i o n : - M i n i m i z e ( t - > F ( t ) , 0 . . 1 5 , m e t h o d = b r a n c h a n d b o u n d ) ; f s o l v e ( t - > F ( t ) - 2 , 0 . . 1 5 ) ;

1.808411009

2 次元の場合

(6)

> > > > > > > > > >

(2.1.1.1)

(2.1.1.1)

> > > > > > (指定したデータポイントと正確に一致する) データ補間と、(ノイズデータを近似する) データ 平滑化の違いを、以下に示します。

平滑化

このセクションでは、1 次元の依存データに誤差成分が存在するか、ノイズが含まれている ことが判明している、2 次元独立データの集合があるものとします。ノイズが存在する ということは、そのデータが示す面がどのようなものであっても、その面が必ずしも指定し た依存データポイントを通過するとは限らないということです。 この場合、l o w e s s アルゴリズムを使ってデータを数値的に平滑化することで、面の近似が 行われます。指定したポイントをプロットする場合、データポイントの周囲に存在するウィ ンドウを使って、低次に重み付けられた、局所カーブフィットを計算します。

S c a t t e r P l o t 3 D

統計パッケージの ScatterPlot3D コマンドを実行すると、2 D ノイズデータをスムーズ にプロットできます。独立データは、規則的に配置する必要がなくなり、n x 3 の配列ま たは行列として提供されます。各 n 行は、個々のポイントを表しています。列は x、y、 z の各値です。 次に例を示します。最初に、x-y 平面へのデータポイントの投影について説明するため、 2 D 従属データ値のレイアウトと間隔を表示します。 X : = S a m p l e ( U n i f o r m ( - 5 0 , 5 0 ) , 1 7 5 ) : Y : = S a m p l e ( U n i f o r m ( - 5 0 , 5 0 ) , 1 7 5 ) : Z e r r o r : = S a m p l e ( N o r m a l ( 0 , 1 0 0 ) , 1 7 5 ) : Z : = A r r a y ( 1 . . 1 7 5 , ( i ) - > - ( s i n ( Y [ i ] / 2 0 ) * ( X [ i ] - 6 ) ^ 2 + ( Y [ i ] - 7 ) ^ 2 + Z e r r o r [ i ] ) ) : X Y Z : = M a t r i x ( [ [ X ] , [ Y ] , [ Z ] ] , d a t a t y p e = f l o a t [ 8 ] ) ^ % T ; S c a t t e r P l o t 3 D ( X Y Z , a x e s = b o x , o r i e n t a t i o n = [ 2 0 , 0 , 0 ] ) ;

(7)

> > > > > > S c a t t e r P l o t 3 D ( X Y Z , l o w e s s , g r i d = [ 2 5 , 2 5 ] , a x e s = b o x , o r i e n t a t i o n = [ 2 0 , 7 0 , 0 ] ) ;

(8)

> > > > > > > > > > 次に別の例を示します。この例では、ファイルから n x 3 のデータが読み込まれます。 M : = I m p o r t M a t r i x ( c a t ( k e r n e l o p t s ( m a p l e d i r ) , " / d a t a / p l o t t i n g / i r r e g u l a r d a t a 3 D . c s v " ) , s o u r c e = c s v , d a t a t y p e = f l o a t [ 8 ] ) : P p t : = p o i n t p l o t 3 d ( M , a x e s = b o x , s t y l e = p a t c h n o g r i d , s y m b o l s i z e = 1 5 , c o l o r = r e d , l a b e l s = [ x , y , z ] ) : d i s p l a y ( P p t , o r i e n t a t i o n = [ 9 0 , 0 , 0 ] ) ;

(9)

> > > > > > > > S c a t t e r P l o t 3 D コマンドのデフォルトオプションでは、次数 2 の適合二次方程式を使用 して、x 方向と y 方向の両方で元の領域の 1 / 3 幅のウィンドウを使用するように設定さ れています。 右下が平滑化した面、左が同じ面に元のデータポイントのポイントプロットを重ね合わ せた透過表示です。 P l o e s s : = S c a t t e r P l o t 3 D ( M , l o w e s s ) : d i s p l a y ( A r r a y ( [ d i s p l a y ( [ P p t , P l o e s s ] ) , d i s p l a y ( P l o e s s , s t y l e = p a t c h , c o l o r = R G B ( 0 . 0 , 0 . 4 , 0 . 6 ) ) ] ) , v i e w = 7 0 0 . . 8 6 0 , a x e s = b o x , o r i e n t a t i o n = [ 5 4 , 7 8 , - 1 5 ] , t r a n s p a r e n c y = 0 . 0 ) ;

(10)

> > > >

補 間

このセクションでは、1 次元の依存データが正確であることが判明している、2 次元独立デ ータの集合があるものとします。目的は、すべてのデータポイントを通過する面を生成する ことです。つまり独立データの各 x-y ポイントで、プロット対象の面の高さが従属データの 対応する値と一致しなければならないということです。 この場合、データを補完することで、面の数値計算が実行されます。 これは、2 つの異なる状況に分類されます。最初のケースでは、独立したすべての x-y デー タが規則的なグリッドを形成します。2 番目のケースでは、独立したデータポイントが x-y 平面上で不規則に配置されています。どちらのケースでも、s u r f d a t a コマンドを使って面を プロットできます。

均一なデータグリッド

均一な 2-D データグリッドの場合、面のプロットは、s u r f d a t a コマンドを使って生成で きます。

(11)

> > > > > > > > データは x ポイントと y ポイントのグリッドから構成されます。このセクションの例で は、データポイントを各方向で均一に取得します。x の値は1 ~ 7 の整数、y の値は 1 ~ 9 の整数として取得します(不均一なデータポイントについては、次のセクションを参照 してください)。

x-y 平面のデータポイントのビュー

これは、入力データポイントのビューです。この例の場合、このビューは完全なグリ ッドで、x 方向と y 方向の両方で均一に配置されています。 x p t s : = < ( $ 1 . . 7 ) > : y p t s : = < ( $ 1 . . 9 ) > : d i s p l a y ( s e q ( p l o t t o o l s : - l i n e ( [ x p t s [ i ] , 1 ] , [ x p t s [ i ] , 9 ] ) , i = 1 . . 7 ) , s e q ( p l o t t o o l s : - l i n e ( [ 1 , y p t s [ j ] ] , [ 7 , y p t s [ j ] ] ) , j = 1 . . 9 ) , p o i n t p l o t ( [ s e q ( s e q ( [ x p t s [ i ] , y p t s [ j ] ] , j = 1 . . 9 ) , i = 1 . . 7 ) ] , c o l o r = r e d ) ) ; 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 9 各データポイントに対応する指定したデータ値は、7 x 9 の配列のデータに保存されま す。この例では、値の集合はランダムに生成されます。

(12)

> > > > > > > > > > > > d a t a 3 D : = A r r a y ( L i n e a r A l g e b r a : - R a n d o m M a t r i x ( 7 , 9 , g e n e r a t o r = 0 . 2 . . 0 . 8 ) , d a t a t y p e = f l o a t [ 8 ] ) : 以下に示す最初の 3 D プロットは、デフォルトで生成される区分関数 - 平面です。よりス ムーズな面を生成することが目的で、これは、s u r f d a t a コマンドの g r i d s i z e と i n t e r p o l a t i o n オプションを使用することで実現できます。 プロットされる面は、3 D ポイントプロットと (線形の) パッチ面の両方と重ねて表示され ます。このため、計算で得られた面が、元の離散データに対して確度が高いことがビジ ュアルに示されます。 p t s p l o t : = P L O T 3 D ( G R I D ( 1 . . 7 , 1 . . 9 , d a t a 3 D , S T Y L E ( P O I N T ) ) ) : gridplot:=PLOT3D( GRID( 1..7, 1..9, data3D, STYLE(WIREFRAME)) ):

以下の p l o t 3 d オプション は、これらのプロットの一般的な外観をコントロールしま す。これらのオプションは、このサブセクションで再使用されます。 これらのオプショ ンには、手法間の違いがより明確になるように、再利用可能な単一の名前が割り当てら れています。 l o o k a n d f e e l : = a x e s = b o x e d , s t y l e = s u r f a c e , g l o s s i n e s s = 1 . 0 , l i g h t m o d e l = l i g h t 1 , c o l o r = R G B ( 2 0 4 / 2 5 5 , 8 4 / 2 5 5 , 0 / 2 5 5 ) , v i e w = [ 1 . . 7 , 1 . . 9 , 0 . . 1 ] : d i s p l a y ( p t s p l o t , g r i d p l o t , s u r f d a t a ( d a t a 3 D , 1 . . 7 , 1 . . 9 , l o o k a n d f e e l ) ) ;

(13)

> > > > > > 左下は、s u r f d a t a コマンド (補間追加なし) によって生成されたデフォルトの面です。 右下は、新しい補間オプションであるキーワードパラメータ g r i d s i z e と i n t e r p o l a t i o n を使った s u r f d a t a コマンドによって生成された面です。 g r i d s i z e パラメータは、g r i d s i z e = l i s t という形式の方程式です。list には、元のデー タの補間の実行対象となるポイントの均一グリッドのサイズを表す正の整数ペアを記述 します。 i n t e r p o l a t i o n パラメータは i n t e r p o l a t i o n = l i s t という形式の方程式です。list には CurveFitting:-ArrayInterpolation コマンドで受け付けられるオプションを記述しま す。 d i s p l a y ( A r r a y ( [ s u r f d a t a ( d a t a 3 D , 1 . . 7 , 1 . . 9 , l o o k a n d f e e l ) , s u r f d a t a ( d a t a 3 D , 1 . . 7 , 1 . . 9 , g r i d s i z e = [ 2 8 , 3 6 ] , i n t e r p o l a t i o n = [ m e t h o d = s p l i n e ] , l o o k a n d f e e l ) ] ) ) ;

(14)

> > > > > > d i s p l a y ( A r r a y ( [ d i s p l a y ( p t s p l o t , g r i d p l o t , s u r f d a t a ( d a t a 3 D , 1 . . 7 , 1 . . 9 , l o o k a n d f e e l ) ) , d i s p l a y ( p t s p l o t , g r i d p l o t , s u r f d a t a ( d a t a 3 D , 1 . . 7 , 1 . . 9 , g r i d s i z e = [ 2 8 , 3 6 ] , i n t e r p o l a t i o n = [ m e t h o d = s p l i n e ] , l o o k a n d f e e l ) ) ] ) ) ;

(15)

> > > > > > 3 D プロットの表示は、少量単位による、面の独自平滑化によって実行されるという点に 注意してください。したがって計算補間スキームという純粋に線形な手法を使用してい る場合でも、右下のプロットでは、適度なレベルの面の平滑化が実現されていること がわかります。 d i s p l a y ( A r r a y ( [ d i s p l a y ( p t s p l o t , g r i d p l o t , s u r f d a t a ( d a t a 3 D , 1 . . 7 , 1 . . 9 , l o o k a n d f e e l ) ) , d i s p l a y ( p t s p l o t , g r i d p l o t , s u r f d a t a ( d a t a 3 D , 1 . . 7 , 1 . . 9 , g r i d s i z e = [ 2 8 , 3 6 ] , i n t e r p o l a t i o n = [ m e t h o d = l i n e a r ] , l o o k a n d f e e l ) ) ] ) ) ;

(16)

> > > > > > 値の補間を実行した精緻グリッドの場合、データポイントの元のグリッドの番号ポイン トの全整数倍数を (両方向で) 含む必要はありません。 d i s p l a y ( A r r a y ( [ d i s p l a y ( p t s p l o t , g r i d p l o t , s u r f d a t a ( d a t a 3 D , 1 . . 7 , 1 . . 9 , l o o k a n d f e e l ) ) , d i s p l a y ( p t s p l o t , g r i d p l o t , s u r f d a t a ( d a t a 3 D , 1 . . 7 , 1 . . 9 , g r i d s i z e = [ 3 3 , 3 3 ] , i n t e r p o l a t i o n = [ m e t h o d = c u b i c ] , l o o k a n d f e e l ) ) ] ) ) ;

(17)

> > > > > >

補間プロシージャ

次に、補間プロシージャ f 3 と g 3 を生成して使用します。各プロシージャは、指定 (x,y) ポイントに対して、補間処理したスカラー値を返します。このため、必要なポ イント (x,y) を選択して、p l o t 3 d コマンドを直接使用することが可能になります。現 在、p l o t 3 d は適応プロットを実行しないため、このような 2 パラメータ補間プロシ ージャを使用する利点はありません。 またこの手法は、(x,y) ポイントの事前作成済みグリッドを使用するという以前の方 法と比べると、効率も低下します。これは ArrayInterpolation が起動され、入力ポ イントごとに一次データ構造が生成されるためです。この件に関する効率の詳細 については、付録を参照してください。 生成された補間プロシージャは、数値最適化、積分、根の計算など、他の一般計算に も使用できます。このような計算結果は、選択した補間手法によって異なるというこ とを忘れないでください。 f 3 : = ( x , y ) - > C u r v e F i t t i n g : - A r r a y I n t e r p o l a t i o n ( [ x p t s , y p t s ] , d a t a 3 D , A r r a y ( 1 . . 1 , 1 . . 1 , 1 . . 2 , [ [ [ x , y ] ] ] ) , m e t h o d = s p l i n e ) [ 1 , 1 ] :

(18)

> >

(2.2.1.2.3)

(2.2.1.2.3)

(2.2.1.2.2)

(2.2.1.2.2)

> >

(2.2.1.2.1)

(2.2.1.2.1)

> > > > > > > > > > g 3 : = ( x , y ) - > C u r v e F i t t i n g : - A r r a y I n t e r p o l a t i o n ( [ x p t s , y p t s ] , d a t a 3 D , A r r a y ( 1 . . 1 , 1 . . 1 , 1 . . 2 , [ [ [ x , y ] ] ] ) , m e t h o d = c u b i c ) [ 1 , 1 ] : d r a w f u n 3 : = f _ - > p l o t 3 d ( f _ , 1 . . 7 , 1 . . 9 , a x e s = b o x e d , s t y l e = s u r f a c e , g l o s s i n e s s = 1 . 0 , l i g h t m o d e l = l i g h t 1 , c o l o r = R G B ( 2 0 4 / 2 5 5 , 8 4 / 2 5 5 , 0 / 2 5 5 ) ) : d i s p l a y ( A r r a y ( [ d r a w f u n 3 ( f 3 ) , d r a w f u n 3 ( g 3 ) ] ) , v i e w = [ 1 . . 7 , 1 . . 9 , 0 . . 1 ] ) ; O p t i m i z a t i o n : - M i n i m i z e ( f 3 , m e t h o d = n o n l i n e a r s i m p l e x ) ; W a r n i n g , l i m i t i n g n u m b e r o f f u n c t i o n e v a l u a t i o n s r e a c h e d f s o l v e ( { ( a , b ) - > a - b , ( a , b ) - > f 3 ( a , b ) - 0 . 5 } , [ 1 . . 7 , 1 . . 9 ] ) ; f 3 ( o p ( % ) ) - 0 . 5 ;

(19)

> > > >

(2.2.1.2.3)

(2.2.1.2.3)

> > > > > > > >

不均一なデータグリッド

これは不規則な間隔で配置されたデータで、n x 3 の配列または行列として提供します。 各行はポイントを表していて、列は x、y、または z の値と解釈されます。 次に例を示します。最初に、x-y 平面へのデータポイントの投影について説明するため、 2 D 従属データ値のレイアウトと間隔を表示します。 これは「平滑化」のセクションの S c a t t e r P l o t 3 D で使用したデータと同じです。ただ し、平滑化の例と対比するため、データポイントの補間を実行するものとします。つま り、面がデータポイントを直接通過するということです。 M : = I m p o r t M a t r i x ( c a t ( k e r n e l o p t s ( m a p l e d i r ) , " / d a t a / p l o t t i n g / i r r e g u l a r d a t a 3 D . c s v " ) , s o u r c e = c s v , d a t a t y p e = f l o a t [ 8 ] ) : P p t : = p o i n t p l o t 3 d ( M , a x e s = b o x , s t y l e = p a t c h n o g r i d , s y m b o l s i z e = 1 5 , c o l o r = r e d , l a b e l s = [ x , y , z ] ) : d i s p l a y ( P p t , o r i e n t a t i o n = [ 9 0 , 0 , 0 ] ) ;

(20)

> > > >

(2.2.1.2.3)

(2.2.1.2.3)

> > > > s u r f d a t a コマンドは、このタスクを直接実行できるようになりました。 s o u r c e = i r r e g u l a r オプションは、2 つの独立したデータ次元の 1 つに沿って 3 つの値 しか持たない規則配置グリッドを形成するデータとして、このデータを解釈してはなら ないことを示すために指定します。 s u r f d a t a ( M , s o u r c e = i r r e g u l a r , a x e s = b o x ) ;

(21)

> >

(2.2.1.2.3)

(2.2.1.2.3)

> > > >

付録 : 効率

CodeTools:-Usage コマンドは、個々の計算またはステップで使われるメモリリソースや時間 リソースに関する情報を出力するために使用します。 効率に関する懸念の 1 つは、回避可能にもかかわらず、補間処理によって不必要なデータのコ ピーが実行されるということです。実際の作業を行うルーチンはすべて、プリコンパイルされ た関数への外部呼出しとして実装されます。またこれらのルーチンでは、ハードウェア倍精度 d a t a t y p e = f l o a t [ 8 ] オプションを指定した r t a b l e s (配列、ベクトル、または行列) として入出 力を伝達することを前提としています。 1-D データに関する元の例を検討してみましょう。パフォーマンスの違いを明確に示すため、 補間ポイント数 5 0 0 0 という比較的大きな数を使用します。 出力ポイントの事前割当て構造 (A1) を使うと、補間プロットを最も効率的に取得できます。構

(22)

> >

(2.2.1.2.3)

(2.2.1.2.3)

> > > > > > > > 造 A1 自体を生成するために必要なリソースは無視できます (プロットの外観や平滑度については特に問題にしません。ここでは相対的な効率について調べ ます。個々にプロットされるポイントの数は必然的に大きくなり、場合によって二次的なジャ ギーが発生することがあります)。 A 1 : = C o d e T o o l s : - U s a g e ( V e c t o r ( 5 0 0 0 , i - > i * 1 5 / 5 0 0 0 , d a t a t y p e = f l o a t [ 8 ] ) ) : m e m o r y u s e d = 2 3 6 . 0 3 K i B , a l l o c c h a n g e = 0 b y t e s , c p u t i m e = 0 n s , r e a l t i m e = 5 . 0 0 m s C o d e T o o l s : - U s a g e ( p l o t ( < A 1 | A r r a y I n t e r p o l a t i o n ( d a t a 2 D , A 1 , m e t h o d = s p l i n e ) > , c o l o r = b l a c k ) ) ; m e m o r y u s e d = 2 7 . 7 7 M i B , a l l o c c h a n g e = 0 . 5 9 M i B , c p u t i m e = 3 4 0 . 0 0 m s , r e a l t i m e = 3 3 8 . 0 0 m s 2 4 6 8 10 12 14 0 1 2 3 4 5 F などの補間関数による、独立データの不必要な繰り返しコピーは、r t a b l e s を指定して ArrayInterpolation を実行することでも回避できます。 また ArrayInterpolation コマンドのオプションである c o n t a i n e r 引数を使用して、インプレ ースな動作を実現することで、スカラー出力結果を伝えるだけのために、r t a b l e の作成とメモ リ管理が繰り返し実行されるのを回避することができます。

(23)

> >

(2.2.1.2.3)

(2.2.1.2.3)

> > > > > > > > 最後に、補間関数をモジュールとして実装することで、従属入力ポイントを再利用可能な r t a b l e として通知し、別の r t a b l e オブジェクトのメモリ管理の繰り返しを回避することもでき ます。以下のモジュール Fnew は、このような概念を示しています。 F n e w : = m o d u l e ( ) e x p o r t M o d u l e A p p l y ; l o c a l i n A r r a y , o u t A r r a y , h w x d a t a , h w y d a t a ; i n A r r a y : = A r r a y ( 1 . . 1 , ' d a t a t y p e ' = f l o a t [ 8 ] ) ; o u t A r r a y : = A r r a y ( 1 . . 1 , ' d a t a t y p e ' = f l o a t [ 8 ] ) ; h w x d a t a , h w y d a t a : = V e c t o r ( d a t a 2 D [ 1 . . - 1 , 1 ] , ' d a t a t y p e ' = f l o a t [ 8 ] ) , V e c t o r ( d a t a 2 D [ 1 . . - 1 , 2 ] , ' d a t a t y p e ' = f l o a t [ 8 ] ) : M o d u l e A p p l y : = p r o c ( x ) U s e H a r d w a r e F l o a t s : = t r u e ; i n A r r a y [ 1 ] : = x ; C u r v e F i t t i n g : - A r r a y I n t e r p o l a t i o n ( h w x d a t a , h w y d a t a , i n A r r a y , ' m e t h o d ' = ' s p l i n e ' , ' c o n t a i n e r ' = o u t A r r a y ) ; o u t A r r a y [ 1 ] ; e n d p r o c ; e n d m o d u l e : ここで、 F と Fnew のパフォーマンスの違いを比較します。この例では、速度が約 2 倍改善し ます。スムーズで美しいプロットを実現するためには、5 0 0 0 ものポイントは必要ないというこ とを確認してください。 これほど多くのポイントを要求した目的は主に、パフォーマンスの 違いを示すためです。 以下の 2 つのプロットは、出力ポイント数が同じで、事前作成済みの固定ベクトル A1 を使用し た以前のプロットと比較して、かなり速度が低下しています。 C o d e T o o l s : - U s a g e ( p l o t ( F , 0 . . 1 5 , c o l o r = b l a c k , n u m p o i n t s = 5 0 0 0 ) ) ; m e m o r y u s e d = 2 4 5 . 0 0 M i B , a l l o c c h a n g e = 1 1 3 . 4 4 M i B , c p u t i m e = 2 . 8 2 s , r e a l t i m e = 2 . 8 3 s

(24)

> >

(2.2.1.2.3)

(2.2.1.2.3)

> > > > 0 5 10 15 0 1 2 3 4 5 プロシージャ Fnew は F と比べて約 2 倍高速です。プログラミング工数を有意義に追加するこ とで、F n e w による A r r a y I n t e r p o l a t i o n の繰り返し呼び出しに起因するオーバヘッドを回避 し、大幅な速度改善を実現することができます。F はスレッドセーフですが、Fnew はスレッド セーフではありません。これは、モジュール F n e w の i n A r r a y (または o u t A r r a y) ローカル変 数などモジュールローカル変数が、スレッドグローバルな手法でアクセスされるためで す。Fnew に対する複数の個別コールが、異なるスレッドで同時に実行されると、こうしたロー カル配列への同時アクセスは相互に干渉し合います。

参照

ワークシートで使われるコマンドに関する詳細な追加情報 (補間手法や平滑化手法をコントロー ルする追加オプションなど) については、以下のヘルプページを参照してください。 S p l i n e ArrayInterpolation p l o t p l o t , o p t i o n s p l o t 3 d s u r f d a t a

(25)

> >

(2.2.1.2.3)

(2.2.1.2.3)

> > > > S c a t t e r P l o t 3 D d i s p l a y R a n d o m M a t r i x

参照

関連したドキュメント

このように、このWの姿を捉えることを通して、「子どもが生き、自ら願いを形成し実現しよう

被保険者証等の記号及び番号を記載すること。 なお、記号と番号の間にスペース「・」又は「-」を挿入すること。

補助 83 号線、補助 85 号線の整備を進めるとともに、沿道建築物の不燃化を促進

瓦礫類の線量評価は,次に示す条件で MCNP コードにより評価する。 なお,保管エリアが満杯となった際には,実際の線源形状に近い形で

 Rule F 42は、GISC がその目的を達成し、GISC の会員となるか会員の

ƒ 、または Arduinoのリセットボタン”oƒ、2 }~x してか らコマンド @2 しま Q*した Arduino す。 プログラムを Arduino に…き:む Äsについては「

□ ゼミに関することですが、ゼ ミシンポの説明ではプレゼ ンの練習を主にするとのこ とで、教授もプレゼンの練習

を育成することを使命としており、その実現に向けて、すべての学生が卒業時に学部の区別なく共通に