이번역페이지는최신내용을담고있지않습니다。최신내용을문으로보려면여기를클릭하십시오。
이예제에서는曲线拟合工具箱™의csapi
및csape
명령을사용하여3차스플라보간을생성하는방법을보여줍니다。
다음명령은
值= csapi(x,y,xx)
Not-a-knot끝점조건을사용하여주어진데이터(x, y
)에대한3차스플라marketing보간을하여xx
에서의값을반환합니다。여기서의보간함수는절점시퀀스x
를갖는조각별3차함수입니다。이함수의3차조각이합쳐져2개의연속도함수를갖는하나의함수가생성됩니다。“not-a-knot끝점조건은첫번째내부절점과마지막내부절점에서3계도함수도연속적(반올림오차까지)이라는조건입니다。
데이터점을2개만지정하면직선보간이생성됩니다。
X = [0 1];Y = [2 0];Xx = linspace(0,6,121);情节(xx csapi (x, y, xx),“k -”, x, y,“罗”)标题(“两点插值”)
3개의데이터점을지정하면포물선보간이생성됩니다。
X = [2 3 5];Y = [1 0 4];情节(xx csapi (x, y, xx),“k -”, x, y,“罗”)标题(“三点插值”)
더일반적으로,4개이상의데이터점을지정하면3차스플라보간이생성됩니다。
X = [1 1.5 2 4.1 5];Y = [1 -1 1 -1 1];情节(xx csapi (x, y, xx),“k -”, x, y,“罗”)标题(五次样条插值算法)
위의보간은훌륭한보간처럼보이지만,csapi
가제대로동작하는지확하려면어떻게해야할까?
우리는데이터점을플로팅하고보간함수가이러한점들을관통하는것을보면서csapi
가보간을잘수행했음을확했습니다。하지만3차스플라인을확실히얻으려면,예상되는유형의3차스플라인에서가져온데이터로시작하여csapi
가그3차스플라을재현하는지,즉데이터를가져온바로그원래3차스플라인을다시제공하는지확인해봐야할수있습니다。
확tmp할수있는3차스플라tmp함수의간단한예로3차절단멱함수를들수있습니다。즉,다음과같습니다。
여기서西
는절점중하나이고아래첨자“+”는다음과같이명령subplus
에의해제공되는절단 함수를나타냅니다。
帮助subplus
正的部分。x,如果x>=0 y = subplus(x):= (x)_{+} =, 0,如果x<=0返回x的正部分。用于计算截断幂。
3차절단멱함수는특정선택西
=2
에대해아래와같이플로팅됩니다。예상한바와같이,2의왼쪽은0이고2의오른쪽은(x-2)^3처럼상승합니다。
情节(xx subplus (xx-2)。^ 3,“y”,“线宽”3)轴([0,-10,70])
이번에는데이터지점0:6에서이특3차정스플라인을보간하고,스플라인위에보간함수를검은색으로플로팅합니다。
X = 0:6;Y = + (x-2) ^3;值= csapi(x,y,xx);持有在情节(xx,价值观,“k”, x, y,“罗”)举行从标题(插值到(x-2)_+)^3)
두함수를비교할때는대개두함수의차이를플로팅하는것이유익합니다。
Plot (xx, values - subplus(xx-2).^3)三次样条插值到(x-2)_+)^3的误差)
그차이의크기를가늠해보기위해최대데이터값도구해볼수있습니다。그러면오차가불가피한반올림오차보다는더낫다는것을알수있습니다。
Max_y = max(abs(y))
Max_y = 64
추가적marketing테스트로,지점0:6에서csapi
로생성된보간과일치할수없는절단멱함수를보간합니다。예를들어,csapi
가not-a-knot“조건을사용하기때문에보간스플라인의첫번째내부절점은실제로매듭이아닙니다。따라서이보간은해당지점에서3개의연속도함수를갖습니다。즉3계도함수가그지점에서불연속이므로그지점을중심으로3차절단멱함수를재현할수없음을의미합니다。
值= csapi(x,subplus(x-1).^3,xx);Plot (xx, values - subplus(xx-1).^3)非结插值到((x-1)_+)^3的误差)
1은첫번째내부매듭이므로,이보간에서는활성화되지않습니다。
그차이의크기는0.18이지만,1에서멀어질수록빠르게감쇠됩니다。위 그림은3차스플라보간이본질적으로국부적임을보여줍니다。
3차보간스플라인을후속실행이나도함수계산또는기타조작에적합한형식으로유지할수있습니다。이를위해다음형식의csapi
를호출합니다。
Pp = csapi(x,y)
그러면보간함수의ppform이반환됩니다。다음명령으로새로운점xx
에서이형식을실행할수있습니다。
值= fnval(pp,xx)
다음명령으로보간함수를미분할수있습니다。
DPP = fnder(pp)
또는다음명령으로보간함수를적분할수있습니다。
Ipp = fnint(pp)
그러면각각미분또는적분의ppform이반환됩니다。
보간함수의미분을` ` ` `시하기위해다음절단멱함수의도함수를플로팅(노란색)` `한다음
그위에원래3차절단멱함수에대한보간함수의도함수를플로팅(검은색)합니다。
情节(xx, 3 * subplus (xx-2)。^ 2,“y”,“线宽”,3) pp = csapi(x,subplus(x-2).^3);DPP = fnder(pp);持有在情节(xx fnval(民进党,xx),“k”)举行从标题(插值函数对(x-2)_+)^3的导数)
여기서도그차이를플로팅하여비교하는것이더유익하며,전과같이그차이가반올림오차보다더크지않습니다。
Plot (xx, fnval(dpp,xx) - 3*subplus(xx-2).^2)插值函数((x-2)_+)^3的导数误差)
절단멱함수의2계도함수는다음과같습니다。
이함수와원래함수에대한보간함수2계의도함수간의차이를플로팅하면현재비약이발생하지만,이는여전히반올림오차범위이내입니다。
DDPP = fnder(dpp);Plot (xx, fnval(ddpp,xx) - 6*subplus(xx-2))插值函数((x-2)_+)^3二阶导数的误差)
절단멱함수의적분은다음과같습니다。
이함수와원래함수에대한보간함수를적분한것간의차이를플로팅해도역시오차가반올림오차범위이내라는점을알수있습니다。
Ipp = fnint(pp);Plot (xx, fnval(ipp,xx) - subplus(xx-2).^4/4) title(插值函数对(x-2)_+)^3积分的误差)
csapi
와마찬가지로,csape
명령을실행하면주어진데이터에대한3차스플라보간을얻을수있습니다。하지만이명령에서는다양한끝점조건이추가로허용됩니다。이함수의가장간단한형식은다음과같습니다。
Pp = csape(x,y)
이명령에는라그랑주끝점조건이사용되는데,이조건은csapi
에서사용하는not-a-knot조건에대한일반적대입니다。csape
는보간의값을직접반환하지않고ppform만반환합니다。
예를들어,다음함수에대한보간을다시생각해보겠습니다。
csapi
가제대로재현하지못하는함수입니다。csape
에서얻은보간의오차(빨간색)와함께,csapi
에서반환된not-a-knot보간의오차(검은색)를플로팅합니다。
Exact = subplus(xx-1).^3;Plot (xx, fnval(csapi(x,subplus(x-1).^3),xx) -准确,“k”)举行在Plot (xx, fnval(csape(x,subplus(x-1).^3),xx) -准确,“r”)标题(“非结的错误与拉格朗日结束条件”)({传奇“Not-a-Knot”“拉格朗日”});持有从
이경우두보간의차이는그다지크지않습니다。
csape
명령을사용하면3차보간스플라인에몇가지다른유형의끝점조건도지정할수있습니다。예를들어,다음명령은
Pp = csape(x,y,'变分')
소위‘자연’끝점조건을사용합니다。이는2계도함수가양끝절점에서0이라는의미입니다。
이단계에서는'자연' 3차스플라보간을다음함수에적용하고
오차를플로팅하는방법을보여줍니다。아래코드는'变分문자열인수와동일한대체인수구문으로”자연”스플라인보간을계산하는코드입니다。문자열“第二”를사용하여,csape
가양끝데이터지점에서2계도함수를디폴트값0으로설정하도록지정했습니다。
Pp = csape(x, x-2的次幂)^3,“第二”);Plot (xx, fnval(pp,xx) - subplus(xx-2).^3)“自然样条插值误差((x-2)_+)^3”)
오른쪽끝점근처의큰오차에주목하십시오。이같은오차가발생한이유는'자연”끝점조건에서그곳에2 0인계도함수가있도록암시적으로요구했기때문입니다。
오차를줄이기위해올바른2계도함수를명시적으로사용할수도있습니다。우선,끝점에서절단멱함수의올바른2계도함수값을계산합니다。
Endcond = 6*subplus(x([1 end])-2);
그런다음,끝점에있는2계도함수가방금계산2계한도함수값과일치하도록지정하여보간을만듭니다。이를위해서는데이터값과함께왼쪽끝점조건에는endcond (1)
을제공하고오른쪽끝점조건에는endcond (2)
를제공하면됩니다。
Pp = csape(x,[endcond(1) subplus(x-2).]^ 3 endcond (2)),“第二”);Plot (xx, fnval(pp,xx) - subplus(xx-2).^3,“r”)标题(样条插值到(x-1)_+)^3的误差;...“当在端点处匹配二阶导数时”])
csape
에서는또한끝점기울기도지정할수있습니다。이것이夹紧的(또는)完整的) 3차스플라보간입니다。다음명령문은
Pp = csape(x,[sl,y,sr],'clamped')
왼쪽끝데이터지점의기울기는sl
이고오른쪽끝데이터지점의기울기는老
演讲稿3차스플라演讲稿보간을데이터(x
,y
)에대해생성합니다。
이들조건을혼합하는것도가능합니다。예를들어,많이연습해본다음절단멱함수는
x
=0에서기울기가0이고x
=6(마지막데이터지점)에서2계도함수가30입니다。
따라서왼쪽끝점의기울기와오른쪽끝점의곡률에그값을사용하면결과로생성되는보간에오차가없으리라예상됩니다。
Pp = csape(x,[0次+ (x-1))。^3 30], [1 2]);Plot (xx, fnval(pp,xx) - subplus(xx-1).^3) title([样条插值到(x-1)_+)^3的误差;...“终端条件混合。”])
주기끝점조건을규정하는것도가능합니다。예를들어,사marketing함수가2*pi의주기를갖고지점(π/ 2)* (2:2)
에서[0 -1 0 1 0]
의값을갖습니다。이러한지점에서사인함수와사인함수의주기적3차스플라인보간사이의차이에는2%불과합니다。나쁘지않은수준입니다。
X = (pi/2)*(-2:2);Y = [0 -1 0 1 0];Pp = csape(x,y,“周期”);Xx = linspace(-pi,pi,201);Plot (xx, sin(xx) - fnval(pp,xx),“x”)标题(周期三次样条插值到sin(x)的误差)
csapi
또는csape
에명시적으로포함하지않은끝점조건은csape
디폴트끝점조건으로보간을생성한다음,그보간에0의값과몇가지끝점조건에대한보간의알맞은스칼라배수를더하는방법으로처리할수있습니다。만족해야할”비표준”끝점조건이두개있는경우2×2선형시스템을먼저풀어야할수있습니다。
예를들어,다음데이터에대한3차스플라보간年代
를계산하고
X = 0:.25:3;Q = @(x) x.*(-1+x.* (-1+x.*x/5));Y = q(x);
아래의조건을
lambda(s):= a * (Ds)(e) + b * (D²s)(e) = c
점e
에서年代
의1계도함수와2계도함수에적용한다고가정하겠습니다。
데이터는다음과같은특정파라미터로이끝점조건을만족하는4차다항식에서생성되었습니다。
E = x(1);A = 2;B = -3;C = 4;
이특정조건을만족하는보간을생성하기위해,먼저디폴트끝점조건을가진보간함수를생성하고,
Pp1 = csape(x,y);
위보간함수의첫번째다항식조각의1계도함수를생성합니다。
Dp1 = fnder(fnbrk(pp1,1));
또한아래와같이e
에서기울기가1이라고지정하고0의데이터값에대한3차스플라보간을생성합니다。
Pp0 = csape(x,[1, 0 (size(y)),0], [1,0]);
첫번째다항식조각의1계도함수도생성합니다。
Dp0 = fnder(fnbrk(pp0,1));
그런다음아래와같이pp1
과pp0
모두에대해λ
를계산하고,
Lam1 = a*fnval(dp1,e) + b*fnval(fnder(dp1),e);Lam0 = a*fnval(dp0,e) + b*fnval(fnder(dp0),e);
3차스플라을얻기위해pp1
과pp0
의올바른일차결합을생성합니다。
S:= pp1 + ((c - lambda(pp1))/lambda(pp0)) * pp0
3차이스플라인은오른쪽끝점에서디폴트끝점조건뿐아니라원하는조건도만족합니다。이일차결합은fncmb
의도움을받아만듭니다。
S = fncmb(pp0,(c-lam1)/lam0,pp1);
보간오차의플롯을통해,年代
가디폴트조건을가진보간pp1
보다e
근처에서4차다항식을약간더낫게피팅한다는것을알수있습니다。
Xx = (-.3):.05:.7;Yy = q(xx);Plot (xx, fnval(pp1,xx) - yy,“x”)举行在Plot (xx, fnval(s,xx) - yy,“o”)举行从传奇({“默认条件”“非标准条件”},“位置”,“本身”)
보간의3계도함수에아래조건을적용하려는경우(4차다항식이이조건을만족함),
(s) = (D³s)(3) = 14.6
0의값에대해보간하고왼쪽끝점에0의1계도함수가있어pp0
으로부터확실히독립적일수있는3차스플라을추가로생성합니다。
Pp2 = csape(x,[0, 0 (size(y)),1],[0,1]);
그런다음,아래의일차결합에서계수d0
과d2
를구합니다。
S:= pp1 + d0*pp0 + d2*pp2
이일차결합은아래의선형시스템을푸는일차결합입니다。
s = c
Mu (s) = 14.6
pp0
과pp2
가둘다모든보간지점에서사라지므로,d0
과d2
중어떤것을선택하든年代
가주어진데이터와일치하게됩니다。
재미삼아matlab®控制台코딩기능을사용해λ(pp_j)
와μ(pp_j)
(이때)j
=0:2임)를계산하는루프를작성해보겠습니다。
Dd = 0 (2,3);为j=0:2 j= num2str(j);eval ([“民进党”J' =曾经(pp 'J”),“]);eval ([“ddpp”J=曾经(民进党的J”),“]);eval ([“dd(1,1 +”J“* fnval(民进党)=”J”,e) + b * fnval (ddpp 'J“e);”]);eval ([“dd(2, 1 +”J') = fnval(曾经(ddpp 'J”),3),“]);结束
pp0
,pp1
,pp2
에 대한λ
와μ
의값이주어지므로올바른일차결합을정의하는계수를구합니다。
D = dd(:,[1,3])\([c;14.6]-dd(:,2));S = fncmb(fncmb(pp0,d(1),pp2,d(2)),pp1);XXX = 0:.05:3;Yyy = q(xxx);Plot (xxx, yyy - fnval(s,xxx),“x”)标题(' y = x*(-1+x* (-1+x*x/5))的样条插值错误')
재확인을위해,이함수에대한차完成3스플라인보간에서얻은오차와이오차를비교합니다。
持有在Plot (xxx, yyy - fnval(csape(x,[-1,y,-7+(4/5)*27],“夹紧”), xxx),“o”)举行从传奇({“非标准条件”“Endslope条件”})
두오차가끝점근처에서만다릅니다(크게다르지는않음)。이는 곧pp0
과pp2
가둘다각각의끝점근처에서만상당한크기라는사실을명해줍니다。
마지막확marketing으로,年代
가3에서원하는3계도함수조건을만족하는지확합니다。
fnval(曾经(年代,3),3)
Ans = 14.6000