MATLAB 一维插值
来源:互联网 发布:热力学模拟软件 编辑:程序博客网 时间:2024/05/16 05:18
MATLAB 插值
常用的多项式插值法:
1.拉格朗日插值
拉格朗日插值是一簇插值的基本公式,由n+1个n次插值基函数构成,即n次插值多项式。
一般:
拉格朗日插值保证了曲线的光滑性,但高次插值不稳定。一般把这种次数越高而插值结果越偏离原函数的现象称为龙格现象。所以在不熟悉曲线运动趋势的前提下,不要轻易使用高次插值。
2.分段线性插值
将插值区间分为若干个小区间,然后每个小区间的首尾两个点直接用直线相连。
分段线性插值虽然克服了高次插值的不稳定,但只能保证曲线连续,不能保证曲线光滑。
3.三次样条插值
该曲线可以看做由一段一段的三次多项式曲线拼凑而成,在拼接处,不仅函数自身是连续的,且他的一阶、二阶导数也是连续的。
MATLAB中常用的几个插值函数
interp1(x,y,xx)
x,y是长度相同的向量,根据分段线性插值的方法来求得x,y之间的函数关系y=f(x),接着根据函数f(x)来计算f(xx)
interp1(x,y,xx,’method’)
可以用的method有:
’linear’ 线性插值
‘nearest’ 最邻近插值
‘spline’ 三次样条插值
‘cubic’ 三次插值
x,y是长度相同的向量,根据’method’中的方法来求得x,y之间的函数关系y=f(x),接着根据函数f(x)来计算f(xx),如果省略’method’不写,则表示默认使用线性插值的方法。
spline(x,y,xx)
等同于interp1(x,y,xx,’spline’),但是参数必须是向量。
spline(x,y)
计算三次样条函数的系数。
例:
>> x=linspace(0,2*pi,40);>> y=sin(x);>> pp=spline(x,y)pp = form: 'pp' breaks: [1x40 double] coefs: [39x4 double] pieces: 39 order: 4 dim: 1
form 为样条函数的类型,pp 表示piecewise polynomial ,即分段多项式
breaks 为分段区间节点矩阵
coefs 为分段区间上插值多项式系数矩阵
pieces 为分段数
order 为多项式阶数
dim 为多项式维数
用法:pp.coefs的结果是每个分段区间上多项式系数矩阵
ppval(pp,xx)
如果定义三次样条函数为pp=spline(x,y),那么ppval(pp,xx)得到的结果与spline(x,y,xx)得到的结果是一样的。
例:
>> x=0:.25:1;>> y=[sin(x);cos(x)];>> xx=0:0.1:1;>> pp=spline(x,y);>> pp.coefsans = -0.1588 -0.0039 1.0005 0 0.0515 -0.5206 0.0026 1.0000 -0.1588 -0.1231 0.9688 0.2474 0.0515 -0.4819 -0.2481 0.9689 -0.1292 -0.2422 0.8775 0.4794 0.1058 -0.4433 -0.4794 0.8776 -0.1292 -0.3390 0.7322 0.6816 0.1058 -0.3639 -0.6812 0.7317>> yy=ppval(pp,xx);>> subplot(1,3,1);>> plot(x,y(1,:),'ob',xx,yy(1,:),'r-');>> subplot(1,3,2);>> plot(x,y(2,:),'ob',xx,yy(2,:),'r-')>> subplot(1,3,3);>> plot(x,y,'ob',xx,yy,'r-')
例:
>> x=pi*[0:0.5:2];
>> y=[0 1 0 -1 0 1 0;
1 0 1 0 -1 0 1];
>> pp=spline(x,y);
>> yy=ppval(pp,linspace(0,2*pi,101));
>> plot(yy(1,:),yy(2,:),'b-',y(1,2:5),y(2,2:5),'or'),axis equal
这个题目是请教一位网上大神的,以下内容是贴过来的。
x是0~2,步长是0.5
y的第一行表示sin(x),第二行表示cos(x),但数据长度超过了x的长度,超过的实际上用不到。
spline(x,y)用上述数据进行三次样条函数插值,得到的结果(系数矩阵)保存在p。
ppval() 则是用拟合结果计算新的值,0~2,步长更小。
最后把(cos sin)画出来,就是一个圆
yy(1,:) 表示第一行所以元素
y(1,2:5) 表示第一行,2~5列所有元素。
另外:
axis equal 将两坐标设为相等。
axis auto 将坐标轴设为自动返回缺省值。
axis([xmin xmax ymin ymax]) 用来标注输出的图线的最大值最小值。
- MATLAB 一维插值
- matlab
- Matlab
- MATLAB
- matlab
- matlab
- matlab
- matlab
- MATLAB
- matlab
- Matlab
- MATLAB
- MATLAB
- matlab
- matlab
- matlab
- matlab
- matlab
- 混合高斯背景建模(opecv)
- 【Java】【TIJ】验证Java对类的基本数据类型的成员的默认初始化结果
- ArcGIS GP服务发布和客户端调用
- Android Services
- 如何参与一个 GitHub 开源项目?
- MATLAB 一维插值
- BestCoder Round #11 (Div. 2) 前三题题解
- IOS ORM简单实现方案:NSObject及其子类与字典的转换
- 虚函数的一些东西
- CentOS 6.2: Make Command not Found解决
- 树莓派中python下的opencv
- java的final
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第7章节--打包并部署SP2013 Apps 总结
- hdu 1048 The Hardest Problem Ever