스플라인을하는방법
이이에서는曲线拟合工具箱™의의라인를사용다양한방식으로스플라인을생성생성방법을을보여줍니다줍니다。
보간
CSAPI
명령을사용다음지점X
에서코사인함수일치하는3차스플보간을생성수있습니다。
x = 2*pi*[0 1 .1:.2:.9];y = cos(x);CS = CSAPI(X,Y);
그런다음fnplt
를사용스플라인볼있습니다있습니다있습니다。
FNPLT(CS,2);轴([ - 1 7 -1.2 1.2])上情节(x,y,'o') 抓住离开
보간확인하기
코사인함수2*pi의주기갖습니다갖습니다。이와관련하여차스플보간이얼마나수행될까요요?확인할한방법은두개끝점끝점에서에서에서계도함수의차분을계산하는것입니다입니다。
diff(fnval(fnder(cs),[0 2*pi]))
ANS = -0.1375
주기성을적용위해CSAPI
대신csape
를사용합니다。
csp = csape(x,y,“周期性”);抓住上FNPLT(CSP,'G') 抓住离开
확인결과다음과같습니다。
diff(fnval(fnder(csp),[0 2*pi]))
ANS = -2.2806E -17
2계이제에서합니다합니다。
diff(fnval(fnder(csp,2),[0 2*pi]))
ANS = -2.2204E -16
동일한데이터대한조각별선형보간은SPAPI
를사용됩니다。여기에서플롯에선형보간을으로합니다합니다합니다。
pl = spapi(2,x,y);抓住上fnplt(pl,'r',2)保持离开
평활화
데이터에이경우,일반적보간근사가합니다합니다。예를,다음과다음과데이터대해대해
x = linspace(0,2*pi,51);noisy_y = cos(x) + .2*(rand(size(x) - 。5);情节(x,noisy_y,'X')轴([-1 7 -1.2 1.2])
보간을아래파란색으로표시것구불구불한보간얻게됩니다됩니다됩니다。
抓住上fnplt(csapi(x,noisy_y))保持离开
반면,다음과다음과허용를사용하여하면하면하면
tol =(.05)^2*(2*pi)
TOL = 0.0157
아래에표시것매끄러운매끄러운얻습니다얻습니다얻습니다。
抓住上fnplt(spaps(x,noisy_y,tol),'r',2)保持离开
근사는끝에서훨씬더부정확하며,주기성을하지않습니다않습니다。주기성을를따라를연장한다음다음다음다음다음다음데이터에에맞춰근사한후후근사범위범위를원래구간구간구간구간으로제한하십시오。
noisy_y([1 end])=平均值(noisy_y([1 end]));lx =长度(x);lx2 =圆形(lx/2);范围= [lx2:lx 2:lx 2:lx2];sps = spaps([x(lx2:lx)-2*pi x(2:lx)x(2:lx2)+2*pi],noisy_y(range),2*tol);
그러면검은색된처럼거의주기근사를됩니다됩니다됩니다。
抓住上fnplt(sps,[0 2*pi],'K',2)保持离开
최소제곱근사법
또는작은스플라인으로이데이터에최소근사법을사용할수있습니다있습니다。
예를,4개뿐개뿐개뿐차스플시도해수있습니다있습니다있습니다있습니다。
spl2 = spap2(4,4,x,noisy_y);fnplt(spl2,'b',2);轴([ - 1 7 -1.2 1.2])上情节(x,noisy_y,'X') 抓住离开
매듭선택
SPAPI
또는SPAP2
를사용일반으로특정스플공간지정해야합니다합니다。이렇게하려면매듭시퀀스와위수를지정하며,이러한지정문제될있습니다있습니다。하지만위수가k
인스플라인사용하여x,y
데이터에라인보간수행할때,다음예와함수함수함수OPTKNT
를사용한시퀀스제공제공있습니다있습니다있습니다。
k = 5;%订单5,即我们正在使用四分之一的花纹x = 2*pi*sort([0 1 rand(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,10,101);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)保持离开
그리딩된데이터
曲线拟合工具箱의모든라인근사명령개수에없이그리딩된데이터를처리할수있습니다。
예를,다음은모자에쌍삼차라인입니다입니다입니다。
x = .0001+(-4:.2:4);y = -3:.2:3;[yy,xx] = meshgrid(y,x);r = pi*sqrt(xx。^2+yy。^2);z = sin(r)./ r;bcs = csapi({x,y},z);FNPLT(BCS)轴([-5 5 -5 5 -.5 1])
다음은한잡음있는값에동일한그리드에서의최소제곱근사입니다。
knotsx = augknt(linspace(x(1),x(end),21),4);knotsy = augknt(linspace(y(1),y(end),15),4);bsp2 = spap2({knotsx,knotsy},[4 4],{x,y},z+.02*(rand(size(z)) - .5));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 -2 -1.1 1.1])保持上情节(xy(1,:),xy(2,:),,,'o') 抓住离开
3차원이지만차원차원의동작을갖습니다갖습니다갖습니다
roller = csape(t,[xy; 0 1/2 1 1/2 0 1/2 1 1/2 0],“周期性”);fnplt(滚子,2,[0 4],,'b') 抓住上fnplt(滚子,2,[4 8],,'r')plot3(0,0,0,'o') 抓住离开
곡선의절반이색으로플로팅플로팅되었으며되었으며되었으며되었으며되었으며개날개공간곡선을시각화하는하는데도움도움도움을주기주기위해위해원점원점원점이이표시있습니다있습니다있습니다있습니다。
곡면
r^3의을이변량곱스플은을합니다합니다합니다。예를,다음은에적절한입니다。
x = 0:4;y = -2:2;r = 4;r = 2;V =零(3,5,5);v(3,:,::) = [0(r-r)/2 0(r-r)/2 0]。'*[1 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(面团)轴平等的,轴离开
다음은에대한의입니다입니다입니다。
nx = 43;xy = [一个(1,nx);linspace(2,-2,nx)];点= fnval(dough0,xy)';ders = fnval(fndir(dough0,eye(2)),xy);normals = cross(ders(4:6,:),ders(1:3,:));normals =(normals./repmat(sqrt(normals.* ormals),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(面团,[1 0 0; 0 1 0]))轴([ - 5.25 5.25 -4.14 4.14]),轴离开
산점데이터
평면의않은지점에주어진을할수도있습니다있습니다。예를,단위정사각형단위에매핑작업을보겠습니다보겠습니다보겠습니다。데이터(원표시됨)과대응(x로표시됨)을합니다합니다。각데이터연관값화살표로화살표로있습니다있습니다있습니다。
n = 64;t = linspace(0,2*pi,n+1);t(end)= [];值= [cos(t);罪(t)];绘图(值(1,:),值(2,2,:),,,'或者')轴平等的,轴离开sites = values./repmat(max(abs(Values):),2,1);抓住上绘图(站点(1,:),站点(2,2 :),,,'xk')Quiver(站点(1,:),站点(2,2 :),,,...值(1,:) - 站点(1,:),值(2,:) - 站点(2,:))保持离开
그런다음TPAP
를사용보간값을갖는스플을생성합니다합니다。
st = tpaps(站点,值,1);
이스플라인은fnplt
를생성아래표시된것실제로단위을단위에에에매끄럽게매끄럽게매끄럽게매끄럽게매끄럽게매끄럽게매끄럽게英石
의스플아래균일한간격정사각가겹쳐이미지를보여줍니다줍니다。
抓住上fnplt(st)保持离开