³£¼û²åÖµ·¨
¡¾Õª Òª¡¿²åÖµ·½·¨ÔÚÊýÖµ·ÖÎöÖÐÆð×ŷdz£ÖØÒªµÄ×÷Óá£Ôڴ˽éÉÜһЩ³£¼ûµÄ²åÖµ·½·¨¼° ÆäÓ¦Ó÷¶Àý¡£
¡¾¹Ø¼ü×Ö¡¿ÊýÖµ·ÖÎö£»²åÖµ·½·¨£»Ó¦Óã»
1. ²åÖµ·¨¶¨Òå
²åÖµ·¨Óֳơ°Äڲ巨¡±£¬ÊÇÀûÓú¯Êýf (x)ÔÚÄ³Çø¼äÖÐ
²åÈëÈô¸ÉµãµÄº¯ÊýÖµ£¬×÷³öÊʵ±µÄÌØ¶¨º¯Êý£¬ÔÚÕâЩ
x0 x1 x2 ....... xn-1 xn y0 y1 y2 ....... yn-1 yn
±í(1) ²åÖµµã
µãÉÏÈ¡ÒÑÖªÖµ£¬ÔÚÇø¼äµÄÆäËûµãÉÏÓÃÕâÌØ¶¨º¯ÊýµÄÖµ×÷Ϊº¯Êýf (x)µÄ½üËÆÖµ£¬ÕâÖÖ·½·¨³ÆÎª²åÖµ·¨¡£Èç¹ûÕâÌØ¶¨º¯ÊýÊǶàÏîʽ£¬¾Í³ÆËüΪ²åÖµ¶àÏîʽ¡£
2.³£¼ûµÄ²åÖµ·¨¼°Æä¹¹Ôì
? Lagrange²åÖµ·¨
£¨a).¹«Ê½ÍƵ¼£º
±í£¨1£©µÄLagrange²åÖµµÄ²åÖµ¶àÏîʽ
n
Ln(x)??f(xi)li(x),(j=0,1,2....n)¡£
i?0ÆäÖвåÖµ»ùº¯ÊýÊÇ lxj)n(x)??n(x?,(i,j=0,1 2...n) ¡£ i(xi??0ji?xj)Æä²åÖµÓàÏîΪ
R(x)?f(x)?Ln(x)?f(n?1)n(?)?n?1(x),
(n?1)!
n ÆäÖÐ??£¨a,b)£¬?n?1(x)??(x?xj)(x?x) ii??0jij
(b).matlabʵÏÖ·½·¨£º
MatlabûÓÐÖ±½ÓÇó½âµÄÏà¹Øº¯Êý£¬ÏÖ±àÒëÈçÏ£º function yi = Lagarange_chazhi(x,y,xi)
% ÇóÀ¸ñÀÊÈÕ²åÖµ,²¢·µ»ØÒ»¸öÊäÈëΪxiʱµÄº¯ÊýÖµ % x Ϊ²åÖµµãÏòÁ¿£¬ÖÁÉÙÓÐÈýÏî % y Ϊ²åÖµµãÖµµÄÏòÁ¿£¬ÏîÊýÓëxÏàͬ m = length(x); %Çó²åÖµ¸öÊý m1 = length(y); if m<=2
error('ÏîÊý²»×ã!'); end if m~=m1
error('!!!yµÄÏîÊýÓ¦ÓëxÏàͬ!!!'); end %¶Ô²ÎÊýµÄÅÐ¶Ï lag_hanshu = 0; syms X;
for (l = 1:m) %¹¹Ôì²åÖµ»ùº¯Êý la = y(l); for a = (1:l-1)
la = la*(X-x(a))/(x(l)-x(a)); end
for a = (l+1:m)
la = la*(X-x(a))/(x(l)-x(a)); end
format long
lag_hanshu = lag_hanshu+la;
%Çó½â³ö²åÖµº¯Êý end
yi = subs( lag_hanshu,'X',xi);
%·µ»Ø²åÖµº¯ÊýÊäÈëΪxiʱµÄÖµ End
(c).·½·¨È±ÏÝ£ºµ±²åÖµµã¸öÊýn?7ʱ£¬½«²úÉú
Áú¸ñÏÖÏó£º
¾µäÀý×Ó£¬¶Ôf(x)?1(1?25x2)½øÐÐÀ¸ñÀÊÈÕ²åֵͼ£¨1£©ÖдÓ×óµ½ÓÒ£¬´ÓÉϵ½Ï£¬n·Ö±ðΪ
ͼ(1) Lagarange²åÖµ·¨µÄÁú¸ñÏÖÏó
4,5...11£¬¿ÉÒÔ¿´³ö£¬µ±n?7ºó£¬ËüµÄ\\²åÖµº¯ÊýÔÚ
Á½¸ö¶Ëµã´¦·¢Éú¾çÁҵIJ¨¶¯£¬Ôì³É½Ï´óµÄÎó²î¡£ËùÒÔÀ¸ñÀÊÈÕ²åÖµ·¨Ò»°ã²»ÊÊÓÃÓڸߴβåÖµ¡£
? ·Ö¶ÎÏßÐÔ²åÖµ·¨
(a).²åÖµÔÀí£º
Ϊ±ÜÃâ¸ß´Î²úÉúµÄÁú¸ñÏÖÏ󣬲ÉÓ÷ֶβåÖµ£¬ÏàÁÚÁ½½Úµã¼äµÄº¯ÊýΪһ´ÎÏßÐÔº¯Êý, ͼÐÎΪÏ߶Σ¬ÔÚ[a,b]¼äΪÕÛÏߣ¬Èçͼ£¨2£©¡£
x1x2xn?1
a?x0xn?b
ͼ(2) ·Ö¶ÎÏßÐÔ²åÖµ
(b).matlabʵÏÖ·½·¨£º
MatlabÖÐûÓÐÏֳɵĺ¯Êý£¬ÏÖ±àÒëÈçÏ£º function Fenduan_liner(x,y) %¶Ôx,y½øÐзֶÎÏßÐÔ²åÖµ %ÓÃÐéÏß»³ö²åÖµºóµÄº¯Êý
m = length(x); %Çó²åÖµ¸öÊý m1 = length(y); if m~=m1
error('!!!yµÄÏîÊýÓ¦ÓëxÏàͬ!!!');
end %¶Ô²ÎÊýµÄÅÐ¶Ï hold on; for ii = 1:m-1
plot([x(ii) x(ii+1)],[y(ii) y(ii+1)]); %»³öÏß¶Î end
plot(x,y,'o'); %»³ö²åÖµµã end
(c).·½·¨È±ÏÝ£ºÔڽڵ㴦ÇúÏß²»Æ½»¬¡£
? ±£ÐβåÖµ£¨Hermite²åÖµ£©
£¨a).²åÖµÔÀí£º
Õë¶Ô·Ö¶Î²åÖµ·¨²»¹â»¬µÄÎÊÌ⣬Hermite²åÖµÒýÈë²å
ÖµµãµÄ
µ¼Êý¡£
xx0x1?xn
f(x)y0y1?ynf?(x)y?
0y1??y?n
±í(2) Hermite²åÖµ·¨ ÓÉÓÚÈô
f(x)?C1[a,b]ÇÒÒÑÖªf(x)º¯Êý±í¼°µ¼
Êý±í£¬Ôò´æÔÚΨһ²»³¬¹ý2n?1´Î¶àÏîʽH2n?1(x)Âú×ã²åÖµÌõ¼þ
??H2n?1(xi)?yiH(x'
(i?0,1,....n),
?2n?1i)?yiÔò£¬Í¨¹ýÇó½â·½³Ì£¬¿ÉµÃ³ö²åÖµº¯Êý
Æä²åÖµÓàÏîΪ Rf(2n?2)(?)2n?1(x)?(2n?2)!?2n?1(x)??(a,b)ÇÒÓëxÓйء£
(b).matlabʵÏÖ·½·¨£º
MatlabÖÐûÓÐÏֳɵĺ¯Êý£¬ÏÖ±àÒëÈçÏ£º function yi = Hermite(x,y,der_y,xi)
%¶Ôx,y½øÐÐHermite²åÖµ£¬Æä¸÷½ÚµãµÄµ¼ÊýΪder_y %·µ»ØÖµÎª´øÈë¾ØÕóxiºóµÄº¯ÊýÖµ if length(x) == length(y)
if length(y) == length(der_y)
n = length(x); %Çó²åÖµ¸öÊý end else
error('!!!yµÄÏîÊýÓ¦ÓëxÏàͬ!!!'); end if n<=1
warning('ÏîÊý²»×ã!');
end %¶Ô²ÎÊýµÄÅÐ¶Ï syms X; H = 0; for jj = 1:n a = 0; b = 0; l = 1; for ii = 1:n if ii ~= jj
a = a+1/(x(jj)-x(ii)); l = l*(X-x(ii))/(x(jj)-x(ii)); end end
A = (1-2*(X-x(jj))*a)*l^2; B = (X-x(jj))*l^2;
H = H+(A*y(jj)+B*der_y(jj)); %µü´ú·¨ÇóH end
yi = subs(H,'X',xi); end
lagarange Áú¸ñ ²åÖµ·¨ÏÖÏó ½µ´Î ·Ö ¶Î Ïß ½Úµã ÐÔ·ÀÖ¹Áú¸ñÏÖÏó ²åÖµ·¨ ²»¹â»¬ ¹â»¬ Hermite µ¼Êý²» ½Úµã´¦µ¼ÊýÏàͬ²åÖµ·¨ Ò׵õ½ ÓÉ ±ß½çÌõ¼þÍÆµ¼¸÷½Úµãµ¼Êý Èý´ÎÑùÌõ ²åÖµ·¨ 3. ²åÖµ·¨¶Ô±ÈÀýÖ¤
¶Ôy?1,x?[-1,1],ÔÚ1?25x2x=-1,-0.5,0,0.5,1µã´¦²åÖµ ´úÂëÈçÏ£º
syms X;
Y = 1./(1+25*X^2); x = -1:0.5:1; y = subs(Y,'X',x);
der_y = subs(diff(Y),'X',x); xi = -1:0.01:1; yi = 1./(1+25*xi.^2);
yi_Lagarange = Lagarange_chazhi(x,y,xi); yi_Hermite = Hermite(x,y,der_y,xi); yi_Yangtiao = spline(x,y,xi); hold on;
plot(x,y,'o',xi,yi,'b'); %»³ö·Ö¶Î²åÖµ Fenduan_liner(x,y); %»³öÀ¸ñÀÊÈÕ²åÖµ plot(xi,yi_Lagarange,':g'); %»³öHermite²åÖµ plot(xi,yi_Hermite,':'); %»³öÈý´ÎÑùÌõ²åÖµ plot(xi,yi_Yangtiao,'--g');
(c).·½·¨È±ÏÝ£ºÎÞ·¨»ñµÃ¸÷µãµÄµ¼Êý
¢Ü Èý´ÎÑùÌõ·¨
(a).²åÖµÔÀí£º
¶ÔÿÁ½¸öµã¼ä½øÐÐÈý´Î¶àÏîʽµÄ²åÖµ,ÇÒͨ¹ý¶Ëµãµ¼ÊýÍÆµ¼³ö¸÷µãµ¼Êý£¬Ê¹µÃ²åÖµº¯ÊýÔÚ²åÖµµã´¦µ¼ÊýÏàµÈ¡£
(b).matlabʵÏÖ·½·¨£º
MatlabÓÐÏֳɵĺ¯Êýspline£¬ÒÔÏÂΪ¡®help spline¡¯ ¡°PP = spline(X,Y) provides the piecewise polynomial form of the cubic spline interpolant to the data values Y at the data sites X,for use with the evaluator PPVAL and the spline utility UNMKPP.X must be a vector.¡±
¢Ý ²åÖµ·¨¹ØÏµÍ¼
½á¹ûͼÐÎΪ
£¨×¢£ºÀ¶É«ÊµÏßΪԺ¯Êý£¬À¶É«Ô²µãΪ²åÖµµã£¬À¶É«¶ÌÐéÏßΪ·Ö¶ÎÏßÐÔ²åÖµ£¬À¶É«µãÐéÏßΪHermite²åÖµ£¬ÂÌÉ«µã ÐéÏßΪLagarange²åÖµ£¬ÂÌÉ«¶ÌÐéÏßΪÈý´ÎÑùÌõ²åÖµ£©
½á¹û·ÖÎö£º
ËùÓвåÖµ·¨ÖУ¬·Ö¶ÎÏßÐÔ²åÖµ×îÌù½üÔº¯Êý£¬Æä´ÎHermite²åÖµ·¨£¬ÔÙÆä´ÎΪÈý´ÎÑùÌõ£¬ÓëLagarange²åÖµ
·¨½Ó½ü¡£µ«·Ö¶ÎÏßÐÔ²åÖµ·¨ÔÚ½áµã´¦²»¹â»¬£¬Hermiteµ¼ÊýÐÅÏ¢²»Ò×»ñµÃ£¬Lagarange²åÖµ·¨ËäÈ»¼ÆËã¼òµ¥£¬µ«¸ß´Î²úÉúÁú¸ñÏÖÏó£¬ËùÒÔÈý´ÎÑùÌõ²åÖµ·¨±È½ÏʵÓá£
¡¾²Î¿¼ÎÄÏס¿1.MATLABÊýÖµ·ÖÎö µÚ2°æ »úе¹¤Òµ³ö°æÉç ÕÅµÂ·á µÈ±àÖø