利用matlab实现多种插值:
用matlab自带的多种功能进行常用插值(样条插值,hermite插值,三次差值)呢?在完成一些习题后,我的总结如下:
1如何实现三次样条插值(spline插值)
特点:连续三次曲线逼近,最高次数为三次
法1:spline
x=[0,1,2,3,4,5,6,7,8,9,10]
y=[0,079,153,219,271,303,327,289,306,319,329];
进行三次样条插值
xx=0:025:10; 取好绘图取值点
yy=spline(x,y,xx);
plot(x,y,’o’,xx,yy); 绘制图像
那么如何获得插值函数?且如果三次样条插值有边界条件时,应如何拟合插值函数?此时应采取法2
法2:csape
pp=csape(x,y,'complete',[0,00]);
disp(ppcoefs);
complete表示给定边界条件为一阶导数,[0,0]便是两端点一阶导数为0常用的参数还有:
'second',给定边界二阶导数
'variational',自然样条(边界二阶导数为0)
运行结果:COEFS的含义是在Xi-Xi+1区间上的多项式是,例如COEFS数组第一行的意思是在X=0到X=1的区间上时表达式是-62652(X-0)^3+09697(X-0)^1+05;同理,可以得到在不同区间上的拟合函数
-62652 00000 09697 05000
18813 -09398 09227 05477
-04600 -04318 07992 06245
21442 -05146 07424 06708
绘制图像:xi=1:025:10;
yi=ppval(pp,xi);
plot(x,y,'o',xi,yi);
matlab通用的插值函数为interp1,通过改变interp1的method参数,可以实现不同的插值方式。但spline函数与interp1函数在实现样条插值时,均无法在规定边界条件的情况下进行插值,此时要用到csape,csape的complete,second参数即可满足常用边界条件需求。如果需要拟合出具体的函数,则用yicoefs的形式,yi为插值点的拟合值。最后,使用plot函数绘制拟合函数图像。
使用Lagrange 插值多项式的方法:
首先把下面的代码复制到M文件中,保存成lagran
function [C,L]=lagran(X,Y)
% input - X is a vector that contains a list of abscissas
% - Y is a vector that contains a list of ordinates
% output - C is a matrix that contains the coefficients of the lagrange interpolatory polynomial
%- L is a matrix that contains the lagrange coefficients polynomial
w=length(X);
n=w-1;
L=zeros(w,w);
for k=1:n+1
V=1;
for j=1:n+1
if k~=j
V=conv(V,poly(X(j)))/(X(k)-X(j));
end
end
L(k,:)=V;
end
C=YL;
然后在命令窗口中输入以下内容:
x=[0 025 05 075 1];
y=[0 03104 06177 07886 1];
lagran(x,y)
ans =
33088 -63851 33164 07599 0
得到的数据就是多项式各项的系数,注意最后一个是常数项,即x^0,
所以表达式为:f=33088x^4-63851x^3+33164x^2 +07599x
求面积就是积分求解
>> f=@(x)33088x^4-63851x^3+33164x^2 +07599x;
>> quad(f,0,1)
ans =
05509
这些点肯定是通过这个多项式的!
a=[591 593 594 596 598];
b=[032 036 023 025 046];
c=interp1(a,b,592)
结果:
c =
03400
当然,默认是线性插值,你可以加一个参数来改变插值方式:
c2=interp1(a,b,592,'spline') %样条插值
下面是所有可选的:
'nearest' Nearest neighbor interpolation
'linear' Linear interpolation (default)
'spline' Cubic spline interpolation
'pchip' Piecewise cubic Hermite interpolation
'cubic' (Same as 'pchip')
yi
=
interp1(x,y,xi,method)
已知样本点坐标x,y,求xi处的函数值yi,插值方法是method
method有以下几种:
'nearest'邻近点插值
'linear'线性插值(默认)
'spline'三次样条函数插值
'cubic'三次函数插值
常用的是'spline'和'cubic'
例子:
x
=
0:10;
y
=
sin(x);
xi
=
0:25:10;
yi
=
interp1(x,y,xi,'spline');
plot(x,y,'o',xi,yi)
以上就是关于如何利用matlab实现多种插值全部的内容,包括:如何利用matlab实现多种插值、求一段matlab插值程序、如何用matlab实现一维插值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)