如何构造样条函数
这个例子展示了如何构造样条函数以不同的方式使用样条函数曲线拟合工具箱™。
插值
你可以建立一个三次样条interpolant相匹配的余弦函数在以下网站x
,使用csapi
命令。
x = 2 *π* [0 1 1。:。2。9):;y = cos (x);c = csapi (x, y);
然后您可以查看插值样条使用fnplt
。
fnplt (cs, 2);轴(7 -1.2 - 1.2 [1])在情节(x, y,“o”)举行从
检查Interpolant
2 * pi-periodic余弦函数。如何我们的三次样条interpolant在这方面吗?检查的一种方法是计算一阶导数的差异在两个端点。
diff (fnval(曾经(cs),[0 2 *π]))
ans = -0.1375
执行周期性,使用csape
而不是csapi
。
csp = csape (x, y,“周期”);持有在fnplt (csp,‘g’)举行从
现在,检查了
diff (fnval(曾经(csp),[0 2 *π]))
ans = -2.2806 e-17
即使现在的二阶导数匹配端点。
diff (fnval(曾经(csp, 2),[0 2 *π]))
ans = -2.2204 e-16
的分段线性interpolant可以通过相同的数据spapi
。这里我们将它添加到前面的情节,红色的。
pl = spapi (x, y);持有在fnplt (pl,“r”,2)从
平滑
如果数据是嘈杂的,你通常要近似而不是插入。例如,使用这些数据
x = linspace(0, 2 *π,51);noisy_y = cos (x) + 2 *(兰德(大小(x)));情节(x, noisy_y,“x”[1 7)轴(-1.2 - 1.2)
插值会扭动的interpolant用蓝色所示。
持有在fnplt (csapi (x, noisy_y))从
相比之下,平滑和适当的宽容
托尔=(. 05)^ 2 *(2 *π)
托尔= 0.0157
给出了一个平滑近似,用红色所示。
持有在fnplt (spaps (x, noisy_y tol),“r”,2)从
附近的近似更糟的间隔,和周期性。执行周期性,近似周期性扩展数据,然后限制近似原始的间隔。
noisy_y([1]) =意味着(noisy_y(结束[1]));lx =长度(x);lx2 =圆(lx / 2);范围= [lx2: lx 2: lx 2: lx2);sps = spaps ([x (lx2: lx) 2 *π(2:lx) x (2: lx2) + 2 *π),noisy_y(范围),2 * tol);
这给越近周期近似,所示黑色。
持有在fnplt (sps(0 2 *π)“k”,2)从
最小二乘近似
或者,您可以使用最小二乘近似的数据通过花键与一些自由度。
例如,您可能尝试三次样条只有四块。
spl2 = spap2 (4 4 x, noisy_y);fnplt (spl2“b”2);轴(7 -1.2 - 1.2 [1])在情节(x, noisy_y,“x”)举行从
选择结
当使用spapi
或spap2
,通常你需要指定一个特定的样条空间。这是通过指定一个结序列和一个订单,这可能有点问题。然而,当进行样条插值x, y
数据使用样条的秩序k
,您可以使用函数optknt
提供一个好的结序列,如以下示例。
k = 5;% 5,即。,we are working with quartic splinesx = 2π* *排序([0 1兰特(10)]);y = cos (x);sp = spapi (optknt (x, k), x, y);fnplt (sp 2‘g’);持有在情节(x, y,“o”)举行从[1 7轴(-1.1 - 1.1)
当进行最小二乘近似,可以使用当前的近似确定可能选择的帮助下更好的结newknt
。例如,下面的近似指数函数并不好,可以看到从其错误,用红色绘制。
x = linspace (0, 10101);y = exp (x);sp0 = spap2 (augknt (0:2:10, 4), 4, x, y);情节(x, y-fnval (sp0 x),“r”,“线宽”,2)
不过,您可以使用初始近似创建另一个相同结,但是更好的分布。错误是策划的黑色。
sp1 = spap2 (newknt (sp0), 4, x, y);持有在情节(x, y-fnval (sp1, x),“k”,“线宽”,2)从
网格数据
所有的样条插值和逼近命令曲线拟合工具箱也可以处理网格数据,在任意数量的变量。
例如,这是一个双三次的花键interpolant墨西哥帽函数。
x =。+ (4: .2:4);y = 3: .2:3;(yy, xx) = meshgrid (y、x);r =π* sqrt (xx。^ 2 + yy。^ 2);z =罪(r)。/ r;bcs = csapi ({x, y}, z);fnplt (bcs)轴([5 5 5 5 -。5 (1)
这是最小二乘近似的噪声值相同的功能在同一网格。
knotsx = augknt (linspace (x(1),(结束),21),4);knotsy = augknt (linspace (y (1), y(结束),15),4);bsp2 = spap2 ({knotsx, knotsy}, (4 - 4), {x, y}, z + .02 *(兰德(大小(z))));fnplt (bsp2)轴([5 5 5 5 -。5 (1)
曲线
网格数据可以很容易处理,因为曲线拟合工具箱可以处理向量值样条函数。这也使得它容易处理参数曲线。
在这里,例如,是一个近似到正无穷,获得通过将一个三次样条曲线的点标记如下图所示。
t = 0:8;xy = [0 0; 1 1;1.7 0;1 1;0 0;1 1;-1.7 0;1 1;0 0]。”;infty = csape (t, xy,“周期”);fnplt (infty, 2)轴([2 2 -1.1 - 1.1])在情节(xy (1:), xy (2:)“o”)举行从
这里是相同的曲线,但在三维运动。
辊= csape (t) [xy; 1/2 1 1/2 0 1/2 1 1/2 0),“周期”);fnplt(辊、2 [0 4]“b”)举行在fnplt(辊、2、8 [4],“r”)plot3 (0, 0, 0,“o”)举行从
两部分的曲线绘制在不同的颜色和原点标记,作为援助可视化这双翼空间曲线。
表面
二维张量积样条函数值R ^ 3给表面。举例来说,这里是一个很好的近似曲面。
x = 0:4;y = 2:2;R = 4;r = 2;v = 0 (3、5、5);v (3::) = [0 (rr) / 2 0 (rr) / 2 0]。‘* (1 1 1 1 1);v (2::) = (R (R + R) / 2 R (R + R) / 2 R]。‘* [0 1 0 1 0);v (1::) = (R (R + R) / 2 R (R + R) / 2 R]。‘* (1 0 1 0 1);dough0 = csape ({x, y}, v,“周期”);fnplt (dough0)轴平等的,轴从
这是一个皇冠,表面的法线。
nx = 43;nx的xy = [(1);linspace (2, 2, nx)];点= fnval (dough0 xy) ';各级= fnval (fndir (dough0、眼睛(2)),xy);法线=交叉(接单(4:6 -:),各级(1:3,:));法线= (normals. / repmat (√sum(法线。*法线)),3,1))';pn =[点,点+法线];持有在为j = 1: nx plot3 (pn ([j, j + nx], 1), pn ([j, j + nx], 2), pn ([j, j + nx], 3))结束持有从
最后,这是它的投影(x, y)飞机。
fnplt (fncmb (dough0 [1 0 0;0 1 0]))轴([-5.25 5.25 -4.14 4.14]),轴从
分散的数据
还可以插入值在ungridded数据网站在平面上。例如,考虑的任务映射单元广场顺利单位圆盘。我们构建的数据值,标记为圈,和相应的数据网站,标记为x。每个数据网站由箭头连接到相关的值。
n = 64;t = linspace(0, 2 *π,n + 1);t(结束)= [];值= (cost;罪(t)];:情节(值(1)、价值观(2:)”或“)轴平等的,轴从网站= values. / repmat (max (abs(值))、2、1);持有在情节(网站(1:),网站(2:)“xk”)箭袋(网站(1:),网站(2:)…值(1:)网站(1:),值(2:)网站(2:))从
然后使用tpaps
构建一个二元插值向量值利用薄板样条。
圣= tpaps(网站,值,1);
花键确实地图单位广场顺利单位圆盘(大约),作为其情节通过fnplt
表示。情节展示的形象uniformly-spaced方格网样条下地图圣
。
持有在fnplt (st)从