利用张量积样条逼近
因为工具箱可以处理样条向量系数,很容易实现插值或逼近网格数据张量积样条,如下图所示。你也可以运行“二元张量积样条”的例子。
可以肯定的是,大多数对网格数据的张量积样条近似可以直接通过样条构造命令之一获得,比如spapi
或csape
,无需考虑本例中讨论的细节。相反,这个例子是为了说明张量积构造背后的理论,这将在本工具箱中构造命令未涉及的情况下有所帮助。
本节讨论张量积样条问题的这些方面:
选择的地点和结
例如,考虑给定数据的最小二乘近似z(我,j) =f(x(我),y(j)),我= 1:Nx,j= 1:纽约.你从一个广泛使用的函数中获取数据Franke对曲面拟合方案的测试(参见R. Franke,“对离散数据插值的一些方法的关键比较”,海军研究生院技术。众议员nps - 53 - 79 - 003, 1979年3月)。它的定义域是单位平方。你选择更多的数据站点x方向比y方向;此外,为了获得更好的定义,在边界附近使用更高的数据密度。
x =([(0:10) / 10。0.007, .93 .97]);y =(((0:6) / 6,。0.007, .93 .97]);[xx, yy] = ndgrid (x, y);z =因特网(xx和yy);
作为y函数的最小二乘近似
把这些数据看作是来自向量值函数,即的函数y其价值在y(j)为向量z(:,j),所有j.没有特别的原因,选择用一个向量值来近似这个函数抛物线样条,有三均匀间距的内结.这意味着您为这个向量值样条选择样条顺序和结序列
肯塔基州= 3;knotsy = augknt([0二十五分。5。1),肯塔基州);
sp = spap2 (knotsy,肯塔基州,y, z);
实际上,你同时发现离散最小二乘近似年代肯塔基州,knotsy
给每一个Nx
数据集
特别是语句
yy =约:.05:1.1;瓦尔斯= fnval (sp、yy);
提供一个数组瓦尔斯
的条目瓦尔斯(i, j)
可以作为值的近似值吗f(x(我),yy(j))的基础函数f在网格点x(我),yy(j),因为瓦尔斯(:,j)
值是在yy(j的近似样条曲线sp
.
这在下面的图中很明显,由命令获取:
网格(x, yy,瓦尔。”),视图(150年,50)
注意的用法瓦尔斯。”
,在网
命令,因为MATLAB需要®绘制数组时面向矩阵的视图。这在二元近似中可能是一个严重的问题,因为这是习惯上的想法z(我,j)为点(x(我),y(j),而MATLAB认为z(我,j)为点(x(j),y(我))。
伪装成曲面的光滑曲线族
注意,每条平滑曲线上的前两个和后两个值实际上都为零,因为前两个和后两个点都在yy
超出了基本区间为样条在sp
.
还要注意纹路。它们证实你只是在一个方向上绘制光滑的曲线。
作为x函数的系数近似值
要得到一个实际的曲面,现在必须更进一步。看看系数coefsy
的样条sp
:
coefsy = fnbrk (sp,“系数”);
抽象地说,你可以把样条看作sp
的函数
与我th条目coefsy (ir)
矢量系数coefsy (:, r)
对应于x(我),为所有我.这建议对每个系数向量进行近似coefsy (q,:)
用一条相同顺序的样条kx
用同样合适的打结顺序knotsx
.没有特别的原因,这次使用立方样条函数与四个均匀分布的内部结:
kx = 4;knotsx = augknt ([0: .2:1], kx);sp2 = spap2 (knotsx kx, x, coefsy。');
请注意,spap2
(节,k, x,外汇
)预计外汇
(j:,
)作为基准点x (j)
,即期望每一个列的外汇
是一个函数值。来拟合基准面coefsy (q,:)
在x(问),为所有问、现在spap2
与转置的coefsy
.
二元近似
现在考虑系数的转置cxy
得到的样条曲线:
系数= fnbrk (sp2,“系数”)。”;
它提供了二元样条逼近
原始数据
在网格(如网格)上绘制此样条曲面
十五= 0:.025:1;青年志愿= 0:.025:1;
您可以执行以下操作:
Franke函数的样条逼近
这很有道理,因为spcol (knotsx kx,十五)
是其(我,问)第一个条目等于值B问,kx(十五(我))十五(我)的问阶b样条kx
对于结序列knotsx
.
因为矩阵spcol (knotsx kx,十五)
而且spcol (knotsy、肯塔基州、青年志愿)
是有了带子,它可能更有效率,虽然可能更消耗内存,对于大十五
而且青年志愿
利用,利用fnval
,如下所示:
value2 =…fnval (spmak (knotsx fnval (spmak (knotsy系数),青年志愿)。“),十五)。”;
事实上,这是内部发生的事情fnval
用张量积样条直接调用,如
value2 = fnval (spmak ({knotsx, knotsy},系数),{十五,青年志愿});
以下是相对误差的计算结果,即给定数据与这些数据点的近似值与给定数据的大小之间的差值:
Errors = z - spcol(knotsx,kx,x)*coefs*spcol(knotsy,ky,y).';disp (max (max (abs(错误)))/ max (max (abs (z))))
输出是0.0539
,也许不太令人印象深刻。然而,系数数组只是大小8 6
disp(大小(系数)
以适合大小的数据数组15日11
.
disp(大小(z))
开关为
这里遵循的方法似乎有偏见的,用下面的方法。首先考虑给定的数据z
的向量值函数y的向量值函数,然后将近似曲线的向量值系数所形成的矩阵视为描述的向量值函数x.
当你把事情按相反的顺序,也就是思考,会发生什么z
的向量值函数x,然后将由近似曲线的向量系数组成的矩阵视为描述的向量值函数y?
也许令人惊讶的是,最终的近似是相同的,直到四舍五入。这是数值实验。
x函数的最小二乘近似
首先,拟合一个样条曲线的数据,但这一次x作为自变量,因此它是行的z
现在变成了数据值。相应地,你必须提供z”。
,而不是z
,spap2
,
spb = spap2 (knotsx kx, x, z。');
十五,valsb = fnval (spb)。';
提供了矩阵valsb
的条目valsb (i, j)
可以作为值的近似值吗f(十五(我),y(j))的基础函数f在网格点处(十五(我),y(j))。当你绘图时,这是很明显的valsb
使用网
:
网格(十五,y, valsb。”),视图(150年,50)
假装是曲面的光滑曲线的另一个家族
注意山脊。它们再次证明了,你只画了一个方向的平滑曲线。但这一次,曲线走向了另一个方向。
作为y函数的系数近似值
现在是第二步,得到实际的曲面。首先,提取系数:
“系数”coefsx = fnbrk (spb);
然后拟合各系数向量coefsx (r,:)
用一条相同顺序的样条肯塔基州
用同样合适的打结顺序knotsy
:
注意,再一次,你需要转置系数数组spb
,因为spap2
将其最后一个输入参数的列作为数据值。
相应地,现在不需要对系数数组进行转置coefsb
产生的曲线:
coefsb = fnbrk (spb2“系数”);
二元近似
他的主张是coefsb
等于前面的系数数组系数
,直到四舍五入,测试如下:
Disp (max(max(abs(coefs - coefsb))))
输出是1.4433 e15汽油
.
解释很简单:系数c
样条的年代包含在sp = spap2(节,k, x, y)
依赖线性在输入值上y.这意味着,考虑到两者c
而且y
是否有一个单行矩阵,即存在某个矩阵一个=一个节,k,x这
对于任何数据y
.这句话甚至在什么时候也成立y
是一个矩阵的大小d——- - - - - -N,在这种情况下,每个数据y(:,j)被认为是一个点Rd,得到的样条对应为d-vector-value,因此它的系数数组c
的大小d——- - - - - -n
, n =长度(节)- k
.
特别是语句
sp = spap2 (knotsy,肯塔基州,y, z);coefsy = fnbrk (sp,“系数”);
把矩阵给我们coefsy
满足
随后的计算
sp2 = spap2 (knotsx kx, x, coefsy。');系数= fnbrk (sp2,“系数”)。”;
生成系数数组系数
,考虑到两次换位,则满足
第二种,选择,计算,你首先计算
spb = spap2 (knotsx kx, x, z。');“系数”coefsx = fnbrk (spb);
因此coefsx
= z”。一个knotsx, kx, x.随后的计算
spb2 = spap2 (knotsy,肯塔基州,y, coefsx。');“系数”coefsb = fnbrk (spb);
然后提供
因此,coefsb
=系数
.
比较和扩展
第二种方法比第一种方法更对称,因为在每个调用中都发生了换位spap2
和其他地方。这种方法可以用于近似任意数量变量的网格数据。
例如,给定的数据除以a三个-维网格包含在一些三维数组中v
的大小(Nx、纽约、新西兰)
,v (i, j, k)
包含值f(x(我),y(j),z(k),然后你就可以开始了
纽约系数=重塑(v, Nx *新西兰);
假设n
j =结
j -kj
,对于j =x, y, z
,你便可按以下步骤进行∶
sp = spap2 (knotsx kx, x,系数。');系数=重塑(fnbrk (sp,“系数”)、纽约、新西兰* nx);sp = spap2 (knotsy,肯塔基州,y,系数。');系数=重塑(fnbrk (sp,“系数”),新西兰nx *纽约);sp = spap2 (knotsz, kz, z,系数。');系数=重塑(fnbrk (sp,“系数”),nx,纽约*新西兰);
参见动力或(C。de Boor,“张量乘积的有效计算机操作”,2022世界杯八强谁会赢?ACM反式。数学。软件5(1979), 173 - 182;勘误表,525]了解更多细节。同样的参考文献也清楚地表明,使用最小二乘近似并没有什么特别之处。任何近似过程,包括样条插值,其结果近似具有与给定数据线性相关的系数,都可以以同样的方式扩展为网格数据的多元近似过程。
这正是样条构造命令中所使用的csapi
,csape
,spapi
,spaps
,spap2
,当拟合网格数据时。它也用于fnval
,当张量积样条在网格上求值时。