基于 - MATLAB - 的函数的插值方法 联系客服

发布时间 : 星期日 文章基于 - MATLAB - 的函数的插值方法更新完毕开始阅读c60b607f27284b73f2425021

作出节点,插值点,f(x)和Sn(x)的图形.

解 节点的横坐标和插值点等取值与例6.5.4相同.在MATLAB工作窗口输入程序

>>x0=-1:0.2:1; y0=1./(1+25.*x0.^2); xi=-0.9:0.2:0.9; b=max(x0);

a=min(x0);x=a:0.001:b; y=1./(1+25.*x.^2);

s=xxczhjt1(x0,y0,xi,x,y), title('y=1/(1+25 x^2)的分段线性插

值的有关图形')

运行后屏幕显示各小区间中点xi处Sn(x)的值,出现节点,插值点,f(x)和Sn(x)的图形(略)

s =

Columns 1 through 4

0.04864253393665 0.07941176470588 0.15000000000000 0.35000000000000

Columns 5 through 8

0.75000000000000 0.75000000000000 0.35000000000000 0.15000000000000

Columns 9 through 10

0.07941176470588 0.04864253393665

6.5.5 用MATLAB计算有关分段线性插值的误差

3?sin2x)),在区间[??,?]上取等距节点

3?4x2(xi,yi),i?0,1,2,?,9,构造分段线性插值函数Sn(x).

(1)用MATLAB程序计算各小区间中点xi处Sn(x)的值,作出节点,插值点,f(x)和Sn(x)的图形;

(2) 用MATLAB程序计算各小区间中点处Sn(x)的值及其相对误差;

例6.5.8 设函数f(x)?tan(cos((3) 用MATLAB程序估计maxf(x)和Sn(x)在区间[??,?]上的误差限.

???x??\解 在MATLAB工作窗口输入程序

>>h=2*pi/9; x0=-pi:h:pi;

y0=tan(cos((sqrt(3)+sin(2*x0))./(3+4*x0.^2))); xi=-pi+h/2:h:pi-h/2;

fi=tan(cos((3^(1/2)+sin(2*xi))./(3+4*xi.^2))); b=max(x0); a=min(x0);

x=a:0.001:b; y=tan(cos((sqrt(3)+sin(2.*x))./(3+4*x.^2))); si=xxczhjt1(x0,y0,xi,x,y); Ri=abs((fi-si)./fi);

xi,fi,si,Ri,i=[xi',fi',si',Ri']

title('y=tan(cos((sqrt(3)+sin(2 x))/(3+4 x^2)))的分段线性插

值的有关图形')

运行后屏幕显示Ri (略),并且作出节点,插值点,f(x)和Sn(x)的图形(略). 在MATLAB工作窗口输入程序

>> syms x

y=tan(cos((3^(1/2)+sin(2*x))/(3+4*x^2)));yxx=diff(y,x,2),

''运行后屏幕显示函数f(x)的二阶导数f(x)(略).

在MATLAB工作窗口输入程序

>> h=2*pi/9; x=-pi:0.0001:-pi;

yxx=2*tan(cos((3^(1/2)+sin(2.*x))./(3+4.*x.^2))).*(1+tan(

cos((3.^(1/2)+sin(2.*x))./(3+4.*x.^2))).^2).*sin((3^(1/2)+sin(2.*x))./(3+4.*x.^2)).^2.*(2*cos(2.*x)./(3+4*x.^2)-8*(3^(1/2)+sin

88.

(2.*x))./(3+4.*x.^2).^2.*x).^2-(1+tan(cos((3^(1/2)+sin(2.*x))./(3+4.*x.^2))).^2).*cos((3^(1/2)+sin(2.*x))./(3+4.*x.^2)).*(2.*cos(2.*x)./(3+4.*x.^2)-8*(3^(1/2)+sin(2.*x))./(3+4.*x.^2).^2.*x).^2-(1+tan(cos((3^(1/2)+sin(2.*x))./(3+4.*x.^2))).^2).*sin((3.^(1/2)+sin(2.*x))./(3+4.*x.^2)).*(-4.*sin(2.*x)./(3+4.*x.^2)-32*cos(2.*x)./(3+4.*x.^2).^2.*x+128*(3^(1/2)+sin(2.*x))./(3+4.*x.^2).^3.*x.^2-8*(3^(1/2)+sin(2.*x))./(3+4.*x.^2).^2);

myxx=max(yxx), R=(h^2)* myxx/8 运行后屏幕显示myxx =maxf(x)和Sn(x)在区间[??,?]上的误差限R如下

???x??\myxx = R =

-0.02788637150664 -0.00169893490711

6.6 分段埃尔米特插值及其MATLAB程序

6.6.2 分段埃尔米特插值的MATLAB程序

调用格式一:YI=interp1(X,Y,XI,'pchip') 调用格式二:YI=interp1(X,XI,'pchip')

例6.6.5 试用MATLAB程序计算例6.6.1中在各小区间中点处分段三次埃尔米特插值Hn(xi?1/2)及其相对误差.

解 在MATLAB工作窗口输入程序

>> h=0.2;x0=-1:h:1;y0=1./(1+25.*x0.^2); xi=-0.9:h:0.9; fi=1./(1+25.*xi.^2); yi=interp1(x0,y0,xi,'pchip'); Ri=abs((fi-yi)./fi); xi,fi,yi,Ri,i=[xi',fi',yi',Ri'] 运行后屏幕显示各小区间中点xi处的函数值fi,插值si,相对误差值Ri (略).

6.6.3 作有关分段埃尔米特插值图形的MATLAB程序

作有关分段埃尔米特插值图形的MATLAB主程序

function H=hermitetx(x0,y0,xi,x,y) H= interp1(x0,y0,xi,'pchip'); Hn= interp1(x0,y0,x,'pchip');

plot(x0,y0,'o',x,Hn,'-',xi,H,'*',x,y,'-.')

legend('节点(xi,yi)', '分段埃尔米特插值函数','插值点(x,H)','被

插值函数y')

我们也可以直接在在MATLAB工作窗口编程序,例如,

>> x0 =-6:6; y0 =sin(x0); xi = -6:.25:6; yi = interp1(x0,y0,xi,'pchip');

x=-6:0.001:6; y=sin(x); plot(x0,y0,'o',xi,yi,x,y,':'), legend('节点(xi,yi)','分段埃尔米特插值函数','被插值函数

y=sinx')

title(' y=sinx及其分段埃尔米特插值函数和节点的图形') >> x0 =-6:6; y0 =cos(x0);

xi = -6:.25:6;yi = interp1(x0,y0,xi,'pchip');

x=-6:0.001:6; y=cos(x); plot(x0,y0,'o',xi,yi,x,y,':'), legend('节点(xi,yi)','分段埃尔米特插值函数','被插值函数

y=cosx')

title(' y=cosx及其分段埃尔米特插值函数和节点的图形')

例6.6.6 设函数f(x)?1定义在区间[?5,5]上,节点(X(i),f(X (i)))的横坐21?x标向量X的元素是首项a=-5,末项b=5,公差h=1.5的等差数列,构造三次分段埃尔米特插值函数Hn,3(x).把区间[?5,5]分成20等份,构成20个小区间,用MATLAB程序计算各小区间中点xi处Hn,3(x)的值,并作出节点,插值点,f(x)和Hn,3(x)的图形.

89.

解 在MATLAB工作窗口输入程序

>>x0=-5:1.5:5;

y0=1./(1+x0.^2); x1=-4.75:0.5:4.75;

x=-5:0.001:5; y=1./(1+x.^2); H= hermitetx(x0,y0,x1,x,y) title('函数y=1/(1+x^2)及其分段埃尔米特插值函数,插值,节点(xi,yi)

的图形')

运行后屏幕显示各小区间中点xi处Hn,3(x)的值,出现节点,插值点,f(x)和

Hn,3(x)的图形(略).

例6.6.7 设函数f(x)?0.5x?cosx定义在区间[??,?]上,取n?7,按等距节点构造分段埃尔米特插值函数H7,3(x),用MATLAB程序计算各小区间中点xi处

H7,3(x)的值,作出节点,插值点,f(x)和H7,3(x)的图形.

解 记节点的横坐标xi????ih,h?2?/7,i?0,1,2,?,7插值点

xi?12?1(xi?xi?1),i?0,1,2,?,6.在MATLAB工作窗口输入程序 2>> h=2*pi/7; x0=-pi:h:pi;

y0=0.5.*x0-cos(x0); xi=-pi+h/2:h:pi-h/2; b=max(x0); a=min(x0); x=a:0.001:b;

y=0.5.*x-cos(x); H= hermitetx(x0,y0,xi,x,y)

title('函数y=0.5x-cos(x)及其分段埃尔米特插值函数,插值,节点

(xi,yi) 的图形')

运行后屏幕显示各小区间中点xi处H7,3(x)的值,出现节点,插值点,f(x)和H7,3(x)的图形(略).

6.6.4 用MATLAB计算有关分段埃尔米特插值的误差

1定义在区间[?1,1]上,取n?10,按等距节点构

1?25x2(4)造分段埃尔米特插值函数Hn,3(x),用MATLAB程序在[?1,1]上计算maxf(x)和

例6.6.8 设函数f(x)??1?x?1Hn,3(x)的误差公式和误差限.

解 在MATLAB工作窗口输入程序

>> syms h,x=-1:0.0001:1;

yxxxx=150000000./(1+25.*x.^2).^5.*x.^4-4500000./(1+25.*x.

^2).^4.*x.^2+15000./(1+25.*x.^2).^3; myxxxx=max(yxxxx), R=(h^4)* abs(myxxxx/384)

运行后输出f(x)的4阶导数在区间[?1,1]上绝对值的最大值myxxxx和Hn,3(x)在区间

[?1,1]上的误差公式myxxxx为

myxxxx = R =

15000 625/16*h^4

(4)在MATLAB工作窗口输入程序

>> h=0.2; R =625/16*h^4 运行后输出误差限为

R =

0.06250000000000

3?sin2x取n?9,按等))定义在区间[??,?]上,23?4x距节点构造分段埃尔米特插值函数Hn,3(x).

例6.6.9 设函数f(x)?tan(cos( 90.

(1)用MATLAB程序计算各小区间中点xi处Hn,3(x)的值,作出节点,插值点,f(x)和Hn,3(x)的图形;

(2) 并用MATLAB程序计算各小区间中点处Hn,3(x)的值及其相对误差; (3) 用MATLAB程序求maxf???x??(4)(x)和Hn,3(x)在区间[??,?]上的误差公式和各

插值的误差限.

解 (1)记节点的横坐标xi????ih,h?2?/9,i?0,1,2,?,9,插值点x1?(xi?xi?1),

i?212i?0,1,2,?,8.在MATLAB工作窗口输入程序

>>h=2*pi/9; x0=-pi:h:pi;

y0=tan(cos((sqrt(3)+sin(2*x0))./(3+4*x0.^2))); xi=-pi+h/2:h:pi-h/2;

fi=tan(cos((3^(1/2)+sin(2*xi))./(3+4*xi.^2))); b=max(x0); a=min(x0); x=a:0.001:b;

y=tan(cos((3^(1/2)+sin(2.*x))./(3+4*x.^2))); Hi= hermitetx(x0,y0,xi,x,y);

Ri=abs((fi-Hi)./fi); xi,fi,Hi,Ri,i=[xi',fi',Hi',Ri']

title('函数y=tan(cos((sqrt(3)+sin(2x))/(3+4x^2)))及其分段埃

尔米特插值函数,插值,节点(xi,yi) 的图形')

运行后屏幕显示各小区间中点xi处的函数值fi,插值Hi,相对误差值Ri,并且作出节点,插值点,f(x)和Hn,3(x)的图形(略).

(2)在MATLAB工作窗口输入程序

>> syms x

y=tan(cos((3^(1/2)+sin(2*x))/(3+4*x^2))); yxxxx=diff(y,x,4),%simple(yxxxx) 运行后屏幕显示函数f(x)的4阶导数f???x??(4)(x),然后将输出的f(4)(x)编程求

maxf(4)(x)和Hn,3(x)及其在区间[??,?]上的误差限的MATLAB程序如下

>>syms h,x=-pi:0.0001:pi;

yxxxx=-12.*(1.+tan(cos((3.^(1./2)+sin(2.*x))./(3.+4.*x.^

2))).^2).^2.*sin((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2)).^3.*(2.*cos(2.*x)./(3.+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3.+4.*x.^2).^2.*x).^2.*(-4.*sin(2.*x)./(3.+4.*x.^2)-32.*cos(2.*x)./(3.+4.*x.^2).^2.*x+128.*(3.^(1./2)+sin(2.*x))./(3.+4.*x.^2).^3.*x.^2.-8.*(3.^(1./2)+sin(2.*x))./(3.+4.*x.^2).^2)+16.*(1.+tan(cos((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2))).^2).^2.*sin((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2)).^4.*(2.*cos(2.*x)./(3.+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3.+4.*x.^2).^2.*x).^4.*tan(cos((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2)))+8.*tan(cos((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2))).^3.*(1.+tan(cos((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2))).^2).*sin((3.^(1./2)+sin(2.*x))./(3+4.*x.^2)).^4.*(2.*cos(2.*x)./(3+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3.+4.*x.^2).^2.*x).^4-8.*tan(cos((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2))).*(1.+tan(cos((3.^(1./2)+sin(2.*x))./(3.+4*x.^2))).^2).*sin((3.^(1./2)+sin(2.*x))./(3.+4.*x.^2)).^2.*(2.*cos(2.*x)./(3.+4.*x.^2)-8*(3.^(1./2)+sin(2.*x))./(3.+4*x.^2).^2.*x).^4+6.*(1+tan(cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2))).^2).*sin((3.^(1./2)+sin(2.*x))./(3+4.*x.^2)).*(2.*cos(2.*x)./(3+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^2.*x).^2.*(-4.*sin(2.*x)./(3+4.*x.^2)-32.*cos(2.*x)./(3+4.*x.^2).^2.*x+128.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^3.*x.^2-8.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^2)+(1+tan(cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2))).^2).*cos((3.^(1./2)+sin(2.*x))./(3+4.*x.^2)).*(2.*cos(2.*x)./(3+4.*x.^2)-8.*(3.^(1./2)+sin(2.*x))./(3+4.*x.^2).^2.*x).^4-3.*(1+tan(cos((3.^(1./2)+sin(2.*x))./(3+4.

91.