第七讲 MATLAB在计算方法中的应用
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
yy=0.0; for i=1:n
h=1.0;a=0.0; for j=1:n
if j~=i h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2; a=1/(x0(i)-x0(j))+a;
end end yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i)); end y(k)=yy; end
Lagrange插值
对给定的n个插值节点及相应的函数值,利用n次 Lagrange插值多项式对插值区间内任意x的函数 值y可通过下式求得:
y(x)
n k 1
n
yk
(
j 1
jk
x xj xk x j
)
MATLAB实现
function y=lagrange(x0,y0,x) % lagrange insert n=length(x0);m=length(x); for i=1:m
1 f (x) 1 x2
在区间[-5,5]上各阶导数存在,但在此区间上取n 个节点构造的Lagrange插值多项式在全区间上不 收敛。
Runge现象
在区间[-5,5]上,取n=10,用lagrange插值法进 行插值计算:
>> x=[-5:1:5];
2
>> y=1./(1+x.^2);
1.5
>> x0=[-5:0.1:5];
0.33349 >> sin(0.34) ans =
0.33349 >> y=hermite(x0,y0,y1,x); >> plot(x,y) >> hold on >> plot(x,sin(x),'--r')
0.345 0.34
0.335 0.33
0.325 0.32
0.315 0.31
0.305 0.3
z=x(i); s=0.0; for k=1:n
p=1.0; for j=1:n
if j~=k p=p*(z-x0(j))/(x0(k)-x0(j));
end end s=p*y0(k)+s; end y(i)=s; end
例:f(x)=lnx
x
0.4
0.5
0.6
0.7
0.8
ln(x)
-0.916291 -0.693147 -0.510826 -0.357765 -0.223144
>> y0=lagrange(x,y,x0);
1
>> y1ห้องสมุดไป่ตู้1./(1+x0.^2);
0.5
>> plot(x0,y0,'--r')
0
>> hold on
>> plot(x0,y1,'-b')
-0.5
-5 -4 -3 -2 -1
0
1
2
3
4
5
分段线性插值
分段线性插值就是通过插值点用折线段连接起来逼近原曲 线。
0.295 0.3 0.305 0.31 0.315 0.32 0.325 0.33 0.335 0.34 0.345 0.35
MATLAB在计算方法中的应用
MATLAB入门到精通
插值与拟合
插值与拟合来源于实际,又广泛应用于实 际。随着计算机的不断发展及计算水平的 不断提高,他们在国民生产和科学研究等 方面扮演着越来越重要的角色。
插值法主要有Lagrange插值、分段线性插 值、Hermite插值及三次样条插值等
拟合法主要有最小二乘法拟合和快速 Fourier变换等
例:根据如下给定数据,给出0.34处的值
X Sinx Cosx
0.30 0.29552 0.95534
0.32 0.31457 0.94924
0.35 0.34290 0.93937
>> x0=[0.3 0.32 0.35]; >> y0=[0.29552 0.31457 0.34290]; >> y1=[0.95534 0.94924 0.93937]; >> x=[0.3:0.005:0.35]; >> y=hermite(x0,y0,y1,0.34) y=
0
-0.5
-1
0
2
4
6
8
10
例:Rouge现象的解决
>> x=[-5:1:5];
>> y=1./(1+x.^2);
2
>> x0=[-5:0.1:5];
>> y1=1./(1+x0.^2); 1.5 >> y2=interp1(x,y,x0);
>> plot(x0,y0,'--r')
1
>> hold on
MATLAB实现 interp1 一维插值
yi=interp1(x,y,xi) %对一组节点(x,y)进行插值,计算插值点xi的函 数值。
yi=interp1(y,xi) %默认x=1:n yi=interp1(x,y,xi,’method’) %method为指定插值算法
nearest 线性最近项插值 linear 线性插值 spline 三次样条插值 cubic 三次插值
>> x=[0.4:0.1:0.8]; >> y=[-0.916291 -0.693147 -0.510826 -0.356675 -0.223144]; >> lagrange(x,y,0.54) ans =
-0.61614
>> log(0.54)
ans =
-0.61619
Runge现象
19世纪Runge给出了一个等距节点插值多项式不 收敛的例子:
n
y(x) hi[(xi x)(2ai yi yi) yi ] i 1
其中
hi
n
(
x
xj
)2;a
j 1 ji
xi x j
n
i 1 ji
xi
1 xj
MATLAB实现
function y=hermite(x0,y0,y1,x) %hermite insert n=length(x0);m=length(x); for k=1:m
同类的函数还有inter1q,interpft,spline,interp2,interp3,interpn等
例:正弦曲线插值
>> x=0:0.1:10;
>> y=sin(x);
1
>> xi=0:.25:10;
>> yi=interp1(x,y,xi); 0.5
>> plot(x,y,'o',xi,yi)
>> plot(x0,y1,'-b') 0.5
>> plot(x0,y2,'*m')
0
-0.5
-5
0
5
Hermite插值
不少问题不但要求在节点上函数值相等,而且要 求导数值也相等,甚至要求高阶导数也相等,可 用Hermite插值多项式。
已知n个插值节点及其对应的函数值和一阶导数值, 则计算插值区域内任意x的函数值y的Hermite插值 公式为:
h=1.0;a=0.0; for j=1:n
if j~=i h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2; a=1/(x0(i)-x0(j))+a;
end end yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i)); end y(k)=yy; end
Lagrange插值
对给定的n个插值节点及相应的函数值,利用n次 Lagrange插值多项式对插值区间内任意x的函数 值y可通过下式求得:
y(x)
n k 1
n
yk
(
j 1
jk
x xj xk x j
)
MATLAB实现
function y=lagrange(x0,y0,x) % lagrange insert n=length(x0);m=length(x); for i=1:m
1 f (x) 1 x2
在区间[-5,5]上各阶导数存在,但在此区间上取n 个节点构造的Lagrange插值多项式在全区间上不 收敛。
Runge现象
在区间[-5,5]上,取n=10,用lagrange插值法进 行插值计算:
>> x=[-5:1:5];
2
>> y=1./(1+x.^2);
1.5
>> x0=[-5:0.1:5];
0.33349 >> sin(0.34) ans =
0.33349 >> y=hermite(x0,y0,y1,x); >> plot(x,y) >> hold on >> plot(x,sin(x),'--r')
0.345 0.34
0.335 0.33
0.325 0.32
0.315 0.31
0.305 0.3
z=x(i); s=0.0; for k=1:n
p=1.0; for j=1:n
if j~=k p=p*(z-x0(j))/(x0(k)-x0(j));
end end s=p*y0(k)+s; end y(i)=s; end
例:f(x)=lnx
x
0.4
0.5
0.6
0.7
0.8
ln(x)
-0.916291 -0.693147 -0.510826 -0.357765 -0.223144
>> y0=lagrange(x,y,x0);
1
>> y1ห้องสมุดไป่ตู้1./(1+x0.^2);
0.5
>> plot(x0,y0,'--r')
0
>> hold on
>> plot(x0,y1,'-b')
-0.5
-5 -4 -3 -2 -1
0
1
2
3
4
5
分段线性插值
分段线性插值就是通过插值点用折线段连接起来逼近原曲 线。
0.295 0.3 0.305 0.31 0.315 0.32 0.325 0.33 0.335 0.34 0.345 0.35
MATLAB在计算方法中的应用
MATLAB入门到精通
插值与拟合
插值与拟合来源于实际,又广泛应用于实 际。随着计算机的不断发展及计算水平的 不断提高,他们在国民生产和科学研究等 方面扮演着越来越重要的角色。
插值法主要有Lagrange插值、分段线性插 值、Hermite插值及三次样条插值等
拟合法主要有最小二乘法拟合和快速 Fourier变换等
例:根据如下给定数据,给出0.34处的值
X Sinx Cosx
0.30 0.29552 0.95534
0.32 0.31457 0.94924
0.35 0.34290 0.93937
>> x0=[0.3 0.32 0.35]; >> y0=[0.29552 0.31457 0.34290]; >> y1=[0.95534 0.94924 0.93937]; >> x=[0.3:0.005:0.35]; >> y=hermite(x0,y0,y1,0.34) y=
0
-0.5
-1
0
2
4
6
8
10
例:Rouge现象的解决
>> x=[-5:1:5];
>> y=1./(1+x.^2);
2
>> x0=[-5:0.1:5];
>> y1=1./(1+x0.^2); 1.5 >> y2=interp1(x,y,x0);
>> plot(x0,y0,'--r')
1
>> hold on
MATLAB实现 interp1 一维插值
yi=interp1(x,y,xi) %对一组节点(x,y)进行插值,计算插值点xi的函 数值。
yi=interp1(y,xi) %默认x=1:n yi=interp1(x,y,xi,’method’) %method为指定插值算法
nearest 线性最近项插值 linear 线性插值 spline 三次样条插值 cubic 三次插值
>> x=[0.4:0.1:0.8]; >> y=[-0.916291 -0.693147 -0.510826 -0.356675 -0.223144]; >> lagrange(x,y,0.54) ans =
-0.61614
>> log(0.54)
ans =
-0.61619
Runge现象
19世纪Runge给出了一个等距节点插值多项式不 收敛的例子:
n
y(x) hi[(xi x)(2ai yi yi) yi ] i 1
其中
hi
n
(
x
xj
)2;a
j 1 ji
xi x j
n
i 1 ji
xi
1 xj
MATLAB实现
function y=hermite(x0,y0,y1,x) %hermite insert n=length(x0);m=length(x); for k=1:m
同类的函数还有inter1q,interpft,spline,interp2,interp3,interpn等
例:正弦曲线插值
>> x=0:0.1:10;
>> y=sin(x);
1
>> xi=0:.25:10;
>> yi=interp1(x,y,xi); 0.5
>> plot(x,y,'o',xi,yi)
>> plot(x0,y1,'-b') 0.5
>> plot(x0,y2,'*m')
0
-0.5
-5
0
5
Hermite插值
不少问题不但要求在节点上函数值相等,而且要 求导数值也相等,甚至要求高阶导数也相等,可 用Hermite插值多项式。
已知n个插值节点及其对应的函数值和一阶导数值, 则计算插值区域内任意x的函数值y的Hermite插值 公式为: