最新のリリースでは、このページがまだ翻訳されていません。このページの最新版は英語でご覧になれます。
ツールボックスは"ベクトル" 係数と共にスプラインを処理できるため、以降の説明でわかるように、テンソル積スプラインによるグリッド データへの内挿または近似の実装は容易です。また、"二変量テンソル積スプライン" の例を実行できます。
確かに、グリッド データへのテンソル積スプライン近似のほとんどは、この例で説明する詳細を考慮することなく、このツールボックスの样条拟合
やc类s公司ape
などのスプライン作成コマンドのいずれかを使用して直接取得できます。むしろ、この例はテンソル積作成の背後にある理論を示すための手段であり、このツールボックスの作成コマンドが対応していない状況で役立ちます。
この節では、テンソル積スプラインの問題の次の点について説明します。
たとえば、与えられたデータ z(i,j)=f(x(i),y(j)),i=1:Nx,j=1:Ny への最小二乗近似を考えてみます。曲面近似のスキーマをテストするためのフランケによって広く使用されている関数からデータを取得します (R. Franke, "A critical comparison of some methods for interpolation of scattered data", Naval Postgraduate School Techn. Rep. NPS-53-79-003, March 1979 を参照)。領域は単位正方形です。y 方向よりも、x 方向で少し多くデータ サイトを選択します。また、より明確に定義するには、境界の近くでデータ密度が高くなるようにします。
x=排序([(0:10)/10,.03.07,.93.97]);y=排序([(0:6)/6,.03.07,.93.97]);[xx,yy]=ndgrid(x,y);z=franke(xx,yy);
これらのデータは、ベクトル値関数、つまり、y(j) における値がベクトル z(:,j) (すべての j について) になる関数 y から得られたデータとして扱います。特に理由はありませんが、この関数を、等間隔の 3 つの内部節点をもつベクトル値放物線スプラインによって近似することを選択してください。つまり、このベクトル値スプラインのスプラインの次数と節点シーケンスを次のように選択します。
ky=3;knotsy=augknt([0,.25,.5,.75,1],ky);
その後、间隔2
を使用して、データへの最小二乗近似を提供します。
sp=spap2(节,ky,y,z);
実際には、S公司肯塔基,诺西
から各N个十
データセットへの離散最小二乗近似を同時に求めていることになります。
特に、ステートメント
yy=-.1.05:1.1;vals=fnval(sp,yy);
は、配列五als
を提供します。この配列のエントリ瓦尔斯(i,j)
四五als(:,j)
が、s公司p
での近似スプライン線のyy(j)における値であるためです
图、图
mesh(x,yy,vals.'), view(150,50)
mesh
コマンドで瓦尔斯。”
を®99Z(i,j)を、正(x(j),y(i))におる関数値と見なためです
曲面のように見える一連の滑らかな曲線
三年
(二)有价证券s公司p
型スプラインの基本区間外であるためです。
また、リッジにも注意してください。これで、滑らかな曲線が一方向のみでプロットされていることが確認できます。
実際の曲面を得るには、さらに 1 ステップを実行する必要があります。以下は、s公司p
のスプラインの係数c类o型e类f型s公司是的
です。
系数Y=fnbrk(sp,'coefs');
抽象的に、s公司p
のスプラインは関数として考えることができます。
ベクトル係数系数(:,r)
の我番目のエントリc类o型e类f型s公司是的(我,右)
十(一)千十
および同じ適切な節点シーケンス结十
のスプラインによる各係数ベクトルc类o型e类f型s公司是的(问,:)
の近似を示しています。特に理由はありませんが、今回は等間隔の“4”方位“3”
千十=4; knotsx = augknt([0:.2:1],kx); sp2 = spap2(knotsx,kx,x,coefsy.');
间隔2
(结,k,x,f型十
) は、外汇
(:,j型
)が十(j型)
におけるデータとなると想定している点に注意してください。つまり、外汇
の各"列" が関数値になると想定しています。x(q) (すべての q について) におけるデータc类o型e类f型s公司是的(问,:)
を近似するには、c类o型e类f型s公司是的
の"転置" と共に间隔2
を提供します。
ここでは、得られたスプライン"曲線" の係数cxy公司
の転置について検討します。
系数=fnbrk(sp2,“系数”);
以下の"二変量" スプライン近似が提供されます。
元のデータは、以下のとおりです。
このスプライン曲面をグリッド (以下に例を示します) 上にプロットするために
xv=0.025:1;yv=0.025:1;
以下を実行できます。
フランケ関数へのスプライン近似
これは有意義です。なぜなら、s公司pcol(knotsx,kx,xv)
(i,q)横切问
では、次数千十
の十五番目の B スプラインの i(xv) における値 B我,问(千十(千n个o型tsx)) に等しいためです。
行列s公司pcol(knotsx,kx,xv)
とspcol(纽特西,肯塔基州,伊夫)
は帯状のため、次のように"大きな"十五
と伊夫
の場合にfnval公司
を使用すると、効率が向上する場合がありますが、おそらくメモリ消費量が増加します。
值2=。。。fnval(spmak(knotsx,fnval(spmak(knotsy,coefs),yv)。'),十五';
これは実際に、以下のようにfnval公司
がテンソル積スプラインによって直接呼び出されたときに、内部で起こっていることです。
五alue2 = fnval(spmak({knotsx,knotsy},coefs),{xv,yv});
以下は、相対誤差の計算です。相対誤差とは、与えられたデータの大きさを基準とする、与えられたデータとそれらデータ サイトでの近似の値との差です。
错误=z-spcol(knotsx,kx,x)*coefs*spcol(knotsy,ky,y)。';disp(max(max(abs(errors)))/max(max(abs(z)))
出力は0.0539分
で、おそらくそれほど大きいわけではありません。ただし、係数配列はサイズ8 6
のみでした。
丁我s公司p(size(coefs))
サイズ2011年
のデータ配列を近似するには、次のようになります。
显示(大小(z))
ここで従うアプローチは、次のように"偏っている" ように見えます。まず、与えられたデータz轴
12395;よって形される列をxのベクトル値関数述してるのとして扱ます
逆の順序で考えた場合、つまり、z轴
を十のベクトル値関数を記述するものと考え、その後、近似曲線のベクトル係数から構成される行列を y のベクトル値関数を記述するものとして扱うと、何が起こるでしょうか。
驚くかもしれませんが、最終近似は同じ (丸め) になります。ここでは数値実験を行います。
12487ータ値になるのはz轴
の"行" です。それに応じて、z轴.'
ではなく、z轴
を间隔2
に提供しなければなりません。
spb=spap2(结x,kx,x,z');
valsb=fnval(spb,xv)。';
は、行列五alsb
を提供します。この行列のエントリ五alsb(i, j)
三mesh
を使用して五alsb
をプロットする場合に明らかです。
mesh(xv,y,valsb.'), view(150,50)
曲面のように見える別の一連の滑らかな曲線
リッジに注意してください。これで、やはり、滑らかな曲線が一方向のみでプロットされていることが確認できます。ただし、今回は、曲線が逆方向に向かっています。
ここで 2 番目のステップで、実際の曲面を取得します。まず、係数を抽出します。
c类o型e类f型s公司十=f型n个brk(spb,'coefs');
その後、同じ次数千是的
および適切な同じ節点シーケンス结是的
のスプラインによって各係数ベクトルc类o型e类f型s公司十(右,:)
を近似します。
ここでも、s公司pb
からの係数配列を転置する必要がある点に注意してください。これは、间隔2
が最終入力引数の列をデータ値として使用するためです。
それに応じて、得られた"曲線" の係数配列c类o型e类f型s公司b
を転置する必要がなくなります。
系数b=fnbrk(spb2,'coefs');
c类o型e类f型s公司b
は前出の係数配列c类o型e类f型s公司
(丸め) と等しいと主張されています。以下はテストです。
disp(最大值(abs(coefs-coefsb)))
出力は1.4433e-15号
です。
説明は簡単です。sp=spap2(节,k,x,y)
に含まれるスプラインsの係数c类
二、你"線形" に依存します。これは、c类
と是的
が両方とも1行の行列の場合に、一个=一个结,k,xのような行列が存在することを意味します。これにより、
が、任意のデータ是的
で成り立ちます。このステートメントは是的
が“合二为一”、“合二为一”、“合二为一”丁公司c类
はサイズdn个
列 (n =长度(节)-k
) となります。
特に、ステートメント
sp=spap2(节,ky,y,z);c类o型e类f型s公司是的=f型n个brk(sp,'coefs');
は、次を満たす行列c类o型e类f型s公司是的
を提供します。
後続の計算
s公司p2 = spap2(knotsx,kx,x,coefsy.'); coefs = fnbrk(sp2,'coefs').';
によって係数配列c类o型e类f型s公司
が生成されます。この配列は 2 つの転置を考慮して次を満たします。
代替の 2 番目の計算では、最初に次を計算しました。
spb=spap2(结x,kx,x,z');c类o型e类f型s公司十=f型n个brk(spb,'coefs');
そのため、c类o型e类f型s公司十
=z'.A结x,kx,xです。後続の計算
spb2系列=spap2(结,ky,y,coefsx’);c类o型e类f型s公司b = fnbrk(spb,'coefs');
によって次が提供されます。
その結果、c类o型e类f型s公司b
=c类o型e类f型s公司
となります。
二间隔2
が呼び出されるたびに転置が実行され、ほかでは実行されないという点で、1 番目のアプローチより対称的です。このアプローチは、任意の数の変数でグリッド データに近似するために使用できます。
たとえば、“三”[纽约州,纽约州,新西兰]
の3 次元配列五
に含まれ、v(i,j,k)
が値 f(x(i),y(j),z(k)) を含む場合は、次から開始します。
c类o型e类f型s公司=右e类s公司hape(v,Nx,Ny*Nz);
n个
j型=结
j型-千j型
(j)=x、 是,是
の場合) と仮定して、次のように進めます。
sp=spap2(knotsx,kx,x,coefs’);coefs=重塑(fnbrk(sp,'coefs'),Ny,Nz*nx);sp=spap2(knotsy,ky,y,coefs’);coefs=重塑(fnbrk(sp,'coefs'),Nz,nx*Ny);sp=spap2(knotsz,kz,z,coefs’);coefs=重塑(fnbrk(sp,'coefs'),nx,Ny*Nz);
詳細については、PGS公司の第17章または[C.de Boor,“张量积的有效计算机操作”s manbetx 845ACM公司Trans.Math.软件5个(1979),173-182;勘误表,建设内容はいずれも、同じ方法で、グリッドデータへの多変量近似プロセスに拡張できます。
これはまさに、グリッド データを近似する際に、スプライン作成コマンドc类s公司api
、c类s公司ape
、样条拟合
、水疗
、および间隔2
で使用されている方法です。また、テンソル積スプラインがグリッド上で評価されるときに、fnval公司
でも使用されます。