利用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函数绘制拟合函数图像。
n=-1:3; %n=-1,0,1,2,3
x=1:5; %x=1,2,,5
k=0:500; %k=0,1,,500
w=(pi/500)k; %w=pi/500k,pi是31415926
X=x(exp(-jpi/500))^(n'k); %(^)中点的意思是元素 *** 作,^是次方, n' 是吧n置换 ,j是虚数
magX=abs(X); %abs(x)就是数学中的|X|
angX=angle(X); %angle(X)是找角度的
subplot(2,1,1) %排列想成矩阵,那么就有2行一列,这个图是第一个位置
plot(w/pi,magX); %画图(x轴,y轴)
title('幅度响应'); %标题
grid; %加格子
ylabel('幅度'); %y轴标题
xlabel('以\pi为单位的频率'); %x轴标题
subplot(2,1,2) %第二张图
plot(w/pi,angX)
title('相位响应');
grid;
ylabel('相位/\pi');
xlabel('以\pi为单位的频率');
%by dynamic
%see also >
matlab中使用插值函数
插值函数(the function of interpolation )
interp1
调用函数的格式(Syntax)
yi = interp1(x,Y,xi)
yi = interp1(Y,xi)
yi = interp1(x,Y,xi,method)
yi = interp1(x,Y,xi,method,'extrap')
yi = interp1(x,Y,xi,method,extrapval)
pp = interp1(x,Y,method,'pp')
调用格式说明(Description)
yi = interp1(x,Y,xi) 返回矢量X和Y决定的根据输入的节点xi时对应的y的值矢量Y是矢量X的一个函数映射
如果Y是一个矩阵,那么插值结果是一个对应的矩阵
[===================================================
yi = interp1(x,Y,xi) returns vector yi containing elements corresponding to the elements of xi and determined by interpolation within vectors x and Y The vector x specifies the points at which the data Y is given If Y is a matrix, then the interpolation is performed for each column of Y and yi is length(xi)-by-size(Y,2)
===================================================]
yi = interp1(x,Y,xi,method)插值中可以使用的方法: 插值方法 说明 nearest 临近的两点插值 linear 线性插值(默认) spline 三次样条插值 pchip 分段三次Hermite插值多项式插值 cubic (作用于pchip相同) v5cubic 用matlab5版本中断三次样条插值 [====================================================
yi = interp1(x,Y,xi,method) interpolates using alternative methods:
methodDescription
nearestNearest neighbor interpolation
linearLinear interpolation (default)
splinesplineCubic spline interpolation
pchipPiecewise cubic Hermite interpolation
cubic(Same as 'pchip')
v5cubicCubic interpolation used in MATLAB 5
======================================================]
简单程序示例
>>x=[00 01 0195 03 0401 05];
>>y=[039849 039695 039142 038138 036812 035206];
>>plot(x,y);
>>T=interp1(x,y,25,'linear') %线性插值
(返回结果T=03862)
>> T=interp1(x,y,25,'nearest') % 两点插值
(返回结果T=03814)
>>T=interp1(x,y,25,'spline') % 三次样条插值
(返回结果T =03867)
>>T=interp1(x,y,25,'cubic') %三次插值
(返回结果T =03867)
以上就是关于如何利用matlab实现多种插值全部的内容,包括:如何利用matlab实现多种插值、求分段三次Hermite插值函数、matlab帮编程-插值的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)