matlab程序设计2010(20111130)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验8 数据插值
生产实践中常常出现这样的问题:给出一批离散样点,要求作出一条通过这些点的光滑曲线,以满足设计要求或进行加工。

反映在数学上即已知函数在一些点上的值,寻求它的分析表达式。

因为由函数的表格形式不能直接得出表中未列处的函数值,也不便于研究函数的性质。

此处,有些函数虽然有表达式,但因式子复杂,不易计算和进行理论分析,也需要构造一个简单函数进行近似。

解决这种问题的方法有两类:
一类方法在选定近似函数的形式后,不要求近似函数过已知样点,只要求在某种意义下它在这些点上的总偏差最小,这种方法称为曲线拟合方法。

另一类是给出函数f(x)的一些样点值,选定一个便于计算的函数形式,如多项式、分式线性函数及三角多项式等,要求它通过已知样点,由此确定函数g(x)作为f(x)的近似,这就是插值法。

一、一维插值命令
一维插值:对一维函数进行插值。

该命令的调用格式为:yk=interp1(x,y,xk,'method')
参数x与y为已知的两个同维向量,即都为1行n列的行向量,输出量yk是与xk对应的函数值。

插值点xk可以是数值、向量或矩阵,yk与xk维数相同,其元素一一对应。

Method有四种选择:
nearest最近插值—用直角折线连接各样本点。

linear线性插值—用直线依次连接各样本点,形成折线。

省略’method’时,即默认为此项。

pchip(或cubic)分段三次插值—用分段三次多项式Hermite插值曲线,依次连接相邻样本点,整体上具有函数及其一阶导数连续性。

spline三次样条插值—用分段三次多项式曲线光滑地连接相邻样本点,整体上具有函数、一阶和二阶导数连续性。

插值点xk可以在区间[x1,xn]
外的附近取值,可以是数值、向量或矩阵。

例1:在区间[0,10]上画出y=sin(x)的曲线,取插值节点xk=k(k=0,1, (10)
和节点处的函数值yk=sin(xk),插值点为0.5,1.5,…9.5,作分段线
性插值,并画出相应的折线图,并将两图绘制在一张图上,输出插值点
对应的y值。

解:(1)matlab代码:
x=0:10;
y=sin(x);
xk=0.5:1:9.5;
yk=interp1(x,y,xk,'linear');
plot(x,y,'r*-',xk,yk,'bo');
hold on;
t=0:0.01:10;
plot(t,sin(t))
012345678910
例2:已知y=F(x)的函数关系中,当x=[-6.2 -5 -3 -1.7 0 1 3 5 6.2 7.5 8.2]时,y=[1 0 -1 0 1 0 -1 0 0.5 -1 0].用“最近插值”分别求出当xi=-6.2:
0.2:8.2时所对应的函数值,并画出曲线图。

解:x=[-6.2 -5 -3 -1.7 0 1 3 5 6.2 7.5 8.2];
y=[1, 0, -1, 0, 1, 0 ,-1 ,0, 0.5, -1 ,0];
xk=-6.2:0.2:8.2;
y1=interp1(x,y,xk,'nearest');
y2=interp1(x,y,xk,'linear');
plot(x,y,'o',xk,y1,'*-');
figure
plot(x,y,'o',xk,y2,'*-');
练习:
作分段三次插值,并画出相应的折线图,并将两图绘制在一张图上,输出
插值点对应的y值。

作三次样条插值,并画出相应的折线图,并将两图绘制在一张图上,输出插值点对应的y值。

二、二维插值
二维插值是对两个变量的函数z=f(x,y)进行插值。

插值的示意图见教材203页图。

该命令的调用格式为:zk=interp2(x,y,z,xk,yk,'method')
参数x、y、z为已知的同维矩阵,输出量zk是与xk、yk对应的函数值。

Method有四种选择:
nearest最邻近插值。

Linear双线性插值。

cubic双三次多项式插值。

spline三次样条插值。

例题2:利用插值的四种方法观察peaks函数的插值效果。

解:[x,y]=meshgrid(-3:0.8:3);
z=peaks(x,y);
[xk,yk]=meshgrid(-3:0.25:3);
z1=interp2(x,y,z,xk,yk,'linear');
z2=interp2(x,y,z,xk,yk,'nearest');
z3=interp2(x,y,z,xk,yk,'spline');
z4=interp2(x,y,z,xk,yk,'cubic');
figure
mesh(xk,yk,z1); figure
mesh(xk,yk,z2); figure
mesh(xk,yk,z3); figure
mesh(xk,yk,z4); 运行结果:
实验9 数据曲线拟合
数据拟合是在选定近似函数的形式后,不要求近似函数通过已知的样点,只要求在某种意义下它在这些点上的总偏差最小,这类方法称为曲线拟合或数据拟合法。

这种方法反映原函数整体的变化趋势。

问题是:已知一组(二维)数据,即平面上 n 个点(x i ,y i ) i=1,…n, 寻求
一个函数(曲线)y=f(x), 使 f(x) 在某种准则下与所有数据点最为接近,即曲线拟合得最好。

多项式曲线拟合:采用多项式来拟合数据x 和y ,即以上的函数f(x)是x 的多
项式形式,使得∑∑==-=n
i i i n
i i x f y 1
21
2
)]([δ为最小。

数据的多项式曲线拟合在matlab 中的实现
调用格式为:p=polyfit(x,y,m)
(1)、输入参数x,y 为两个同维数的向量,提供了一组对应样本点xi,yi
的数据;
(2)、输入参数m 为拟合代数多项式的次数,原则上m 小于x 的维数即可,
并且一般情况下取小于6的正整数;
(3)、输出参数p 为拟合多项式的系数向量。

解:(1)作一次多项式拟合,即要求 出一次多项式: 32)(a x a x f +=中 的
),(32a a A =使得 ])([11
1
2∑=-i i i y x f 最小。

输入以下命令:
x=0:0.1:1;
y=[0,-0.447, 1.978 ,3.28 ,6.16 ,7.34, 7.66 ,9.58 ,9.48 ,9.3, 11.2]; a1=polyfit(x,y,1); z1=polyval(a1,x);
plot(x,y,'+',x,z1,'r')
%作出数据点和拟合曲线的图形
(2)作二次多项式拟合,即要求出二次多项式3221)(a x a x a x f ++=,中 的
),,(321a a a A =使得 ])([11
1
2∑=-i i i y x f 最小。

x=0:0.1:1;
y=[0,-0.447, 1.978 ,3.28 ,6.16 ,7.34, 7.66 ,9.58 ,9.48 ,9.3, 11.2]; a2=polyfit(x,y,2); z2=polyval(a2,x);
plot(x,y,'+',x,z2,'r')
(3)作三次多项式拟合
x=0:0.1:1;
y=[0,-0.447, 1.978 ,3.28 ,6.16 ,7.34, 7.66 ,9.58 ,9.48 ,9.3, 11.2];
a3=polyfit(x,y,3);
z3=polyval(a3,x);
plot(x,y,'+',x,z3,'r')
00.10.20.30.40.50.60.70.80.91
(4)利用曲线拟合图形用户窗口直接得到拟合多项式的系数和图形。

运行如下代码,得到图形窗口:
x=0:0.1:1;
y=[0,-0.447, 1.978 ,3.28 ,6.16 ,7.34, 7.66 ,9.58 ,9.48 ,9.3, 11.2]; plot(x,y)
下面在图形窗口中,点击tools->Basic Fitting,弹出Basic Fitting窗口,选择在图像上显示的曲线,如线性、二次和立方拟合等。

在复选框中
选择后,点击右箭头,得到输出结果。

相关文档
最新文档