没有合适的资源?快使用搜索试试~ 我知道了~
函数的插值方法及matlab程序
4星 · 超过85%的资源 需积分: 5 16 下载量 198 浏览量
2011-12-06
16:05:30
上传
评论 2
收藏 590KB DOC 举报
温馨提示
试读
31页
分段埃尔米特插值,拉格朗日插值,三次样条插值,分段三次样条插值,高元插值等
资源推荐
资源详情
资源评论
6.1 插值问题及其误差
6.1.2 与插值有关的 MATLAB 函数
(一) POLY2SYM 函数
调用格式一:poly2sym (C)
调用格式二:f1=poly2sym(C,'V') 或 f2=poly2sym(C, sym ('V') ),
(二) POLYVAL 函数
调用格式:Y = polyval(P,X)
(三) POLY 函数
调用格式:Y = poly (V)
(四) CONV 函数
调用格式:C =conv (A, B)
例 6.1.2 求三个一次多项式 、 和 的积 .它们的零点
分别依次为 0.4,0.8,1.2.
解 我们可以用两种 MATLAB 程序求之.
方法 1 如输入 MATLAB 程序
>> X1=[0.4,0.8,1.2]; l1=poly(X1), L1=poly2sym (l1)
运行后输出结果为
l1 =
1.0000 -2.4000 1.7600 -0.3840
L1 =
x^3-12/5*x^2+44/25*x-48/125
方法 2 如输入 MATLAB 程序
>> P1=poly(0.4);P2=poly(0.8);P3=poly(1.2);
C =conv (conv (P1, P2), P3) , L1=poly2sym (C)
运行后输出的结果与方法 1 相同.
(五) DECONV 函数
调用格式:[Q,R] =deconv (B,A)
(六) roots(poly(1:n))命令
调用格式:roots(poly(1:n))
(七) det(a*eye(size (A)) - A)命令
调用格式:b=det(a*eye(size (A)) - A)
6.2 拉格朗日(Lagrange)插值及其 MATLAB 程序
6.2.1 线性插值及其 MATLAB 程序
例 6.2.1 已知函数 在 上具有二阶连续导数, ,且满足条件
.求线性插值多项式和函数值 ,并估计其误差.
解 输入程序
>> X=[1,3];Y=[1,2]; l01= poly(X(2))/( X(1)- X(2)), l11=
poly(X(1))/( X(2)- X(1)), l0=poly2sym (l01),l1=poly2sym
(l11), P = l01* Y(1)+ l11* Y(2),
L=poly2sym (P),x=1.5; Y = polyval(P,x)
运行后输出基函数 l
0
和 l
1
及其插值多项式的系数向量 P(略)、插值多项式 L 和插值 Y 为
l0 = l1 = L = Y =
-1/2*x+3/2 1/2*x-1/2 1/2*x+1/2 1.2500
输入程序
>> M=5;R1=M*abs((x-X(1))* (x-X(2)))/2
运行后输出误差限为
R1 =
1.8750
例 6.2.2 求函数 e 在 上线性插值多项式,并估计其误差.
解 输入程序
>> X=[0,1]; Y =exp(-X) ,
l01= poly(X(2))/( X(1)- X(2)),
l11= poly(X(1))/( X(2)- X(1)), l0=poly2sym (l01),
l1=poly2sym (l11), P = l01* Y(1)+ l11* Y(2), L=poly2sym
(P),
运行后输出基函数 l
0
和 l
1
及其插值多项式的系数向量 P 和插值多项式 L 为
l0 = l1 = P =
-x+1 x -0.6321 1.0000
L =
-1423408956596761/2251799813685248*x+1
输入程序
>> M=1;x=0:0.001:1; R1=M*max(abs((x-X(1)).*(x-X(2))))./2
运行后输出误差限为
R1 =
0.1250.
6.2.2 抛物线插值及其 MATLAB 程序
例 6.2.3 求将区间 [0, π/2] 分成 等份 ,用 产生 个
节点,然后根据(6.9)和(6.13)式分别作线性插值函数 和抛物线插值函数 .
用它们分别计算 cos (π/6) (取四位有效数字),并估计其误差.
解 输入程序
>> X=[0,pi/2]; Y =cos(X) ,
l01= poly(X(2))/( X(1)- X(2)),
l11= poly(X(1))/( X(2)- X(1)), l0=poly2sym (l01),
l1=poly2sym (l11),
P = l01* Y(1)+ l11* Y(2), L=poly2sym (P),x=pi/6;
Y = polyval(P,x)
运行后输出基函数 l
0
和 l
1
及其插值多项式的系数向量 P、插值多项式和插值为
l0 =
-5734161139222659/9007199254740992*x+1
l1 =
5734161139222659/9007199254740992*x
P =
-0.6366 1.0000
L =
-5734161139222659/9007199254740992*x+1
Y =
0.6667
输入程序
>> M=1;x=pi/6; R1=M*abs((x-X(1))*(x-X(2)))/2
运行后输出误差限为
R1 =
0.2742.
(2) 输入程序
>> X=0:pi/4:pi/2; Y =cos(X) ,
l01= conv (poly(X(2)),
poly(X(3)))/(( X(1)- X(2))* ( X(1)- X(3))),
l11= conv (poly(X(1)),
poly(X(3)))/(( X(2)- X(1))* ( X(2)- X(3))),
l21= conv (poly(X(1)),
poly(X(2)))/(( X(3)- X(1))* ( X(3)- X(2))),
l0=poly2sym (l01),l1=poly2sym (l11),l2=poly2sym (l21),
P = l01* Y(1)+ l11* Y(2) + l21* Y(3), L=poly2sym
(P),x=pi/6; Y = polyval(P,x)
运行后输出基函数 l
01
、l
11
和 l
21
及其插值多项式的系数向量 P、插值多项式 L 和插值 Y 为
l0 =
228155022448185/281474976710656*x^2-2150310427208497/1125899906842624*x+1
l1 =
-228155022448185/140737488355328*x^2+5734161139222659/2251799813685248*x
l2 =
228155022448185/281474976710656*x^2-5734161139222659/9007199254740992*x
P =
-0.3357 -0.1092 1.0000
L=
-6048313895780875/18014398509481984*x^2-
7870612110600739/72057594037927936*x+1
Y =
0.8508
输入程序
>> M=1;x=pi/6; R2=M*abs((x-X(1))*(x-X(2)) *(x-X(3)))/6
运行后输出误差限为
R2 =
0.0239.
6.2.3 次拉格朗日(Lagrange)插值及其 MATLAB 程序
例 6.2.4 给 出 节 点 数 据 , , ,
,作三次拉格朗日插值多项式计算 ,并估计其误差.
解 输入程序
>> X=[-2,0,1,2]; Y =[17,1,2,17];
p1=poly(X(1)); p2=poly(X(2));
p3=poly(X(3)); p4=poly(X(4));
l01= conv ( conv (p2, p3), p4)/(( X(1)- X(2))* ( X(1)-
X(3)) * ( X(1)- X(4))),
l11= conv ( conv (p1, p3), p4)/(( X(2)- X(1))* ( X(2)-
X(3)) * ( X(2)- X(4))),
l21= conv ( conv (p1, p2), p4)/(( X(3)- X(1))* ( X(3)-
X(2)) * ( X(3)- X(4))),
l31= conv ( conv (p1, p2), p3)/(( X(4)- X(1))* ( X(4)-
X(2)) * ( X(4)- X(3))),
l0=poly2sym (l01),
l1=poly2sym (l11),l2=poly2sym (l21), l3=poly2sym (l31),
P = l01* Y(1)+ l11* Y(2) + l21* Y(3) + l31* Y(4),
运行后输出基函数 l
0
,
l
1
,
l
2
和 l
3
及其插值多项式的系数向量 P(略)为
l0 =
-1/24*x^3+1/8*x^2-1/12*x,l1 =1/4*x^3-1/4*x^2-x+1
l2 =
-1/3*x^3+4/3*x,l3 =1/8*x^3+1/8*x^2-1/4*x
输入程序
>> L=poly2sym (P),x=0.6; Y = polyval(P,x)
运行后输出插值多项式和插值为
L = Y =
x^3+4*x^2-4*x+1 0.2560.
输入程序
>> syms M; x=0.6;
R3=M*abs((x-X(1))*(x-X(2)) *(x-X(3)) *(x-X(4)))/24
运行后输出误差限为
R3 =
91/2500*M
即
R
3
, .
6.2.5 拉格朗日多项式和基函数的 MATLAB 程序
求拉格朗日插值多项式和基函数的 MATLAB 主程序
function [C, L,L1,l]=lagran1(X,Y)
m=length(X); L=ones(m,m);
for k=1: m
V=1;
for i=1:m
if k~=i
V=conv(V,poly(X(i)))/(X(k)-X(i));
end
end
L1(k,:)=V; l(k,:)=poly2sym (V)
end
C=Y*L1;L=Y*l
例 6.2.5 给出节点数据 , , ,
, , ,作五次拉格朗日插值多项式和基函数,
并写出估计其误差的公式.
解 在 MATLAB 工作窗口输入程序
>> X=[-2.15 -1.00 0.01 1.02 2.03 3.25];
Y=[17.03 7.24 1.05 2.03 17.06 23.05];
[C, L ,L1,l]= lagran1(X,Y)
运行后输出五次拉格朗日插值多项式 L 及其系数向量 C,基函数 l 及其系数矩阵 L
1
如下
C =
-0.2169 0.0648 2.1076 3.3960 -4.5745 1.0954
L =
1.0954-4.5745*x+3.3960*x^2+2.1076*x^3+0.0648*x^4-0.2169*x^5
L1 =
-0.0056 0.0299 -0.0323 -0.0292 0.0382 -0.0004
0.0331 -0.1377 -0.0503 0.6305 -0.4852 0.0048
-0.0693 0.2184 0.3961 -1.2116 -0.3166 1.0033
0.0687 -0.1469 -0.5398 0.6528 0.9673 -0.0097
-0.0317 0.0358 0.2530 -0.0426 -0.2257 0.0023
0.0049 0.0004 -0.0266 0.0001 0.0220 -0.0002
l =
[ -0.0056*x^5+0.0299*x^4-0.0323*x^3-0.0292*x^2+0.0382*x-0.0004]
[ 0.0331*x^5-0.1377*x^4-0.0503*x^3+0.6305*x^2-0.4852*x+0.0048]
[ -0.0693*x^5+0.2184*x^4+0.3961*x^3-1.2116*x^2-0.3166*x+1.0033]
[ 0.0687*x^5-0.1469*x^4-0.5398*x^3+0.6528*x^2+0.9673*x-0.0097]
[ -0.0317*x^5+0.0358*x^4+0.2530*x^3-0.0426*x^2-0.2257*x+0.0023]
[ 0.0049*x^5+0.0004 *x^4-0.0266*x^3+0.0001*x^2+0.0220*x-0.0002]
估计其误差的公式为
, .
6.2.6 拉格朗日插值及其误差估计的 MATLAB 程序
拉格朗日插值及其误差估计的 MATLAB 主程序
function [y,R]=lagranzi(X,Y,x,M)
n=length(X); m=length(x);
for i=1:m
z=x(i);s=0.0;
for k=1:n
p=1.0; q1=1.0; c1=1.0;
for j=1:n
if j~=k
p=p*(z-X(j))/(X(k)-X(j));
end
q1=abs(q1*(z-X(j)));c1=c1*j;
end
s=p*Y(k)+s;
end
y(i)=s;
end
R=M*q1/c1;
例 6.2.6 已知 , , ,用拉格朗日
插值及其误差估计的 MATLAB 主程序求 的近似值,并估计其误差.
解 在 MATLAB 工作窗口输入程序
>> x=2*pi/9; M=1; X=[pi/6 ,pi/4, pi/3];
Y=[0.5,0.7071,0.8660]; [y,R]=lagranzi(X,Y,x,M)
运行后输出插值 y 及其误差限 R 为
y = R =
0.6434 8.8610e-004.
6.3 牛顿(Newton)插值及其 MATLAB 程序
6.3.3 牛顿插值多项式、差商和误差公式的 MATLAB 程序
求牛顿插值多项式和差商的 MATLAB 主程序
function [A,C,L,wcgs,Cw]= newploy(X,Y)
n=length(X); A=zeros(n,n); A(:,1)=Y';
s=0.0; p=1.0; q=1.0; c1=1.0;
for j=2:n
for i=j:n
A(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-
j+1));
end
b=poly(X(j-1));q1=conv(q,b); c1=c1*j; q=q1;
end
C=A(n,n); b=poly(X(n)); q1=conv(q1,b);
for k=(n-1):-1:1
C=conv(C,poly(X(k))); d=length(C); C(d)=C(d)+A(k,k);
end
L(k,:)=poly2sym(C); Q=poly2sym(q1);
syms M
wcgs=M*Q/c1; Cw=q1/c1;
剩余30页未读,继续阅读
资源评论
- LJPZGX19852013-04-09还好 可以参考一下
- DeLiang_Y_32014-05-06不错 值得参考学习
- brieflone2013-04-25还可以,作为参考有一定帮助
yinwenbin163
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功