MATLAB Function Reference |
Syntax
yy = spline(x,
y,
xx) pp = spline(x,
y)
Description
yy = spline(x,y,xx)
會使用三次 spline 內插方式去求 yy
( 函式 y
在向量 xx
的點中的函數值 )。若 y
是一個矩陣,則會以 y
的每一行來作內插再傳回一個向量值, yy
為 length(xx)
-by-size(y,2)
。
pp = spline(x,y)
會傳回分段式的多項式(piecewise polynomial),可以給之後的 ppval
與 unmkpp
使用。
通常我們會使用 not-a-knot end 這個條件。也就是若 y
的 entry 比 x
多兩個的話,則 y
的第一個和最後一個值會當作末端點斜率(end slopes)來使用,如以下 :
f(x) = y(:,2:end-1), df(min(x)) = y(:,1), df(max(x)) = y(:,end)
Examples
Example 1. 會產生一個正弦波,在 finer mesh 上對 spline 進行取樣
x = 0:10; y = sin(x); xx = 0:.25:10; yy = spline(x,y,xx); plot(x,y,'o',xx,yy)
Example 2. 使用規定的末端點斜率來進行 clamped 或 complete 的 spline 內插。在某些分布之下內插的末端點斜率會強制設為零。
x = -4:4; y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0]; cs = spline(x,[0 y 0]); xx = linspace(-4,4,101); plot(x,y,'o',xx,ppval(cs,xx),'-');
t = 1900:10:1990; p = [ 75.995 91.972 105.711 123.203 131.669 ... 150.697 179.323 203.212 226.505 249.633 ];
表示 1900 至 1990 年間美國人口的分布(單位為百萬)。這個表示式
spline(t,
p,
2000)
使用三次 spline 去外插及預測 2000的人口數,結果如下
ans = 270.6060
x = pi*[0:.5:2]; y = [0 1 0 -1 0 1 0; 1 0 1 0 -1 0 1]; pp = spline(x,y); yy = ppval(pp, linspace(0,2*pi,101)); plot(yy(1,:),yy(2,:),'-b',y(1,2:5),y(2,2:5),'or'), axis equal
會用五個資料點 y(:,2),...,y(:,6)
(用 o 表示)來畫一個圓。 y
比 x
多兩個值(即多兩行) ,y(:,1)
與 y(:,end)
當作末端點斜率來使用。
Algorithm
三對角線線性系統可經由 spline 內插來求三次多項式的係數。 spline
會使用 ppval
、 mkpp
與 unmkpp
這些函式,這些函式可以用於處理分段式的多項式。要獲得進一步的資訊可參考其 M-file以及 Spline Toolbox 。
See Also
References
[1] de Boor, C., A Practical Guide to Splines, Springer-Verlag, 1978.
spinmap | spones |