。
ツールボックスは“ベクトル”系数と共にスプラインをスプラインをためため,以降の说明でわかるよう,テンソル积スプライングリッドグリッドへ内插またはのの装配はは容易容易ですですです。また,“二销量テンソル积ス”の例を実行。
确かに,グリッドデータへのテンソル积ス近似のほとんどは,この例で说明する详细考虑することなく,このツールボックスのspapi
やcsape
などのスプライン作物コマンドいずれいずれか使をますし直接取得できます。むしろ,この例はできますます背后ある论を示すための手段,このツールボックスのためでありしての状况ででます。
この節では,テンソル積スプラインの問題の次の点について説明します。
たとえば,与えられたデータz (i, j) = f (x (i), y (j)), i = 1: Nx, j = 1:纽约への最小二乗近似を考えてみます。曲面近似のスキーマをテストするためのフランケによって広く使用されている関数からデータを取得します(r .因特网”一些插值方法的关键比较分散的数据”,中欧海军研究生院。众议员nps - 53 - 79 - 003, 1979年3月を参照)。領域は単位正方形です。y方向よりも、x 方向で少し多くデータ サイトを選択します。また、より明確に定義するには、境界の近くでデータ密度が高くなるようにします。
x = sort([(0:10)/10,.03 .07,.93 .97]);y = sort([(0:6)/6,03 .07,.93 .97]);[xx,yy] = ndgrid(x,y);z = Franke(XX,YY);
これらのデータは,ベクトル値関数,つまり,y (j)における値がベクトルz (:, j)(すべてのjについて)になる関数yから得られたデータとして扱います。特に理由はありませんが,この関数を,等間隔の3つの内部節点をもつベクトル値放物線スプラインによって近似することを選択してください。つまり,このベクトル値スプラインのスプラインの次数と節点シーケンスを次のように選択します。
肯塔基州= 3;knotsy = augknt([0二十五分。5。1),肯塔基州);
その后,spap2
を使用して,データへの最小二乘近似をします。
sp = spap2 (knotsy,肯塔基州,y, z);
実际には,年代KY,Knotsy.
から各Nx
データセットへの離散最小二乗近似を同時に求めていることになります。
特に,ステートメント
yy =约:.05:1.1;瓦尔斯= fnval (sp、yy);
は,配列瓦尔斯
を提供します。この配列のエントリ瓦尔斯(i, j)
はメッシュポイントx(i),yy(j)における基于关关数fの値f(x(i),yy(j))と见なすことができます。これこれ,瓦尔斯(:,j)
が,sp
ででの近似スプライン曲曲のyy(j)における値であるですです。
これこれ,次のコマンドで取得される以の图で明らか。
网格(x, yy,瓦尔。”),视图(150年,50)
网
コマンドで瓦尔斯。”
Matlab,Matlab銇銇銇銇銈銈銈銈銈銈銈銈銈銈銈銈銈銈銈銈銈当此®行列指向の表示であるため必要となります。これは,二销量近近で深刻な問題となることがあります。なぜなら、一般的に z(i, j) は点 (x(i), y(j)) における関数値として見なされますが、MATLAB では z(i, j) を、点 (x(j), y(i)) における関数値と見なすためです。
曲面のように見える一連の滑らかな曲線
それぞれの滑らかな曲線の最初の2つの値と最後の2つの値は実際には0である点に注意してください。これは,yy.
の最初の2つのサイトと最後の2つのサイトがどちらも,sp
型スプラインの基本间外外であるです。
また,リッジにに注意しください。これこれ,滑らかな曲曲が一方向ででプロットれてことが确认できますていること确认できます。
実際の曲面を得るには,さらに1ステップを実行する必要があります。以下は,sp
のスプラインの係数coefsy
です。
cofsy = fnbrk(sp,'cofs');
抽象的に,sp
のスプラインは関数として考えることができます。
ベクトル係数coefsy (:, r)
の我番目のエントリcofsy(我,r)
はx (i)(すべての我について)に対応します。これは,同じ次数kx
および同じ適切な節点シーケンスknotsx
のスプラインによる各係数ベクトルcoefsy (q,:)
の近似を示しています。特殊理念はありません,今回は等间隔“4”つの内部節点をもつ“3次”スプラインスプライン使使使ます。
kx = 4;knotsx =奥克纳特([0:.2:1],kx);sp2 = spap2(knotsx,kx,x,cofsy。');
spap2
(节,k, x,外汇
)は,外汇
(:,J.
)がx(j)
つまり,におけるにおけるデータとなると想定ている点点てててててててててててててててててて外汇
の各“列”が关关値にと想定してい.x(q)(すべてqについて)におけるデータcoefsy (q,:)
を近似するには,coefsy
の“転置”と共にspap2
を提供します。
ここでは,得られたスプライン“曲线”の系数CXY
の転置について検討します。
系数= fnbrk (sp2,“系数”)。”;
以下の“二変量”スプライン近似が提供されます。
元のデータは,以下のとおりです。
このスプライン曲面をグリッド(以下に例を示します)上にプロットするために
十五= 0:.025:1;青年志愿= 0:.025:1;
以下を実行できます。
相关数量へスプライン近似
これは有意义です。なぜなら,spcol (knotsx kx,十五)
が行列であり,この行列の(i, q)番目のエントリが,節点シーケンスknotsx
では,次数kx
の问番目のBスプラインの十五(i)における値Bq, kx(十五(i))に等しいためです。
行程spcol (knotsx kx,十五)
とSpcol(Knotsy,Ky,YV)
は帯状のため,次のように“大きな”XV.
とyv.
の場合にfnval
を使用すると,効率が向上する場合がありますが,おそらくメモリ消費量が増加します。
value2 =…fnval (spmak (knotsx fnval (spmak (knotsy系数),青年志愿)。“),十五)。”;
これは実際に,以下のようにfnval
がテンソル积スプラインによって呼び出されたとき,内部で起こっていること。
value2 = fnval (spmak ({knotsx, knotsy},系数),{十五,青年志愿});
以下は,相対誤差の計算です。相対誤差とは,与えられたデータの大きさを基準とする,与えられたデータとそれらデータサイトでの近似の値との差です。
误差= z - spcol(knotsx,kx,x)* cofs * spcol(Knotsy,Ky,Y)。';disp(max(max(abs(abs(abs)))/ max(max(abs(z))))))
出力は0.0539
で,おそらくそれほど大きいわけではありません。ただし,係数配列はサイズ8 6
のみのみた。
disp(大小(系数)
サイズ15 11.
のデータ配列を近似するには,次のようになります。
disp(大小(z))
ここで従うアプローチは,次のように”“偏っているように見えます。まず,与えられたデータz
をyのベクトル値关键をを记述しているものと,后,近似近似曲のベクトルによって成されるをxのベクトル値关键词ををの値关键
逆の順序で考えた場合,つまり,z
をxのベクトル値関数を記述するものと考え,その後,近似曲線のベクトル係数から構成される行列をyのベクトル値関数を記述するものとして扱うと,何が起こるでしょうか。
惊くかもしれませんが,最终近似は同じ(丸めを除く)にには数码実験行。
最初にスプライン曲線をデータに近似しますが,今回は,xを独立変数として使用するため,データ値になるのはz
の“行”です。それそれに応じ,z。'
ではなく,z
をspap2
に提供しなければなりません。
spb = spap2 (knotsx kx, x, z。');
これで,すべてすべて曲线(x; z(:,j))へのスプライン近似が得られ。特征,ステートメント
十五,valsb = fnval (spb)。';
は,行程valsb.
を提供します。この行列のエントリvalsb (i, j)
は,メッシュポイント(xv(i),y(j))における基于关键词f(xv(i),y(j))への近似とことができます。これこれ,网
をを用してvalsb.
ををする结合に明らか。
网格(十五,y, valsb。”),视图(150年,50)
曲面曲面のようにに见える别の连の滑らか滑らか曲
これ,やはり,滑らかなプロットて,今回,曲确认ますこれて,曲ができ向,今回,曲が逆。
ここで2番目のステップで,実際の曲面を取得します。まず,係数を抽出します。
“系数”coefsx = fnbrk (spb);
その後,同じ次数肯塔基州
および適切な同じ節点シーケンスknotsy
のスプラインによって各系数号coefsx (r,:)
を近似します。
ここでも,spb
からの係数配列を転置する必要がある点に注意してください。これは,spap2
が最終入力引数の列をデータ値として使用するためです。
それそれに応じ,得られた“曲”線の係数配列coefsb
をを転置する必要必要がなくなりなり
COEFSB = FNBRK(SPB2,'COEFS');
coefsb
は前出の系数配列系数
と等しい(丸めを除く)と主張されています。以下はテストです。
max(max(abs(coefs - coefsb))))
出力は1.4433E-15.
です。
説明は簡単です。sp = spap2(节,k, x, y)
に含まれるスプラインsのの数c
は,入力値yに“线路”に依存します。これこれ,c
とy
が両方とも1行の行列の場合に,A = A.结,k,xのような行列が存在することを意味します。これにより,
が,任意のデータy
で成り立ちます。このステートメントはy
が“行列”でサイズがD行n列列などの场场でもり立ちり立ちり立ちこのり立ちり立ちり立ちはははは,各场は,各y(:,j)がrd内の点と見なされ,得られたスプラインは,それに応じてdベクトル値となります。したがって,係数配列c
はサイズD行n
列(n =长度(节)- k
)となります。
特に,ステートメント
sp = spap2 (knotsy,肯塔基州,y, z);coefsy = fnbrk (sp,“系数”);
は,次を満たす行列coefsy
を提供します。
後続の計算
sp2 = spap2 (knotsx kx, x, coefsy。');系数= fnbrk (sp2,“系数”)。”;
によって係数配列系数
が生成されます。この配列は2つの転置を考慮して次を満たします。
代替の2番目の计算で,最初最初に次を计算计算ましましまし
spb = spap2 (knotsx kx, x, z。');“系数”coefsx = fnbrk (spb);
そのため,coefsx
= z”。一个Knotsx,kx,xです。后続の计算
spb2 = spap2 (knotsy,肯塔基州,y, coefsx。');“系数”coefsb = fnbrk (spb);
によって次が提供されます。
その结果,coefsb
=系数
となります。
2番目のアプローチは,spap2
が呼び出されるたびに転置が実行され,ほかでは実行されないという点で,1番目のアプローチより対称的です。このアプローチは,任意の数の変数でグリッドデータに近似するために使用できます。
たとえば,“3”次元グリッド上の特定のが,サイズ[NX,NY,NZ]
の3次元配列v
に含まれ,v(i,j,k)
が値F(x(i),y(j),z(k))を含む含む合,次から开始ます。
纽约系数=重塑(v, Nx *新西兰);
n
j =结
j -kj
(j =x,y,z
のの合)と仮定して,次のようにます。
sp = spap2(knotsx,kx,x,cofs。');Coefs = Rehape(FNBRK(SP,'COEFS'),NY,NZ * NX);sp = spap2(Knotsy,Ky,Y,Cofs。');Coefs = Rehape(FNBRK(SP,'COEFS'),NZ,NX * NY);sp = spap2(knotsz,kz,z,cofs。');Coefs = Rehape(FNBRK(SP,'COEFS'),NX,NY * NZ);
详细については,动力の第17章または[C.De Boor,“高效的计算机操纵张量产品”,下载188bet金宝搏ACM Trans.Math.software 5.(1979), 173 - 182;勘误表,525]を参照してください。同じ参考文献により,最小二乗近似の使用について,ここでは特に特別なことがないことも明らかです。得られる近似が特定のデータに線形に依存する係数をもつ近似プロセス(スプライン内挿を含む)はいずれも,同じ方法で,グリッドデータへの多変量近似プロセスに拡張できます。
これはまさに,グリッドデータを近似する际,スプライン作物csapi
、csape
、spapi
、spaps
,およびspap2
で使用されている方法です。また,テンソル積スプラインがグリッド上で評価されるときに,fnval
でも实用さます。