Matlab插值实验

Matlab插值实验
Matlab插值实验

Matlab插值实验

一、实验目的

1.熟悉MATLAB的运行环境.

2.学会使用MATLAB作图.

3.学会使用MATLAB编程.

二、实验内容

实验一:几何物理中的插值问题

1. 轮船的甲板成近似半椭圆面形,为了得到甲板的面积。首先测量得到横向最大相间8.534米;然后等间距地测得纵向高度,自左向右分别为:

0.914, 5.060, 7.772, 8.717, 9.083, 9.144, 9.083, 8.992, 8.687, 7.376, 2.073,

计算甲板的面积。

2. 物体受水平方向外力作用,在水平直线上运动。测得位移与受力如下表

X0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

F 20 21 21 20 19 18.5 18.0 13.5 9 4.5 0

求 (1) 物体从位移为0到0.4所做的功;(2) 位移为0.4时的速度是多少?

3.火车行驶的距离(路程)﹑速度数据如下,计算从静止开始20 分钟内走过的路程。

t(分) 2 4 6 8 10 12 14 16 18 20

v(km/h) 10 18 25 29 32 20 11 5 2 0

4. 确定地球与金星之间的距离

天文学家在1914年8月份的7次观测中,测得地球与金星之间距离(单位:米),并取其常用对数值,与日期的一组历史数据如下表:

日期

(号)

18 20 22 24 26 28 30

距离对数9.961772

4

9.954364

5

9.946806

9

9.939095

9.931224

5

9.923191

5

9.914992

5

由此推断何时金星与地球的距离(米)的对数值为9.9351799?

实验二

1.山区地貌图

在某山区(平面区域(0,2800) (0,2400)内,单位:米)测得一些地点的高程(单位:米)如表4.12所示,试作出该山区的地貌图和等高线图。

表4.12

2400 2000 1600 1430 1450 1470 1320 1280 1200 1080 940 1450 1480 1500 1550 1510 1430 1300 1200 1460 1500 1550 1600 1550 1600 1600 1600

1200 800 400 0 1370 1500 1200 1100 1550 1600 1550 1380 1270 1500 1200 1100 1350 1450 1200 1150 1230 1390 1500 1500 1400 900 1100 1060 1180

1320 1450 1420 1400 1300 700 900 Y/X

0 400 800 1200 1600 2000 2400 2800

三、实验环境

Windows 操作系统; MATLAB 7.0.

四、实验过程 实验一:

1. 因为插值点越多,划分越细则,又因为等间距则,当0x ?→时,我们视插值

点的矩形面积为i y x ??,则总面积为1

n

i i S y x ==?∑

,8.534x n

?=

,则

x=linspace(0,8.534,11);

y=[0.914 5.060 7.772 8.717 9.083 9.144 9.083 8.992 8.687 7.376 2.073]; plot(x,y)

1

2

3

4

5

6

7

8

9

012345678910

cx=linspace(0,8.534,100); s=0;

cy=interp1(x,y,cx, 'spline'); for i=1:100

s=s+8.534./100.*cy(i);

end z =s z = 64.7476 2.x=linspace(0,0.4,5); y=[20 21 21 20 19]; plot(x,y)

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

1919.219.419.619.82020.220.420.620.821

cx=linspace(0,0.4,20); s=0;

for i=1:20

cy(i)=interp1(x,y,cx(i)); s=s+0.4.*cy(i)./20; end z=s z = 8.1316

(2)假设初始速度为0,则0.4时刻的速度为 v=(2*z/m ).^(1./2)(其中m 为物体的质量)。 3.t=linspace(2,20,10); v=[10 18 25 29 32 20 11 5 2 0]; plot(t,v)

2468101214161820

5101520253035

ct=linspace(2,20,100); s=0;

for i=1:100

cv(i)=interp1(t,v,ct(i), 'spline'); s=s+20.*cv(i)./60./100; end z=s z = 5.4351 4.t=linspace(0,13,7);

s=[9.9617724 9.9543645 9.9468069 9.9390950 9.9312245 9.9231915 9.9149925];

plot(t,s)

024********

9.91

9.929.939.949.959.969.979.98

ct=linspace(0,13,100); cs =interp1(t,s,ct) 观察计算结果知 T=59*13/100+18 T =

25.6700 实验二: 程序如下:

x=[0 0 0 0 0 0 0 400 400 400 400 400 400 400 800 800 800 800 800 800 800 1200 1200 1200 1200 1200 1200 1200 1600 1600 1600 1600 1600 1600 1600 2000 2000 2000 2000 2000 2000 2000 2400 2400 2400 2400 2400 2400 2400 2800 2800 2800 2800 2800 2800 2800];

y=[0 400 800 1200 1600 2000 2400 0 400 800 1200 1600 2000 2400 0 400 800 1200 1600 2000 2400 0 400 800 1200 1600 2000 2400 0 400 800 1200 1600 2000 2400 0 400 800 1200 1600 2000 2400 0 400 800 1200 1600 2000 2400 0 400 800 1200 1600 2000 2400];

z=[1180 1230 1270 1370 1460 1450 1430 1320 1390 1500 1500 1500 1480 1450 1450 1500 1200 1200 1550 1500 1470 1420 1500 1100 1100 1600 1550 1320 1400 1400 1350 1550 1550 1510 1280 1300 900 1450 1600 1600 1430 1200 700 1100 1200 1550 1600 1300 1080 900 1060 1150 1380 1600 1200 940];

[cx,cy]=meshgrid(0:100:2800,0:100:2400);cz=griddata(x,y,z,cx,cy, 'cubic'); meshz(cx,cy,cz),title('山区地貌图') figure(2),contour(cx,cy,cz),title('等高线图')

1000

2000

3000

1000

2000

3000

6008001000120014001600

1800山区地貌图

等高线图

05001000150020002500

500

1000

1500

2000

五、实验总结

1.遇到的问题及解决过程

在计算等高线和山区地貌图时取得的值过密,插值后结果计算较难。因此引起了电脑死机,多次实验后知道了问题所在,改进成功。

2.产生的错误及原因分析

对于取值的选取不熟悉,导致取值过多,计算时计算机死机。在插值选取方面不理想。

3.体会和收获

通过这次实验,熟悉了插值的基本方法,以及插值的实际运用和实际意义。明白了如何正确运用插值方法求解问题。

六、参考文献

[1]数学实验,重庆大学数学系傅鹂、龚劬、刘琼荪、何中市编著,科学出版社,2000年9月.

七、教师评语

matlab插值法实例

Several Typical Interpolation in Matlab Lagrange Interpolation Supposing: If x=175, while y=? Solution: Lagrange Interpolation in Matlab: function y=lagrange(x0,y0,x); n=length(x0);m=length(x); for i=1:m 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 input: x0=[144 169 225] y0=[12 13 15] y=lagrange(x0,y0,175) obtain the answer: x0 = 144 169 225 y0 = 12 13 15 y = 13.2302

Spline Interpolation Solution : Input x=[ 1 4 9 6];y=[ 1 4 9 6];x=[ 1 4 9 6];pp=spline(x,y) pp = form: 'pp' breaks: [1 4 6 9] coefs: [3x4 double] pieces: 3 order: 4 dim: 1 output : pp.coefs ans = -0.0500 0.5333 -0.8167 1.0000 -0.0500 0.0833 1.0333 2.0000 -0.0500 -0.2167 0.7667 4.0000 It shows the coefficients of cubic spline polynomial , so: S (x )=, 169,3)9(1484.0)9(0063.0)9(0008.0,94,2)4(2714.0)4(0183.0)4(0008 .0, 41,1)1(4024.0)1(0254.0)1(0008.0232 3 23≥≤+-+---≥≤+-+---≥≤+-+---x x x x x x x x x x x x Newton’s Interpolation Resolve 65 Solution: Newton’s Interpolation in matlab : function yi=newint(x,y,xi); n=length(x); ny=length(y); if n~=ny error end Y=zeros(n);Y(:,1)=y';

matlab中插值拟合与查表

MATLAB中的插值、拟合与查表 插值法是实用的数值方法,是函数逼近的重要方法。在生产和科学实验中,自变量x与因变量y的函数y = f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。当要求知道观测点之外的函数值时,需要估计函数值在该点的值。 如何根据观测点的值,构造一个比较简单的函数y=φ(x),使函数在观测点的值等于已知的数值或导数值。用简单函数y=φ(x)在点x处的值来估计未知函数y=f(x)在x点的值。寻找这样的函数φ(x),办法是很多的。φ(x)可以是一个代数多项式,或是三角多项式,也可以是有理分式;φ(x)可以是任意光滑(任意阶导数连续)的函数或是分段函数。函数类的不同,自然地有不同的逼近效果。在许多应用中,通常要用一个解析函数(一、二元函数)来描述观测数据。 根据测量数据的类型: 1.测量值是准确的,没有误差。 2.测量值与真实值有误差。 这时对应地有两种处理观测数据方法: 1.插值或曲线拟合。 2.回归分析(假定数据测量是精确时,一般用插值法,否则用曲线拟合)。 MATLAB中提供了众多的数据处理命令。有插值命令,有拟合命令,有查表命令。 2.2.1 插值命令 命令1 interp1 功能一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。各个参量之间的关系示意图为图2-14。 格式 yi = interp1(x,Y,xi) %返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y的内插值决定。参量x指定数据Y的点。若Y为一矩阵,则按Y的每列计算。yi是阶数为length(xi)*size(Y,2)的输出矩阵。 yi = interp1(Y,xi) %假定x=1:N,其中N为向量Y的长度,或者为矩阵Y的行数。 yi = interp1(x,Y,xi,method) %用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算;

Matlab中插值函数汇总和使用说明

MATLAB中的插值函数 命令1:interp1 功能:一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。 x:原始数据点 Y:原始数据点 xi:插值点 Yi:插值点 格式 (1) yi = interp1(x,Y,xi) 返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。参量x 指定数据Y 的点。若Y 为一矩阵,则按Y 的每列计算。yi 是阶数为length(xi)*size(Y,2)的输出矩阵。 (2) yi = interp1(Y,xi) 假定x=1:N,其中N 为向量Y 的长度,或者为矩阵Y 的行数。 (3) yi = interp1(x,Y,xi,method) 用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算; ’linear’:线性插值(缺省方式),直接完成计算; ’spline’:三次样条函数插值。对于该方法,命令interp1 调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline 用它们执行三次样条函数插值; ’pchip’:分段三次Hermite 插值。对于该方法,命令interp1 调用函数pchip,用于对向量x 与y 执行分段三次内插值。该方法保留单调性与数据的外形; ’cubic’:与’pchip’操作相同; ’v5cubic’:在MATLAB 5.0 中的三次插值。 对于超出x 范围的xi 的分量,使用方法’nearest’、’linear’、’v5cubic’的插值算法,相应地将返回NaN。对其他的方法,interp1 将对超出的分量执行外插值算法。 (4)yi = interp1(x,Y,xi,method,'extrap') 对于超出x 范围的xi 中的分量将执行特殊的外插值法extrap。 (5)yi = interp1(x,Y,xi,method,extrapval) 确定超出x 范围的xi 中的分量的外插值extrapval,其值通常取NaN 或0。

拉格朗日插值matlab程序

拉格朗日插值的调用函数 function y=lagrange(x0,y0,x) n=length(x0);m=length(x); for i=1:m z=x(i); L=0.0; for j=1:n T=1.0; for k=1:n if k~=j T=T*(z-x0(k))/(x0(j)-x0(k)); end end L=T*y0(j)+L; end y(i)=L; end 四个图在一起: x=[-1:0.05:1]; y=1./(1+25*x.^2); x0=[-1:0.4:1]; y0=1./(1+25*x0.^2); y1=lagrange(x0,y0,x); x0=[-1:0.2:1]; y0=1./(1+25*x0.^2); y2=lagrange(x0,y0,x); x0=[-1:0.1:1]; y0=1./(1+25*x0.^2); y3= lagrange(x0,y0,x); plot(x,y,'-r') hold on plot(x,y1,'-b',x,y2,'-r',x,y3,'-r')

l5和fx在一起: x=[-1:0.05:1]; y=1./(1+25*x.^2); x0=[-1:0.4:1]; y0=1./(1+25*x0.^2); y1=lagrange(x0,y0,x); plot(x,y,'-r') hold on plot(x,y1,'-b') l10和fx在一起: x=[-1:0.05:1]; y=1./(1+25*x.^2); x0=[-1:0.2:1]; y0=1./(1+25*x0.^2); y2= lagrange(x0,y0,x); plot(x,y,'-r') hold on plot(x,y2,'-b') l20和fx在一起: x=[-1:0.05:1]; y=1./(1+25*x.^2); x0=[-1:0.1:1]; y0=1./(1+25*x0.^2); y3= lagrange(x0,y0,x); plot(x,y,'-r') hold on plot(x,y3,'-b')

matlab插值(详细 全面)

Matlab中插值函数汇总和使用说明 MATLAB中的插值函数为interp1,其调用格式 为: yi= interp1(x,y,xi,'method') 其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 'method'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'cubic'立方插值.缺省时表示线性插值 注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。 例如:在一天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为 12,9,9,10,18 ,24,28,27,25,20,18,15,13, 推测中午12点(即13点)时的温度. x=0:2:24; y=[12 9 9 10 18 24 28 27 25 20 18 15 13]; a=13; y1=interp1(x,y,a,'spline') 结果为: 27.8725 若要得到一天24小时的温度曲线,则: xi=0:1/3600:24; yi=interp1(x,y,xi, 'spline'); plot(x,y,'o' ,xi,yi)

命令1 interp1 功能一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。 x:原始数据点 Y:原始数据点 xi:插值点 Yi:插值点 格式 (1)yi = interp1(x,Y,xi) 返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。参量x 指定数据Y 的点。 若Y 为一矩阵,则按Y 的每列计算。yi是阶数为length(xi)*size(Y,2)的输出矩阵。(2)yi = interp1(Y,xi) 假定x=1:N,其中N 为向量Y 的长度,或者为矩阵Y 的行数。 (3)yi = interp1(x,Y,xi,method) 用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算; ’linear’:线性插值(缺省方式),直接完成计算; ’spline’:三次样条函数插值。对于该方法,命令interp1 调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline 用它们执行三次样条函数插值; ’pchip’:分段三次Hermite 插值。对于该方法,命令interp1 调用函数pchip,用于对

(完整版)Matlab学习系列13.数据插值与拟合

13. 数据插值与拟合 实际中,通常需要处理实验或测量得到的离散数据(点)。插值与拟合方法就是要通过离散数据去确定一个近似函数(曲线或曲面),使其与已知数据有较高的拟合精度。 1.如果要求近似函数经过所已知的所有数据点,此时称为插值问 题(不需要函数表达式)。 2.如果不要求近似函数经过所有数据点,而是要求它能较好地反 映数据变化规律,称为数据拟合(必须有函数表达式)。 插值与拟合都是根据实际中一组已知数据来构造一个能够反映数据变化规律的近似函数。区别是:【插值】不一定得到近似函数的表达形式,仅通过插值方法找到未知点对应的值。【拟合】要求得到一个具体的近似函数的表达式。 因此,当数据量不够,但已知已有数据可信,需要补充数据,此时用【插值】。当数据基本够用,需要寻找因果变量之间的数量关系(推断出表达式),进而对未知的情形作预测,此时用【拟合】。

一、数据插值 根据选用不同类型的插值函数,逼近的效果就不同,一般有:(1)拉格朗日插值(lagrange插值) (2)分段线性插值 (3)Hermite (4)三次样条插值 Matlab 插值函数实现: (1)interp1( ) 一维插值 (2)intep2( ) 二维插值 (3)interp3( ) 三维插值 (4)intern( ) n维插值 1.一维插值(自变量是1维数据) 语法:yi = interp1(x0, y0, xi, ‘method’) 其中,x0, y0为原离散数据(x0为自变量,y0为因变量);xi为需要插值的节点,method为插值方法。 注:(1)要求x0是单调的,xi不超过x0的范围; (2)插值方法有‘nearest’——最邻近插值;‘linear’——线性插值;‘spline’——三次样条插值;‘cubic’——三次插值;

matlab插值法,迭代法程序

数值分析作业 姓名王建忠 学号132080202006 学院能源与动力工程 专业机械电子工程 2013年12月16日

https://www.360docs.net/doc/6c15087508.html,grange插值多项式程序 function f=nalagr(x,y,xx) %x为节点向量 %y为节点函数值 %xx是插值点 syms s if(length(x)==length(y)) n=length(x); else disp('x和y的维数不相等!'); return; end f=0.0; for(i=1:n) l=y(i); for(j=1:i-1) l=l*(s-x(j))/(x(i)-x(j)); end; for(j=i+1:n) l=l*(s-x(j))/(x(i)-x(j));%计算拉格朗日基函数end; f=f+l;%计算拉格朗日插值函数 simplify(f); if(i==n) if(nargin==3) f=subs(f,'s');%计算插值点的函数值else f=collect(f);%将插值多项式展开 f=vpa(f,6);%将插值多项式的系数化成6位精度的小数 end end end >>x=[-2,-1,0,1];%已知节点向量y=[3,1,1,6];%节点函数值向量 f=nalagr(x,y) f= 0.5*s^3+ 2.5*s^2+ 2.0*s+ 1.0 >>f=nalagr(x,y,0) f=1 >>

2.牛顿插值多项式程序 function[p2,z]=newTon(x,y,t) %输入参数中x,y为元素个数相等的向量,t为待估计的点,可以为数字或向量。%输出参数中p2为所求得的牛顿插值多项式,z为利用多项式所得的t的函数值。 n=length(x); chaS(1)=y(1); for i=2:n x1=x;y1=y; x1(i+1:n)=[]; y1(i+1:n)=[]; n1=length(x1); s1=0; for j=1:n1 t1=1; for k=1:n1 if k==j continue; else t1=t1*(x1(j)-x1(k)); end end s1=s1+y1(j)/t1; end chaS(i)=s1; end b(1,:)=[zeros(1,n-1)chaS(1)]; cl=cell(1,n-1); for i=2:n u1=1; for j=1:i-1 u1=conv(u1,[1-x(j)]); cl{i-1}=u1; end cl{i-1}=chaS(i)*cl{i-1}; b(i,:)=[zeros(1,n-i),cl{i-1}]; end p2=b(1,:); for j=2:n p2=p2+b(j,:); end if length(t)==1 rm=0;

MATLAB三次样条插值之三转角法

非常类似前面的三弯矩法,这里的sanzhj函数和intersanzhj作用相当于前面的sanwanj和intersanwj,追赶法程序通用,代码如下。 %%%%%%%%%%%%%%%%%%% function [newu,w,newv,d]=sanzhj(x,y,x0,y0,y1a,y1b) % 三转角样条插值 % 将插值点分两次输入,x0 y0 单独输入 % 边值条件a的一阶导数 y1a 和b的一阶导数 y1b n=length(x);m=length(y); if m~=n error('x or y 输入有误,再来'); end v=ones(n-1,1); u=ones(n-1,1); d=zeros(n-1,1); w=2*ones(n-1,1); h0=x(1)-x0; h=zeros(n-1,1); for k=1:n-1 h(k)=x(k+1)-x(k); end v(1)=h0/(h0+h(1)); u(1)=1-v(1); d(1)=3*(v(1)*(y(2)-y(1))/h(1)+u(1)*((y(1)-y0))/h0); % for k=2:n-1 v(k)=h(k-1)/(h(k-1)+h(k)); u(k)=1-v(k); d(k)=3*(v(k)*(y(k+1)-y(k))/h(k)+u(k)*(y(k)-y(k-1))/h(k-1)); end d(1)=d(1)-u(1)*y1a; d(n-1)=d(n-1)-v(n-1)*y1b; newv=v(1:n-2,:); newu=u(2:n-1,:); %%%%%%%%%%%% function intersanzhj(x,y,x0,y0,y1a,y1b) % 三转角样条插值

matlab 软件拟合与插值运算实验报告

实验6 数据拟合&插值 一.实验目的 学会MATLAB软件中软件拟合与插值运算的方法。 二.实验内容与要求 在生产和科学实验中,自变量x与因变量y=f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。当要求知道观测点之外的函数值时,需要估计函数值在该点的值。 要根据观测点的值,构造一个比较简单的函数y=t (x),使函数在观测点的值等于已知的数值或导数值,寻找这样的函数t(x),办法是很多的。 根据测量数据的类型有如下两种处理观测数据的方法。 (1)测量值是准确的,没有误差,一般用插值。 (2)测量值与真实值有误差,一般用曲线拟合。 MATLAB中提供了众多的数据处理命令,有插值命令,拟合命令。 1.曲线拟合 >> x=[0.5,1.0,1.5,2.0,2.5,3.0]; >> y=[1.75,2.45,3.81,4.80,7.00,8.60]; >> p=polyfit (x,y,2); >> x1=0.5:0.05:3.0; >> y1=polyval(p,x1 ); >> plot(x,y,'*r',x1,y1,'-b')

2.一维插值 >> year=[1900,1910,1920,1930,1940,1990,2000,2010]; >> product = [75.995,91.972,105.711,123.203,131.669,249.633,256.344,267.893 ]; >> p2005=interp1(year,product,2005) p2005 = 262.1185 >> y= interp1(year,product,x, 'cubic'); >> plot(year,product,'o',x,y)

函数的插值方法及matlab程序

6.1 插值问题及其误差 6.1.2 与插值有关的MATLAB 函数 (一) POLY2SYM函数 调用格式一:poly2sym (C) 调用格式二:f1=poly2sym(C,'V') 或f2=poly2sym(C, sym ('V') ), (二) POLYVAL函数 调用格式:Y = polyval(P,X) (三) POLY函数 调用格式:Y = poly (V) (四) CONV函数 调用格式:C =conv (A, B) 例 6.1.2求三个一次多项式、和的积.它们的零点分别依次为0.4,0.8,1.2. 解我们可以用两种MATLAB程序求之. 方法1如输入MATLAB程序 >> X1=[0.4,0.8,1.2]; l1=poly(X1), L1=poly2sym (l1) 运行后输出结果为 l1 = 1.0000 - 2.4000 1.7600 -0.3840 L1 = x^3-12/5*x^2+44/25*x-48/125 方法2如输入MATLAB程序 >> P1=poly(0.4);P2=poly(0.8);P3=poly(1.2); C =conv (conv (P1, P2), P3) , L1=poly2sym (C) 运行后输出的结果与方法1相同. (五) DECONV 函数 调用格式:[Q,R] =deconv (B,A) (六) roots(poly(1:n))命令 调用格式:roots(poly(1:n)) (七) det(a*eye(size (A)) - A)命令 调用格式:b=det(a*ey e(size (A)) - A) 6.2 拉格朗日(Lagrange)插值及其MATLAB程序 6.2.1 线性插值及其MATLAB程序 例 6.2.1 已知函数在上具有二阶连续导数,,且满足条件 .求线性插值多项式和函数值,并估计其误差. 解输入程序 >> X=[1,3];Y=[1,2]; l01= poly(X(2))/( X(1)- X(2)), l11= poly(X(1))/( X(2)- X(1)), l0=poly2sym (l01),l1=poly2sym (l11), P = l01* Y(1)+ l11* Y(2), L=poly2sym (P),x=1.5; Y = polyval(P,x) 运行后输出基函数l0和l1及其插值多项式的系数向量P(略)、插值多项式L和插值Y为l0 = l1 = L = Y = -1/2*x+3/2 1/2*x-1/2 1/2*x+1/2 1.2500 输入程序 >> M=5;R1=M*abs((x-X(1))* (x-X(2)))/2

Matlab求解插值问题

Matlab求解插值问题 在应用领域中,由有限个已知数据点,构造一个解析表达式,由此计算数据点之间的函数值,称之为插值。 实例:海底探测问题 某公司用声纳对海底进行测试,在5×5海里的坐标点上测得海底深度的值,希望通过这些有限的数据了解更多处的海底情况。并绘出较细致的海底曲面图。 1、一元插值 一元插值是对一元数据点(x i,y i)进行插值。 线性插值:由已知数据点连成一条折线,认为相临两个数据点之间的函数值就在这两点之间的连线上。一般来说,数据点数越多,线性插值就越精确。 调用格式:yi=interp1(x,y,xi,’linear’) %线性插值 zi=interp1(x,y,xi,’spline’) %三次样条插值 wi=interp1(x,y,xi,’cubic’) %三次多项式插值说明:yi、zi、wi为对应xi的不同类型的插值。x、y为已知数据点。 例:已知数据: 求当x i=0.25时的y i的值。 程序: x=0:.1:1; y=[.3 .5 1 1.4 1.6 1 .6 .4 .8 1.5 2]; yi0=interp1(x,y,0.025,'linear') xi=0:.02:1; yi=interp1(x,y,xi,'linear'); zi=interp1(x,y,xi,'spline'); wi=interp1(x,y,xi,'cubic'); plot(x,y,'o',xi,yi,'r+',xi,zi,'g*',xi,wi,'k.-') legend('原始点','线性点','三次样条','三次多项式') 结果:yi0 = 0.3500

Matlab插值与拟合教程

MATLAB插值与拟合 §1曲线拟合 实例:温度曲线问题 曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非采集数据对应的变量信息。 曲线拟合有多种方式,下面是一元函数采用最小二乘法对给定数据进行多项式曲线拟合,最后给出拟合的多项式系数。 1. 1.线性拟合函数:regress() 调用格式:b=regress(y,X) [b,bint,r,rint,stats]= regress(y,X) [b,bint,r,rint,stats]= regress(y,X,alpha) 说明:b=regress(y,X)返回X处y的最小二乘拟合值。该函数求解线性模型: y=Xβ+ε β是p?1的参数向量;ε是服从标准正态分布的随机干扰的n?1的向量;y为n?1的向量;X为n?p矩阵。 bint返回β的95%的置信区间。r中为形状残差,rint中返回每一个残差的95%置信区间。Stats向量包含R2统计量、回归的F值和p值。 例1:设y的值为给定的x的线性函数加服从标准正态分布的随机干扰值得到。即y=10+x+ε;求线性拟合方程系数。 程序:x=[ones(10,1) (1:10)’] y=x*[10;1]+normrnd(0,0.1,10,1) [b,bint]=regress(y,x,0.05) 结果:x = 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 y = 10.9567 11.8334

13.0125 14.0288 14.8854 16.1191 17.1189 17.9962 19.0327 20.0175 b = 9.9213 1.0143 bint = 9.7889 10.0537 0.9930 1.0357 即回归方程为:y=9.9213+1.0143x 2. 2.多项式曲线拟合函数:polyfit( ) 调用格式:p=polyfit(x,y,n) [p,s]= polyfit(x,y,n) 说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。矩阵s用于生成预测值的误差估计。(见下一函数polyval) 程序: x=0:.1:1; y=[.3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2] n=3; p=polyfit(x,y,n) xi=linspace(0,1,100); z=polyval(p,xi); %多项式求值 plot(x,y,’o’,xi,z,’k:’,x,y,’b’) legend(‘原始数据’,’3阶曲线’) 结果: p = 16.7832 -25.7459 10.9802 -0.0035 多项式为:16.7832x3-25.7459x2+10.9802x-0.0035 曲线拟合图形:

三次样条插值的MATLAB实现

MATLAB 程序设计期中考查 在许多问题中,通常根据实验、观测或经验得到的函数表或离散点上的信息,去研究分析函数的有关特性。其中插值法是一种最基本的方法,以下给出最基本的插值问题——三次样条插值的基本提法: 对插值区间[]b a ,进行划分:b x x x a n ≤

matlab实现插值法和曲线拟合电子教案

m a t l a b实现插值法和 曲线拟合

插值法和曲线拟合 电子科技大学 摘要:理解拉格朗日多项式插值、分段线性插值、牛顿前插,曲线拟合,用matlab编程求解函数,用插值法和分段线性插值求解同一函数,比较插值余项;用牛顿前插公式计算函数,计算函数值;对于曲线拟 合,用不同曲线拟合数据。 关键字:拉格朗日插值多项式;分段线性插值;牛顿前插;曲线拟合 引言: 在数学物理方程中,当给定数据是不同散点时,无法确定函数表达式,求解函数就需要很大的计算量,我们有多种方法对给定的表格函数进行求解,我们这里,利用插值法和曲线拟合对函数进行求解,进一步了解函数性质,两种方法各有利弊,适合我们进行不同的散点函数求解。 正文: 一、插值法和分段线性插值 1拉格朗日多项式原理 对某个多项式函数,已知有给定的k + 1个取值点: 其中对应着自变量的位置,而对应着函数在这个位置的取值。 假设任意两个不同的x j都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为: 其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为: [3] 拉格朗日基本多项式的特点是在上取值为1,在其它的点 上取值为0。 2分段线性插值原理 给定区间[a,b], 将其分割成a=x 0

MATLAB插值与拟合实验报告

实验报告MATLAB 第二次实验报告题目:学生姓名:学院:专业班级:学号:

年月 MATLAB第二次实验报告 ————插值与拟合 插值即在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。 所谓拟合是指已知某函数的若干离散函数值{f1,f2,…,fn}通过调整该函数中若干待定系数f(λ1, λ2,…,λn),使得该函数与已知点集的差别(最小二乘意义)最小。 一、插值 <1>拉格朗日插值(课上例子) m=101; x=-5:10/(m-1):5; y=1./(1+x.^2);z=0*x; plot(x,z,'r',x,y,'LineWidth',1.5), gtext('y=1/(1+x^2)'),pause n=3; x0=-5:10/(n-1):5; y0=1./(1+x0.^2); y1=fLagrange(x0,y0,x); hold on,plot(x,y1,'b'),gtext('n=2'),pause, hold off n=5; x0=-5:10/(n-1):5; y0=1./(1+x0.^2);

y2=fLagrange(x0,y0,x); hold on,plot(x,y2,'b:'),gtext('n=4'),pause, hold off n=7; x0=-5:10/(n-1):5; y0=1./(1+x0.^2); y3=fLagrange(x0,y0,x);hold on, plot(x,y3,'r'),gtext('n=6'),pause, hold off n=9; x0=-5:10/(n-1):5; y0=1./(1+x0.^2); y4=fLagrange(x0,y0,x);hold on, plot(x,y4,'r:'),gtext('n=8'),pause, hold off n=11; x0=-5:10/(n-1):5; y0=1./(1+x0.^2); y5=fLagrange(x0,y0,x);hold on, plot(x,y5,'m'),gtext('n=10') 运行后得. <2>拉格朗日插值(课下修改) yh=lagrange (x,y,xh)function n = length(x);m = length(xh);yh = zeros(1,m); c1 = ones(n-1,1);c2 = ones(1,m); i=1:n for xp = x([1:i-1 i+1:n]); yh = yh + y(i)*prod((c1*xh-xp'*c2)./(x(i)-xp'*c2));end输入x=[1 2 3 4 5 6] y=[13 21 34 6 108 217] xh=3.2 lagrange(x,y,xh) 运行后得 x = 1 2 3 4 5 6

双线性插值Matlab程序

I=imread('flower.jpg'); %读入原图像 [nrows,ncols]=size(I);%读取图像矩阵大小,方便后面操作 K = str2double(inputdlg('please input scale factor (must between 0.2 - 5.0)', 'INPUT scale factor', 1, {'0.5'})); width = K * nrows; height = K * ncols; J = uint8(zeros(width,height)); widthScale = nrows/width; heightScale = ncols/height; for x = 5:width - 5 % 5是为了防止矩阵超出边界溢出 for y = 5:height - 5 xx = x * widthScale; % xx, yy为原坐标,x,y为新坐标 yy = y * heightScale; if (xx/double(uint16(xx)) == 1.0) & (yy/double(uint16(yy)) == 1.0) J(x,y) = I(int16(xx),int16(yy));%若xx,yy为整数,直接赋值 else a = double(uint16(xx)); b = double(uint16(yy)); x11 = double(I(a,b)); % x11 <- I(a,b) x12 = double(I(a,b+1)); % x12 <- I(a,b+1) x21 = double(I(a+1,b)); % x21 <- I(a+1,b) x22 = double(I(a+1,b+1)); % x22 <- I(a+1,b+1) J(x,y) = uint8( (b+1-yy) * ((xx-a)*x21 + (a+1-xx)*x11) + (yy-b) * ((xx-a)*x22 +(a+1-xx)

Matlab 一维插值interp1 例子 及 可视拟合界面

一维插值: 已知离散点上的数据集,即已知在点集X上对应的函数值Y,构造一个解析函数(其图形为一曲线)通过这些点,并能够求出这些点之间的值,这一过程称为一维插值。 MATLAB命令:yi=interp1(X, Y, xi, method) 一些个人经验说明: ①关于拟合参数的,X必须是向量,行向量或列向量均可,不可以是复数 ②Y是向量或矩阵.但必须满足行数与length(X)相同即size(Y,1)==length (X) ③针对以上说明的例子 function tu x=[5 1 2 20 14 21]' y=rand(6,2)%按列计算的 xi=linspace(0,21,100); yi=interp1(x,y,xi,'cubic') plot(x,y,'o',xi,yi) size(x) size(y,1) length(x) 结果 size(x) 6 1 size(y,1) 6 length(x) 6

该命令用指定的算法找出一个一元函数,然后以给出处的值。xi可以是一个标量,也可以是一个向量,是向量时,必须单调,method可以下列方法之一:‘nearest’:最近邻点插值,直接完成计算; ‘spline’:三次样条函数插值; ‘linear’:线性插值(缺省方式),直接完成计算; ‘cubic’:三次函数插值; 对于[min{xi},max{xi}]外的值,MATLAB使用外推的方法计算数值。

%-- 09-4-1 下午8:38 --% %已知数据 t=1900:10:1990; p=[75.995,91.972,105.711,123.203,131.669,150.697,179.323,203.212,226.505,249.633];

数值分析实验插值与拟合

《数值分析》课程实验一:插值与拟合 一、实验目的 1. 理解插值的基本原理,掌握多项式插值的概念、存在唯一性; 2. 编写MA TLAB 程序实现Lagrange 插值和Newton 插值,验证Runge 现象; 3. 通过比较不同次数的多项式拟合效果,理解多项式拟合的基本原理; 4. 编写MA TLAB 程序实现最小二乘多项式曲线拟合。 二、实验内容 1. 用Lagrange 插值和Newton 插值找经过点(-3, -1), (0, 2), (3, -2), (6, 10)的三次插值公式,并编写MATLAB 程序绘制出三次插值公式的图形。 2. 设 ]5,5[,11 )(2 -∈+= x x x f 如果用等距节点x i = -5 + 10i /n (i = 0, 1, 2, …, n )上的Lagrange 插值多项式L n (x )去逼近它。不妨取n = 5和n = 10,编写MATLAB 程序绘制出L 5(x )和L 10(x )的图像。 (2) 编写MA TLAB 程序绘制出曲线拟合图。 三、实验步骤 1. (1) Lagrange 插值法:在线性空间P n 中找到满足条件: ?? ?≠===j i j i x l ij j i , 0, , 1)(δ 的一组基函数{}n i i x l 0)(=,l i (x )的表达式为 ∏ ≠==--= n i j j j i j i n i x x x x x l ,0),,1,0()( 有了基函数{}n i i x l 0)(=,n 次插值多项式就可表示为 ∑==n i i i n x l y x L 0 )()( (2) Newton 插值法:设x 0, x 1, …, x n 是一组互异的节点,y i = f (x i ) (i = 0, 1, 2, …, n ),f (x )在处的n 阶差商定义为

matlab插值程序设计

例1、 已知数据x=[0,3,5,7,9,11,12,13,14,15], y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.4,1.6],采用四种方法进行插值,得到每隔0.5的数据。P96 课本 编写脚本文件: %Interpolation using the four methods x=[0,3,5,7,9,11,12,13,14,15]; y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.4,1.6]; length_of_x=length(x); scalar_x=[x(1):0.5:x(length_of_x)]; length_of_sx=length(scalar_x); for i=1: length_of_x y_nearst(i)=interp1(x,y,scalar_x(i), ‘nearst ’); y_linear(i)=interp1(x,y,scalar_x(i), ‘linear ’); y_spline(i)=interp1(x,y,scalar_x(i), ‘spline ’); y_cubic(i)=interp1(x,y,scalar_x(i), ‘cubic ’); end subplot(2,2,1),plot(x,y,‘*’ ),hold on ,plot(scalar_x,y_nearest),titie(‘menthod=‘nearest ’); subplot(2,2,2),plot(x,y,’*’ ),hold on ,plot(scalar_x,y_linear),titie(‘menthod= linear ’); subplot(2,2,3),plot(x,y,’*’ ),hold on ,plot(scalar_x,y_spline),titie(‘menthod= spline ’); subplot(2,2,4),plot(x,y,’*’ ),hold on ,plot(scalar_x,y_cubic),titie(‘menthod= cubic ’); ‘’函数的运算 1、2211()6(0.3)0.01(0.9)0.04 f x x x =+--+-+ P100 2、f(x)=lo g x+sin x-2在6附近的解 3、32()f x x ax bx c =+++ 求它的极小值

MATLAB插值与拟合实验报告材料

实用标准文档 MATLAB实验报告 题目:第二次实验报告 学生姓名: 学院: 专业班级: 学号: 年月

MATLAB第二次实验报告 ————插值与拟合插值即在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。 所谓拟合是指已知某函数的若干离散函数值{f1,f2,…,fn}通过调整该函数中若干待定系数f(λ1, λ2,…,λn),使得该函数与已知点集的差别(最小二乘意义)最小。 一、插值 <1>拉格朗日插值(课上例子) m=101; x=-5:10/(m-1):5; y=1./(1+x.^2);z=0*x; plot(x,z,'r',x,y,'LineWidth',1.5), gtext('y=1/(1+x^2)'),pause n=3; x0=-5:10/(n-1):5; y0=1./(1+x0.^2); y1=fLagrange(x0,y0,x); hold on,plot(x,y1,'b'),gtext('n=2'),pause, hold off n=5;

x0=-5:10/(n-1):5; y0=1./(1+x0.^2); y2=fLagrange(x0,y0,x); hold on,plot(x,y2,'b:'),gtext('n=4'),pause, hold off n=7; x0=-5:10/(n-1):5; y0=1./(1+x0.^2); y3=fLagrange(x0,y0,x);hold on, plot(x,y3,'r'),gtext('n=6'),pause, hold off n=9; x0=-5:10/(n-1):5; y0=1./(1+x0.^2); y4=fLagrange(x0,y0,x);hold on, plot(x,y4,'r:'),gtext('n=8'),pause, hold off n=11; x0=-5:10/(n-1):5; y0=1./(1+x0.^2); y5=fLagrange(x0,y0,x);hold on, plot(x,y5,'m'),gtext('n=10') 运行后得

相关文档
最新文档