文档库 最新最全的文档下载
当前位置:文档库 › (完整版)Matlab学习系列13.数据插值与拟合

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

(完整版)Matlab学习系列13.数据插值与拟合
(完整版)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’——三次插值;

默认为分段线性插值。

例1 从1点12点的11小时内,每隔1小时测量一次温度,测得的温度的数值依次为:5,8,9,15,25,29,31,30,22,25,27,24.试估计每隔1/10小时的温度值。

代码:

hours=1:12;

temps=[5 8 9 15 25 29 31 30 22 25 27 24]; h=1:0.1:12;

t=interp1(hours,temps,h,'spline');

plot(hours,temps,'+',h,t,hours,temps,'r:') % 作图,原散点数据用+标记

xlabel('Hour'),ylabel('Degrees Celsius')

运行结果:

5

10

15

20

25

30

35

Hour

D e g r e e s C e l s i u s

2.二维插值(自变量是2维数据)

语法:zi = interp2(x0, y0, z0, xi, yi, ‘method’)

其中,x0, y0, z0为原离散数据(x0, y0为自变量,z0为因变量);xi, yi为需要插值的节点,method为插值方法。

注:(1)要求x0, y0是单调的,xi, yi不超过x0, y0的范围,注意:要求xi取为行向量,yi取列向量;

(2)插值方法有‘nearest’——最邻近插值;‘linear’——双线性插值;‘cubic’——双三次插值;默认为双线性插值。

例2山区地貌:在某山区测得一些地点的高度如下表:

(平面区域为:1200<=x<=4000, 1200<=y<=3600)

试作出该山区的地貌图和等高线图。

代码:

x0=1200:400:4000;

y0=1200:400:3600;

height=[1130 1250 1280 1230 1040 900 500 700;

1320 1450 1420 1400 1300 700 900 850;

1390 1500 1500 1400 900 1100 1060 950;

1500 1200 1100 1350 1450 1200 1150 1010;

1500 1200 1100 1550 1600 1550 1380 1070;

1500 1550 1600 1550 1600 1600 1600 1550;

1480 1500 1550 1510 1430 1300 1200 980];

mesh(x0,y0,height)

title('原数据散点图');

pause % 等待,按任意键切换到新图形

xi=1200:5:4000;

yi=1200:5:3600;

zi=interp2(x0,y0,height,xi',yi,'cubic');

mesh(xi,yi,zi)

title('cubic 插值图');

运行结果:

另外,二维插值函数还有griddata函数,格式类似

cz = griddata(x0, y0, z0, cx, cy, ‘method’)

插值方法有‘nearest’——最邻近插值;‘linear’——双线性插值;‘cubic’——双三次插值;‘v4’——Matlab提供的插值方法;默认为双线性插值。

与interp2区别是,interp2的插值数据必须是矩形域,即已知数据点(x,y)组成规则的矩阵(或称之为栅格),可使用meshgid生成。而griddata函数的已知数据点(X,Y)不要求规则排列,特别是对试验中随机没有规律采取的数据进行插值具有很好的效果。

例3在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深度为5英尺,在矩形区域(75,200)×(-50,150)里的哪些地方船要避免进入.

作海底曲面图,作出水深小于5的海域范围, 即z=5的等高线。

代码:

x = [129.0 140.0 103.5 88.0 185.5 195.0 105.5 157.5 107.5 77.0 81.0 162.0 162.0 117.5];

y = [7.5 141.5 23.0 147.0 22.5 137.5 85.5 -6.5 -81 3.0 56.5 -66.5 84.0 -33.5];

z = [4 8 6 8 6 8 8 9 9 8 8 9 4 9];

x1=75:1:200;

y1=-50:1:150;

[x1,y1]=meshgrid(x1,y1);

z1=griddata(x,y,z,x1,y1,'v4');

meshc(x1,y1,z1)

pause

z1(z1>=5)=nan; %将水深大于5的置为nan,这样绘图就不会显示出来meshc(x1,y1,z1)

运行结果:

150

二、 数据拟合

拟合最常用的方法为最小二乘法。原理是:

因变量的实际值与拟合值之差,称为残差(拟合误差),将所有残差平方后相加,即得误差平方和,“最好”拟合效果就是使误差平方和最小,于是运用极值原理,将“求最好拟合问题”转换为“求误差平方和最小”问题。

Matlab 实现: 1. 多项式拟合

f (x )=a 1x m + …+a m x +a m+1

语法:

150

a = polyfit(x0, y0, m);

y = polyval(a, x);

注:(1)x,y的长度相同,m为拟合多项式次数,m=1时,一次多项式对应一条直线,也称为线性拟合(一元线性回归);

(2)a返回的是拟合多项式的系数:[a1, a2, …, am];

(3)polyval函数用来计算拟合多项式在x点处的取值;

(4)拟合多项式的次数一般为1-3次,不宜过高,否则有龙格现象(两端出现很大误差)。

例4 1949年—1994年我国人口数据资料如下:

分析我国人口增长的规律,预报2005年我国人口数。

代码:

x0=[1949 1954 1959 1964 1969 1974 1979 1984 1989 1994];

y0=[5.4 6.0 6.7 7.0 8.1 9.1 9.8 10.3 11.3 11.8];

a=polyfit(x0,y0,1); % 线性拟合

x1=[1949:0.5:1994];

y1=polyval(a,x1);

% 或者直接用多项式计算:y1 = a(1)*x1 + a(2);

y1_2005=polyval(a,2005)

b=polyfit(x0,log(y0),1); % 指数函数拟合

y2=exp(b(2))*exp(b(1)*x1);

y2_2005=exp(b(2))*exp(b(1)*2005)

plot(x0,y0,'*')

hold on

plot(x1,y1,'--r')

hold on

plot(x1,y2,'-k')

legend('原数据散点图','线性拟合曲线','指数拟合曲线')

运行结果:

y1_2005 = 13.5080 y2_2005 = 15.0596

注:(1)实际2005年人口是13.3 亿,可见线性拟合效果更好; (2)人口指数增长模型为:bx y a e =?,两边取ln 得

ln y = ln a + bx

令Y=ln y ,A=ln a ,B=b ,则转化为直线方程:Y = A + Bx

故可以作线性拟合得到A ,B 值,从而得到A Bx y e e =?. 一般可以转化为直线方程的曲线有:

5678910111213

(Logistic 生长曲线,就是S 型曲线)

2. 多元线性回归

011n n y x x βββε=++++L

βi 为回归系数,ε为残差。n=1时为线性回归。

Matlab 实现:

[b, bint, r, rint, stats] = regress(y, x, α);

注:(1)整体是一个假设检验(是否符合多元线性关系):

原假设H 0:βi =0(即不存在线性关系) 备择假设H 1:βi ≠0(回归式成立);

(2)若有常数项β0,则x 的第一列必须全为1; (3)α为显著性水平的概率,默认是0.05; (4)b 返回β0, β1,…βn 值的点估计,

bint 返回β0, β1,…βn 值的区间估计, r 返回残差的点估计, rint 返回残差的区间估计; (5)stats 返回4个数:

相关系数平方r 2 (越大越好,若小于0.5结果无价值) F 统计量(用于计算概率)

拒绝原假设的概率(< α时拒绝) (越小越好) 剩余方差=残差平方和/[数据个数-(n+1)] (越小越好) 其中,n+1为回归系数β0, β1,…βn 的个数。

例5 已知某动物的进食量与体重数据为

拟合直线y=β0+ β1x.

代码:

food=[1.5 2 3 4.5 7.5 9.1 10.5 12];

n=length(food);

x=[ones(n,1), food'];

y=[5.6 6.6 7.2 7.8 10.1 10.8 13.5 16.5]';

[b,bint,r,rint,stat] = regress(y,x,0.05)

运行结果:

b = 4.1575

0.8950 ——>回归方程:y= 4.1575 + 0.8950x

bint = 2.4692 5.8458 ——> 4.1575∈[2.4692, 5.8458]

0.6644 0.6644 ——> 0.8950∈[0.6644, 0.6644]

r = 0.1000 ——> 残差1: 5.6-(4.1575 + 0.8950*1.5)=0.1

0.6525

0.3575

-0.3850

-0.7701

-1.5021

-0.0551

1.6024

rint = -2.1283 2.3283 ——> 0.1000 ∈[-2.1283, 2.3283]

-1.5282 2.8332

-2.0074 2.7223

-2.8445 2.0744

-3.1401 1.5999

-3.2935 0.2893

-2.3519 2.2417

0.4846 2.7201

stat = 0.9376 90.1871 0.0001 1.0220

——> r2=0.9376 > 0.5(说明结果很好)

0.0001 < α = 0.05 (拒绝原假设,接受备择假设)

【残差r的平方和/[数据个数-(n+1)]】:

(0.10002+0.65252+…+1.60242)/[8-(1+1)]=1.0220

3.一般曲线拟合(非线性回归)

曲线形式y=f(a, x)已知,但其中a=[a1, a2, …] 为未知的待定系数。例如,已知曲线形式为y=f(a, x)=a1x2+a2 sin x+a3x3,以及原始数据x1, …, xn,y1, …, yn,利用最小二乘法原理,求出让误差平方和

[F(a, x1)-y1]2+…+[F(a, xn)-yn]2

取最小值的a1,a2,a3. 从而得到拟合曲线方程。

Matlab实现:lsqcurvefit和lsqnonlin函数。

(1)l sqcurvefit函数

语法:先定义形式函数f(a,x)的M-文件fun.m;

再调用

[x, resnorm, residual] = lsqcurvefit (‘fun’,x0,xdata,ydata,lb, ub, options);

注:(1)返回值x为拟合出的待定系数,resnorm返回残差的平方和(越小越好),residual返回残差;

(2)‘fun’为预定义的形式函数,xdata,ydata为已知数据,x0为迭代初始值(初始值选取的不同将影响拟合结果),lb,ub是可选参数,为x指定范围“下界和上界”;

(3)options是可选参数,指定采用的优化参数,语法:OPTIONS = OPTIMSET('PARAM1',V ALUE1,'PARAM2',V ALUE2,...)示例:options = optimset('TolFun',1e-3);

注意:形式函数是以待定系数a和已知数据x作为参数,lsqcurvefit函数的参数中包含已知数据x,y.

例6 用下面一组数据拟合0.02

()kt

=+中的待定系数a,b,k.

C t a be-

该问题即解最优化问题:满足下式的的a,b,k:

2

10

0.021

min j

kt j j a be

c -=????

+-∑

代码: (lsqcurvefit 函数)

%%%%%%%%%%函数单独存为m 文件%%%%%%%%%%%%%%%%%%%%%%%%

function f=curvefun1(x,tdata) % tdata 是向量 f=x(1)+x(2)*exp(-0.02*x(3)*tdata);

%其中 x(1)=a; x(2)=b; x(3)=k;

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tdata=[100:100:1000]';

cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59]';

x0=[0.2,0.05,0.05]';

[x,resnorm,residual]=lsqcurvefit('curvefun1',x0,tdata,cdata)

C_fit=curvefun1(x,tdata)

plot(tdata,cdata,'o',tdata,f,'r')

运行结果:

x = 0.0069 -0.0029 0.0809

——> 拟合曲线:0.020.0809()0.00690.0029t C t e -?=-

resnorm = 5.3938e -007 (残差平方和)

residual = 1.0e -003 * (残差)

-0.0971 -0.1739 -0.2164 -0.2463 -0.2666 -0.2713 -0.2651 -0.2538 -0.2436 -0.2313

c_fit = 0.0044 0.0048 0.0051 0.0054 0.0056 0.0058 0.0060 0.0061 0.0063 0.0064

-3

1002003004005006007008009001000(2)l sqnonlin函数

与lsqcurvefit函数用法类似,不同在于形式函数只以待定系数a 作为参数,但函数体里用到已知数据x, y. 而在调用拟合函数时不再需要已知数据x,y作为参数:

[x, resnorm, residual] = lsqnonlin (‘fun’,x0,lb, ub, options);

对于例6,调用lsqnonlin函数实现的代码如下:(运行结果一样)代码:(lsqnonlin函数)

%%%%%%%%%%%%%%%%函数单独存为m文件%%%%%%%%%%%%%%%%%%

function f=curvefun2(x)

tdata=[100:100:1000]';

cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39 ,6.50,6.59]';

f=x(1)+x(2)*exp(-0.02*x(3)*tdata)- cdata;

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

x0=[0.2,0.05,0.05]';

[x,resnorm,residua]=lsqnonlin('curvefun2',x0)

(3)n linfit函数

非线性拟合的通用函数,适用面比lsqcurvefit函数广,例如可以做加权最小二乘拟合。语法:

回归:[beta, r, J]=nlinfit(x, y, ‘model’, beta0);

预测:[Y, DELTA]=nlpredci(‘model’, x, beta, r, J);

注:(1)beta返回拟合的待定系数;r返回残差;J返回拟合函数的雅可比矩阵;

(2)x、y为已知数据,分别为n×m矩阵和n维列向量,对一元非线性回归,x为n维列向量;

(3)‘model’ 为预先定义的形式函数;beta0为指定的待定系数初始值;

(4)nlpredic函数用来求nlinfit所得的拟合函数在x处的预测值Y及预测值的显著性为1-alpha的置信区间Y±DELTA.

例7混凝土的抗压强度随养护时间的延长而增加,现将一批混凝土作成12个试块,下表记录了养护日期x(日)及抗压强度y(kg/cm2)的数据:

建立非线性回归模型:

12mx mx y a k e k e -=++

对其中的待定系数a ,k 1,k 2,m 进行拟合(回归),并对结果做检验。

注:表中的+r 代表加上一个[-0.5,0.5]之间的随机数。

代码: (使用了内联函数,也可以如前例将函数定义为m 文件)

x=[2 3 4 5 7 9 12 14 17 21 28 56];

r=rand(1,12)-0.5;

y1=[35 42 47 53 59 65 68 73 76 82 86 99]; y=y1+r;

myfunc=inline('beta(1)+beta(2)*exp(beta(4)*x)+beta(3)*exp(-beta(4)*x)','beta','x');

[beta,r,J]=nlinfit(x,y,myfunc,[0.5 0.5 0.5 0.5]) [y_fit,delta]=nlpredci(myfunc,x',beta,r,J) plot(x,y,'o',x,y_fit,'r')

运行结果:

beta = 87.5790 0.0283 -62.7214 0.1070

r = -1.7657 0.1376 0.0378 2.2882 1.1755 0.9553 -2.6909 -0.6823 -1.1195 0.6254 1.0755 -0.0368 J = 1.0000 1.2386 0.8074 101.3489 1.0000 1.3784 0.7255 136.6213 1.0000 1.5341 0.6518 163.7126 1.0000 1.7073 0.5857 183.9240 1.0000 2.1147 0.4729 208.0387 1.0000 2.6192 0.3818 216.1866 1.0000 3.6105 0.2770 209.6925 1.0000 4.4719 0.2236 198.1339 1.0000 6.1643 0.1622 175.9447

1.0000 9.4566 0.1057 144.9124 1.0000 19.9978 0.0500 103.6939 1.0000 399.9116 0.0025 643.7199

y_fit = 36.9751 42.1171 46.7383 50.8915 57.9796 63.7073 70.3099 73.6807 77.5793 81.2150 85.0098 98.7606

delta = 2.6679 1.9590 1.5946 1.5085 1.6605 1.7740 1.7118 1.6162 1.5932 1.9392 2.9520 3.7521

4. Matlab 曲线拟合工具箱简介 基本步骤:

(1)将已知数据预存在工作空间“workspace ”;

(2)命令窗口输入cftool 回车,调出curve fitting tool 窗口; (3) 点击Data 调出数据窗口,指定要拟合的数据x ,y (也可

30

40

50

6070

8090

100

以设定权重),再点击Creat data set按钮生成数据集(原窗口将出现原始数据散点);还可以用smooth对话框对数据做平滑处理;

(4)点击Fitting调出拟合窗口,点New fit开始,选择拟合类型“type of fit”(默认是多项式拟合,Custom Equations是自定义拟合方程,),点Apply完成拟合。

对例7,用上述方法,拟合类型选择Exponential(指数拟合)中的y=a*exp(b*x)+c*exp(d*x), 得到

拟合窗口的Results栏,显示:

General model Exp2:

f(x) = a*exp(b*x) + c*exp(d*x)

Coefficients (with 95% confidence bounds):

a = 73.99 (68.5, 79.49)

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插值、拟合和回归分析

第四讲 插值、拟合与回归分析 在生产实践和科学研究中,常常有这样的问题:由实验或测量得到变量间的一批离散样本点,要求得到变量之间的函数关系或得到样本点之外的数据。解决此类问题的方法一般有插值、拟合和回归分析等。 设有一组实验数据0011(,),(,),(,)n n x y x y x y ,当原始数据精度较高,要求确定一个简单函数()y x ?=(一般为多项式或分段多项式)通过各数据点,即(),0,,i i y x i n ?== ,称为插值问题。 另一类是拟合问题,当我们已经有了函数关系的类型,而其中参数未知或原始数据有误差时,我们确定的初等函数()y x ?=并不要求经过数据点,而是要求在某种距离度量下总体误差达到最小,即 (),0,,i i i y x i n ?ε=+= ,且20 n i i ε=∑达到最小值。 对同一组实验数据,可以作出各种类型的拟合曲线,但拟合效果有好有坏,需要进行有效性的统计检验,这类问题称为回归分析。 一、插值(interpolation) 常用的插值方法有分段线性插值、分段立方插值、样条插值等。 1、一元插值 yi=interp1(x,y,xi,method) 对给定数据点(x,y),按method 指定的方法求出插值函数在点(或数组)xi 处的函数值yi 。其中method 是字符串表达式,可以是以下形式: 'nearest' ——最邻近点插值

'linear' ——分段线性插值(也是缺省形式) 'spline' ——分段三次样条插值 'cubic' 分段立方插值 例:在一天24小时内,从零点开始每间隔2小时测得环境温度数据分别为(℃): 12,9,9,10,18,24,28,27,25,20,18,15,13 用不同的插值方法估计中午1点(即13点)的温度,并绘出温度变化曲线。 >> x=0:2:24; >> y=[12 9 9 10 18 24 28 27 25 20 18 15 13]; >>y_linear=interp1(x,y,13),y_nearest=interp1(x,y,13,'nearest') >>y_cubic=interp1(x,y,13,'cubic'),y_spline=interp1(x,y,13,'spline') >> y1=interp1(x,y,xx); y2=interp1(x,y,xx,'nearest'); >> y3=interp1(x,y,xx,'cubic');y4=interp1(x,y,xx,'spline'); >> subplot(2,2,1),plot(x,y,'or',xx,y1) >> subplot(2,2,2),plot(x,y,'or',xx,y2) >> subplot(2,2,3),plot(x,y,'or',xx,y3) >> subplot(2,2,4),plot(x,y,'or',xx,y4) 2、二元插值 zi=interp2(X,Y,Z,xi,yi,method) 已知数据点(X,Y,Z),求插值函数在(xi,yi)处的函数值zi,插值方法method同interp1。这里要求X,Y,Z是同维矩阵,且X,Y是

【VIP专享】MATLAB插值与拟合的几个函数整理

MATLAB插值与拟合 2015.4.19 19:21 【目录】 1. 线性拟合函数:regress() 2. 多项式曲线拟合函数:polyfit( ) 3. 多项式曲线求值函数:polyval( ) 4. 多项式曲线拟合的评价和置信区间函数:polyconf( ) 5. 稳健回归函数:robustfit( ) §1曲线拟合 实例:温度曲线问题 气象部门观测到一天某些时刻的温度变化数据为: t 0 1 2 3 4 5 6 7 8 9 10 T 13 15 17 14 16 19 26 24 26 27 29 试描绘出温度变化曲线。 曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非采集数据对应的变量信息。 曲线拟合有多种方式,下面是一元函数采用最小二乘法对给定数据进行多项式曲线拟合,最后给出拟合的多项式系数。 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)

(完整版)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实现插值与拟合实验 张体强1026222 张影 晁亚敏 [摘要]:在测绘学中,无论是图形处理,还是地形图处理等,大多离不开插值与拟合的应用,根据插值与拟合原理,构造出插值和拟合函数,理解其原理,并在matlab平台下,实现一维插值,二维插值运算,实现多项式拟合,非线性拟合等,并在此基础上,联系自己所学专业,分析其生活中特殊例子,提出问题,建立模型,编写程序,以至于深刻理解插值与拟合的作用。 [关键字]: 测绘学插值多项式拟合非线性拟合 [ Abstract]: in surveying and mapping, whether the graphics processing, or topographic map processing and so on, are inseparable from the interpolation and fitting application, according to the interpolation and fitting theory, construct the fitting and interpolation function, understanding its principle, and MATLAB platform, achieve one-dimensional interpolation, two-dimensional interpolation, polynomial fitting, non-linear fitting, and on this basis, to contact their studies, analysis of their living in a special example, put forward the question, modeling, programming, so that a deep understanding of interpolation and fitting function. [ Key words]: Surveying and mapping interpolation polynomial fitting nonlinear

插值算法与matlab代码

Matlab中插值函数汇总和使用说明 MATLAB中的插值函数为interp1,其调用格式为: yi= interp1(x,y,xi,'method') 其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量,'method'表示采用的插值方法,MA TLAB提供的插值方法有几种:'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,用于对向量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。 例1 1. 2.>>x = 0:10; y = x.*sin(x); 3.>>xx = 0:.25:10; yy = interp1(x,y,xx); 4.>>plot(x,y,'kd',xx,yy) 复制代码 例2 1. 2.>> year = 1900:10:2010; 3.>> product = [75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 4.249.633 256.344 267.893 ]; 5.>>p1995 = interp1(year,product,1995) 6.>>x = 1900:1:2010; 7.>>y = interp1(year,product,x,'pchip'); 8.>>plot(year,product,'o',x,y) 复制代码 插值结果为: 1.

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中的拟合与差值

您正在看的MATL AB是:曲线拟合与插值。 在大量的应用领域中,人们经常面临用一个解析函数描述数据(通常是测量值)的任务。对这个问题有两种方法。在插值法里,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况。这种方法在下一节讨论。这里讨论的方法是曲线拟合或回归。人们设法找出某条光滑曲线,它最佳地拟合数据,但不必要经过任何数据点。图11.1说明了这两种方法。标有'o'的是数据点;连接数据点的实线描绘了线性内插,虚线是数据的最佳拟合。 11.1 曲线拟合 曲线拟合涉及回答两个基本问题:最佳拟合意味着什么?应该用什么样的曲线?可用许多不同的方法定义最佳拟合,并存在无穷数目的曲线。所以,从这里开始,我们走向何方?正如它证实的那样,当最佳拟合被解释为在数据点的最小误差平方和,且所用的曲线限定为多项式时,那么曲线拟合是相当简捷的。数学上,称为多项式的最小二乘曲线拟合。如果这种描述使你混淆,再研究图11.1。虚线和标志的数据点之间的垂直距离是在该点的误差。对各数据点距离求平方,并把平方距离全加起来,就是误差平方和。这条虚线是使误差平方和尽可能小的曲线,即是最佳拟合。最小二乘这个术语仅仅是使误差平方和最小的省略说法。 图11.12阶曲线拟合 在MATLAB中,函数polyfit求解最小二乘曲线拟合问题。为了阐述这个函数的用法,让我们以上面图11.1中的数据开始。

?x=[0.1.2.3.4.5.6.7.8.91]; ?y=[-.4471.9783.286.167.087.347.669.569.489.3011.2]; 为了用polyfit,我们必须给函数赋予上面的数据和我们希望最佳拟合数据的多项式的阶次或度。如果我们选择n=1作为阶次,得到最简单的线性近似。通常称为线性回归。相反,如果我们选择n=2作为阶次,得到一个2阶多项式。现在,我们选择一个2阶多项式。 ?n=2;%polyno mial order ?p=poly fit(x, y, n) p = -9.810820.1293-0.0317 polyfit的输出是一个多项式系数的行向量。其解是y= -9.8108x2+20.1293x-0.0317。为了将曲线拟合解与数据点比较,让我们把二者都绘成图。 ?xi=linspace(0, 1, 100);%x-axis data for plotting ?z=polyval(p, xi); 为了计算在xi数据点的多项式值,调用MATLAB的函数polyval。 ?plot(x, y, ' o ' , x, y, xi, z, ': ') 画出了原始数据x和y,用'o'标出该数据点,在数据点之间,再用直线重画原始数据,并用点' : '线,画出多项式数据xi和z。 ?xlabel('x '), y label('y=f(x) '), title('Second Order Curv e Fitting ') 将图作标志。这些步骤的结果表示于前面的图11.1中。

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实现插值法和曲线拟合电子教案

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插值与拟合实验报告材料

实用标准文档 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') 运行后得

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 曲面插值和拟合

Matlab 曲面插值和拟合 插值和拟合都是数据优化的一种方法,当实验数据不够多时经常需要用到这种方法来画图。在matlab中都有特定的函数来完成这些功能。 这两种方法的确别在于: 当测量值是准确的,没有误差时,一般用插值; 当测量值与真实值有误差时,一般用数据拟合。 插值: 对于一维曲线的插值,一般用到的函数yi=interp1(X,Y,xi,method) ,其中method包括nearst,linear,spline,cubic。 对于二维曲面的插值,一般用到的函数 zi=interp2(X,Y,Z,xi,yi,method),其中method也和上面一样,常用的是 cubic。 拟合: 对于一维曲线的拟合,一般用到的函数p=polyfit(x,y,n)和yi=polyval(p,xi),这个是最常用的最小二乘法的拟合方法。 对于二维曲面的拟合,有很多方法可以实现,但是我这里自己用的是Spline Toolbox里面的函数功能。具体使用方法可以看后面的例子。 对于一维曲线的插值和拟合相对比较简单,这里就不多说了,对于二维曲面的插值和拟合还是比较有意思的,而且正好胖子有些数据想让我帮忙处理一下,就这个机会好好把二维曲面的插值和拟合总结归纳一 下,下面给出实例和讲解。 原始数据 x=[1:1:15]; y=[1:1:5]; z=[0.2 0.24 0.25 0.26 0.25 0.25 0.25 0.26 0.26 0.29 0.25 0.29; 0.27 0.31 0.3 0.3 0.26 0.28 0.29 0.26 0.26 0.26 0.26 0.29; 0.41 0.41 0.37 0.37 0.38 0.35 0.34 0.35 0.35 0.34 0.35 0.35; 0.41 0.42 0.42 0.41 0.4 0.39 0.39 0.38 0.36 0.36 0.36 0.36; 0.3 0.36 0.4 0.43 0.45 0.45 0.51 0.42 0.4 0.37 0.37 0.37]; z是一个5乘12的矩阵。 直接用原始数据画图如下: surf(x,y,z) title(’Original data Plot’); xlabel(’X'), ylabel(’Y'), zlabel(’Z'), colormap, colorbar; axis([0 15 0 6 0.15 0.55])

Matlab 曲面插值和拟合

得用拟合或插值。 常用的拟合有多项式拟合POLYFIT 插值有INTERP1,SPLINE,LAGR1等。。。 在Matlab中,用于曲线和曲面平滑的方法与函数很多,曲线平滑可用smooth和smoothts 等,三维数据可用smooth3,另外样条工具箱中也有不少可用于平滑数据的函数,如三次样条csaps和B样条spaps等。 matlab中三维作图功能总结2007-12-09 11:29plot3 画三维坐标中的点,连线,但只能顺序连接。 surf(X,Y,Z) 用X和Y定义x-y坐标网格,Z定义网格上每一点的高度,来生成三维曲面。如:[X,Y,Z] = peaks(30);surf(X,Y,Z) mesh,和surf一样,只不过生成的是网格。 surface 用法也一样。 fill3 只能生成平面。重点在色彩。 [X,Y,Z]=meshgrid(1:3,1:3,1:5) 生成3*3*5的三维网格,X,Y,Z都是3*3*5三维矩阵。 这只是生成坐标网格,还需要一个V(X,Y,Z)定义图形。 ndgrid 生成三维以上网格时用。 smooth3 作用于体数据,使光滑 isosurface X,Y,Z如meshgrid的定义。 V中元素为1则表示存在,即要显示。但要连成片的1才会显示。 V中元素如a>1时,表示要显示的这个点离上方的网格距离是单位距离的1/a 圆滑程度由isovalue决定,0.9999是最硬,越接近0越圆滑。可同时配合isocaps. isocaps 生成并显示图形与坐标系交界处的平面。 patch 接收isosuface返回的参数,生成图形。

Matlab 曲面插值和拟合 附录: Matlab 样条工具箱(Spline ToolBox)【信息来源教师博客】 Matlab样条工具箱中的函数提供了样条的建立,操作,绘制等功能; 一. 样条函数的建立 第一步是建立一个样条函数,曲线或者曲面。这里的样条函数,根据前缀,分为4类: cs* 三次样条 pp* 分段多项式样条,系数为t^n的系数 sp* B样条, 系数为基函数B_n^i(t)的系数 rp* 有理B样条 二. 样条操作 样条操作包括:函数操作:求值,算术运算,求导求积分等等 节点操作:主要是节点重数的调节,设定,修改等等 附:样条工具箱函数 1. 三次样条函数 csapi 插值生成三次样条函数 csape 生成给定约束条件下的三次样条函数 csaps 平滑生成三次样条函数 cscvn 生成一条内插参数的三次样条曲线 getcurve 动态生成三次样条曲线 2. 分段多项式样条函数

matlab实现插值法和曲线拟合

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

(1) I h (x k )=y k ,(k=0,1,…,n) ; (2) 在每个区间[x k ,x k+1 ] 上,I h (x)是个一次函数。 易知,I h (x)是个折线函数, 在每个区间[x k ,x k+1 ]上,(k=0,1,…,n) k 1k k 1k 1 k k 1k k k ,1) () ()(x x x x x f x x x x x f x L --+--=++++, 于是, I h (x)在[a,b]上是连续的,但其一阶导数是不连续的。 3拉格朗日插值多项式算法 ○1输入,(0,1,2,,)i i x y i n = ,令0)(=x L n 。 ○ 2对0,1,2,,i n = ,计算 0,()()/() n i j i j j j i l x x x x x -≠= --∏ ()()()n n i i L x L x l x y ←??+ 4分段线性插值算法 ○1输入(x k ,y k ),k=0,1,…,n; ○2计算k 1k k 1k 1 k k 1k k k ,1) () ()(x x x x x f x x x x x f x L --+--=++++ 5插值法和分段线性插值程序 按下列数据分别作五次插值和分段线性插值,画出两条插值曲线以及给定数据点。求x 1=0.32, functionlagrint xi=[0.32,0.55,0.68]; %xi=[0.2:0.001:0.8]; x=[0.3,0.42,0.50,0.58,0.66,0.72]; y=[1.04403,1.08462,1.11803,1.15603,1.19817,1.23223]; L=zeros(size(y)); m=length(xi); fori=1:m dxi=xi(i)-x; L(1)=prod(dxi(2:6))/prod(x(1)-x(2:6)); L(6)=prod(dxi(1:6-1))/prod(x(6)-x(1:6-1)); for j=2:6-1

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); holdon,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); holdon,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') 运行后得

相关文档