发布时间 : 星期日 文章基于 - 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.