Ⅰ 如何根据一组数据进行曲线拟合
您好,这样的:一、
单一变量的曲线逼近
matlab有一个功能强大的曲线拟合工具箱
cftool
,使用方便,能实现多种类型的线性、非线
性曲线拟合。下面结合我使用的
matlab
r2007b
来简单介绍如何使用这个工具箱。
假设我们要拟合的函数形式是
y=a*x*x
+
b*x,
且a>0,b>0
。
1、在命令行输入数据:
》x=[110.3323
148.7328
178.064
202.8258033
224.7105
244.5711
262.908
280.0447
296.204
311.5475]
》y=[5
10
15
20
25
30
35
40
45
50]
2、启动曲线拟合工具箱
》cftool
3、进入曲线拟合工具箱界面“curve
fitting
tool”
(1)点击“data”按钮,弹出“data”窗口;
(2)利用x
data和y
data的下拉菜单读入数据x,y,可修改数据集名“data
set
name”,然
后点击“create
data
set”按钮,退出“data”窗口,返回工具箱界面,这时会自动画出数
据集的曲线图;
(3)点击“fitting”按钮,弹出“fitting”窗口;
(4)点击“new
fit”按钮,可修改拟合项目名称“fit
name”,通过“data
set”下拉菜单
选择数据集,然后通过下拉菜单“type
of
fit”选择拟合曲线的类型,工具箱提供的拟合类
型有:
custom
equations:用户自定义的函数类型
exponential:指数逼近,有2种类型,
a*exp(b*x)
、
a*exp(b*x)
+
c*exp(d*x)
fourier:傅立叶逼近,有7种类型,基础型是
a0
+
a1*cos(x*w)
+
b1*sin(x*w)
gaussian:高斯逼近,有8种类型,基础型是
a1*exp(-((x-b1)/c1)^2)
interpolant:插值逼近,有4种类型,linear、nearest
neighbor、cubic
spline、shape-
preserving
polynomial:多形式逼近,有9种类型,linear
~、quadratic
~、cubic
~、4-9th
degree
~
power:幂逼近,有2种类型,a*x^b
、a*x^b
+
c
rational:有理数逼近,分子、分母共有的类型是linear
~、quadratic
~、cubic
~、4-5th
degree
~;此外,分子还包括constant型
smoothing
spline:平滑逼近(翻译的不大恰当,不好意思)
sum
of
sin
functions:正弦曲线逼近,有8种类型,基础型是
a1*sin(b1*x
+
c1)
weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b)
选择好所需的拟合曲线类型及其子类型,并进行相关设置:
——如果是非自定义的类型,根据实际需要点击“fit
options”按钮,设置拟合算法、修改
待估计参数的上下限等参数;
——如果选custom
equations,点击“new”按钮,弹出自定义函数等式窗口,有“linear
equations线性等式”和“general
equations构造等式”两种标签。
在本例中选custom
equations,点击“new”按钮,选择“general
equations”标签,输入函
数类型y=a*x*x
+
b*x,设置参数a、b的上下限,然后点击ok。
Ⅱ Excel 两列数据如何拟合(线性、指数或多项式)
根据数据画图,添加趋势线 。看一下趋势线方程。
Ⅲ 知道一组数据,如何用matlab进行三次样条函数拟合
如下:
function
fit_tulun
%多项式拟合方式
x=linspace(0,4*pi,6);
y_jingque=sin(x);
%决定稀疏样本点数据
p_poly=polyfit(x,y_jingque,5);
x_poly_fit=linspace(0,4*pi,100);
y_poly_fit=polyval(p_poly,x_poly_fit);
%三次样条拟合方式
sp=csapi(x,y_jingque);
%求三次样条函数的导数.
s_diff=fnder(sp,1);
plot(x_poly_fit,y_poly_fit,'ko',x_poly_fit,y_poly_fit,'b:')
%plot(x_poly_fit,y_poly_fit,'b:')
hold
on
fnplt(sp,'r')
fnplt(s_diff,'c')
x1=linspace(0,4*pi,200);
plot(x1,sin(x1),'m','linewidth',1.8)
legend('多项式拟合样本点','多项式拟合曲线','三次样条拟合曲线','三次样条导数曲线','正弦曲线精确图形').
Ⅳ 股票直线拟合是什么意思
就是针对某段行情,找到一条直线,使得这段行情在该线附近振荡。
如果严格说的话,假设一段行情从t0开始,到T结束,时间单位是dt,我们把股票行情记为f(t), t是时间。而直线就可以表示为line = a t, a是斜率,t是时间。
目的就是找到一个最好的a来拟合f(t):
即 min {SUM_t0^T (f(t)-at)^2}
Ⅳ 怎么用B样条拟合离散的数据点之后,得到相应的函数公式请高手解答啊,多谢
使用p次B样条对数据点进行插值或拟合,得到的函数的形式一般可以记为y=F(x)=\sum_{i=1}^n{N_{i,p}(x)c_i},其中n由自己给定。系数c_i的值由你使用的插值或者拟合的方法来确定。
由于B样条基函数N_{i,p}(x)是关于x的非线性函数,所以F(x)是关于x的非线性函数,对于给定的x,代入上式即可得到y,但是对于给定的y,需要求解y=F(x)这个非线性方程才能得到x。
求解这个非线性方程的计算复杂度由样条次数p决定,从理论上讲,p次多项式的零点最多有p个,因此上述非线性方程的解最多有p个。
求解这个非线性方程的算法可以参考数值分析中列出的非线性方程解法,需要具体问题具体分析,没有一种能找出所有解的简便又万能的方法。
参考资料:《数值分析》(第3版),北京航空航天大学出版社出版。
Ⅵ 谁会B样条拟合
clc;clear;
x=[0.3589
2.5120
8.9713
14.7129
21.1722
34.0909
41.0167
42.9545
45.5383
48.1220
53.2895
55.8732
55.2273
56.5191
59.1029
61.0407
64.9163
70.7297
72.0215
77.1890
81.7105
86.8780
90.7536
97.2129
101.7344
110.1316
110.7775
114.6531
119.8206
126.9258
129.5096
154.0550
159.2225
161.1603
169.5574
172.1411
171.4952
177.9545
182.4761
190.8732
197.3325
218.0024
219.9402
221.2321
223.1699
227.0455
230.9211
234.1507
235.4426
238.0263
240.6100
243.1938
248.3612
249.6531
252.2368
254.1746
250.2990
254.8206
254.8206
254.1746
254.1746];
y=[131.2500
31.2500
31.2500
43.7500
43.7500
31.2500
25.8333
37.5000
32.5000
39.1667
32.5000
49.1667
2.5000
30.8333
20.8333
29.1667
24.1667
17.5000
32.5000
17.5000
14.1667
10.8333
20.8333
10.8333
7.5000
20.8333
2.5000
22.5000
9.1667
14.1667
22.5000
15.8333
12.5000
19.1667
19.1667
5.8333
19.1667
10.8333
15.8333
15.8333
10.8333
20.8333
32.5000
0.8333
10.8333
10.8333
25.8333
14.1667
24.1667
24.1667
50.8333
37.5000
109.1667
104.1667
204.1667
264.1667
169.1667
295.8333
315.8333
334.1667
352.5000];
knots1=9;K1=3;
sp1=spap2(knots1,K1,x,y)
knots2=9;K2=4;
sp2=spap2(knots2,K2,x,y)
plot(x,y,'o')
holdon
fnplt(sp1,'r')
fnplt(sp2,'b')
holdoff
图形见我的博客:
http://hi..com/chemical%5Fengineering/album/item/a6cb6b60b936c964eaf8f871.html
或
Ⅶ b样条函数和插值b样条函数的区别
看看这个能不能帮到你:Matlab中插值函数汇总和使用说明:MATLAB中的插值函数为interp1,其调用格式为:yi=interp1(x,y,xi,'method')其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量,'method'表示采用的插值方法,MATLAB提供的插值方法有几种:'nearest'是最邻近插值,'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=[129910182428272520181513];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)命令1interp1功能一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数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’:在MATLAB5.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>>x=0:10;y=x.*sin(x);>>xx=0:.25:10;yy=interp1(x,y,xx);>>plot(x,y,'kd',xx,yy)例2>>year=1900:10:2010;>>proct=[75.99591.972105.711123.203131.669150.697179.323203.212226.505249.633256.344267.893];>>p1995=interp1(year,proct,1995)>>x=1900:1:2010;>>y=interp1(year,proct,x,'pchip');>>plot(year,proct,'o',x,y)插值结果为:p1995=252.9885命令2interp2功能二维数据内插值(表格查找)格式(1)ZI=interp2(X,Y,Z,XI,YI)返回矩阵ZI,其元素包含对应于参量XI与YI(可以是向量、或同型矩阵)的元素,即Zi(i,j)←[Xi(i,j),yi(i,j)]。用户可以输入行向量和列向量Xi与Yi,此时,输出向量Zi与矩阵meshgrid(xi,yi)是同型的。同时取决于由输入矩阵X、Y与Z确定的二维函数Z=f(X,Y)。参量X与Y必须是单调的,且相同的划分格式,就像由命令meshgrid生成的一样。若Xi与Yi中有在X与Y范围之外的点,则相应地返回nan(NotaNumber)。(2)ZI=interp2(Z,XI,YI)缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一种情形进行计算。(3)ZI=interp2(Z,n)作n次递归计算,在Z的每两个元素之间插入它们的二维插值,这样,Z的阶数将不断增加。interp2(Z)等价于interp2(z,1)。(4)ZI=interp2(X,Y,Z,XI,YI,method)用指定的算法method计算二维插值:’linear’:双线性插值算法(缺省算法);’nearest’:最临近插值;’spline’:三次样条插值;’cubic’:双三次插值。例3:>>[X,Y]=meshgrid(-3:.25:3);>>Z=peaks(X,Y);>>[XI,YI]=meshgrid(-3:.125:3);>>ZZ=interp2(X,Y,Z,XI,YI);>>surfl(X,Y,Z);holdon;>>surfl(XI,YI,ZZ+15)>>axis([-33-33-520]);shadingflat>>holdoff例4:>>years=1950:10:1990;>>service=10:10:30;>>wage=[150.697199.592187.625179.323195.072250.287203.212179.092322.767226.505153.706426.730249.633120.281598.243];>>w=interp2(service,years,wage,15,1975)插值结果为:w=190.6288命令3interp3功能三维数据插值(查表)格式(1)VI=interp3(X,Y,Z,V,XI,YI,ZI)找出由参量X,Y,Z决定的三元函数V=V(X,Y,Z)在点(XI,YI,ZI)的值。参量XI,YI,ZI是同型阵列或向量。若向量参量XI,YI,ZI是不同长度,不同方向(行或列)的向量,这时输出参量VI与Y1,Y2,Y3为同型矩阵。其中Y1,Y2,Y3为用命令meshgrid(XI,YI,ZI)生成的同型阵列。若插值点(XI,YI,ZI)中有位于点(X,Y,Z)之外的点,则相应地返回特殊变量值NaN。(2)VI=interp3(V,XI,YI,ZI)缺省地,X=1:N,Y=1:M,Z=1:P,其中,[M,N,P]=size(V),再按上面的情形计算。(3)VI=interp3(V,n)作n次递归计算,在V的每两个元素之间插入它们的三维插值。这样,V的阶数将不断增加。interp3(V)等价于interp3(V,1)。(4)VI=interp3(,method)%用指定的算法method作插值计算:‘linear’:线性插值(缺省算法);‘cubic’:三次插值;‘spline’:三次样条插值;‘nearest’:最邻近插值。说明在所有的算法中,都要求X,Y,Z是单调且有相同的格点形式。当X,Y,Z是等距且单调时,用算法’*linear’,’*cubic’,’*nearest’,可得到快速插值。例5>>[x,y,z,v]=flow(20);>>[xx,yy,zz]=meshgrid(.1:.25:10,-3:.25:3,-3:.25:3);>>vv=interp3(x,y,z,v,xx,yy,zz);>>slice(xx,yy,zz,vv,[69.5],[12],[-2.2]);shadinginterp;colormapcool命令4interpft功能用快速Fourier算法作一维插值格式(1)y=interpft(x,n)返回包含周期函数x在重采样的n个等距的点的插值y。若length(x)=m,且x有采样间隔dx,则新的y的采样间隔dy=dx*m/n。注意的是必须n≥m。若x为一矩阵,则按x的列进行计算。返回的矩阵y有与x相同的列数,但有n行。(2)y=interpft(x,n,dim)沿着指定的方向dim进行计算命令5griddata功能数据格点格式(1)ZI=griddata(x,y,z,XI,YI)用二元函数z=f(x,y)的曲面拟合有不规则的数据向量x,y,z。griddata将返回曲面z在点(XI,YI)处的插值。曲面总是经过这些数据点(x,y,z)的。输入参量(XI,YI)通常是规则的格点(像用命令meshgrid生成的一样)。XI可以是一行向量,这时XI指定一有常数列向量的矩阵。类似地,YI可以是一列向量,它指定一有常数行向量的矩阵。(2)[XI,YI,ZI]=griddata(x,y,z,xi,yi)返回的矩阵ZI含义同上,同时,返回的矩阵XI,YI是由行向量xi与列向量yi用命令meshgrid生成的。(3)[XI,YI,ZI]=griddata(.,method)用指定的算法method计算:‘linear’:基于三角形的线性插值(缺省算法);‘cubic’:基于三角形的三次插值;‘nearest’:最邻近插值法;‘v4’:MATLAB4中的griddata算法。命令6spline功能三次样条数据插值格式(1)yy=spline(x,y,xx)对于给定的离散的测量数据x,y(称为断点),要寻找一个三项多项式y=p(x),以逼近每对数据(x,y)点间的曲线。过两点(xi,yi)和(xi+1,yi+1)只能确定一条直线,而通过一点的三次多项式曲线有无穷多条。为使通过中间断点的三次多项式曲线具有唯一性,要增加两个条件(因为三次多项式有4个系数):a.三次多项式在点(xi,yi)处有:p¢i(xi)=p¢i(xi);b.三次多项式在点(xi+1,yi+1)处有:p¢i(xi+1)=pi¢(xi+1);c.p(x)在点(xi,yi)处的斜率是连续的(为了使三次多项式具有良好的解析性,加上的条件);d.p(x)在点(xi,yi)处的曲率是连续的;对于第一个和最后一个多项式,人为地规定如下条件:①.p¢1¢(x)=p¢2¢(x)②.p¢n¢(x)=p¢n¢-1(x)上述两个条件称为非结点(not-a-knot)条件。综合上述内容,可知对数据拟合的三次样条函数p(x)是一个分段的三次多项式:ïïîïïí죣££££=nnn+1223112p(x)xxxp(x)xxxp(x)xxxp(x)LLLL其中每段pi(x)都是三次多项式。该命令用三次样条插值计算出由向量x与y确定的一元函数y=f(x)在点xx处的值。若参量y是一矩阵,则以y的每一列和x配对,再分别计算由它们确定的函数在点xx处的值。则yy是一阶数为length(xx)*size(y,2)的矩阵。(2)pp=spline(x,y)返回由向量x与y确定的分段样条多项式的系数矩阵pp,它可用于命令ppval、unmkpp的计算。例6对离散地分布在y=exp(x)sin(x)函数曲线上的数据点进行样条插值计算:>>x=[024581212.817.219.920];y=exp(x).*sin(x);>>xx=0:.25:20;>>yy=spline(x,y,xx);>>plot(x,y,'o',xx,yy)命令7interpn功能n维数据插值(查表)格式(1)VI=interpn(X1,X2,,,Xn,V,Y1,Y2,?,Yn)%返回由参量X1,X2,…,Xn,V确定的n元函数V=V(X1,X2,…,Xn)在点(Y1,Y2,…,Yn)处的插值。参量Y1,Y2,…,Yn是同型的矩阵或向量。若Y1,Y2,…,Yn是向量,则可以是不同长度,不同方向(行或列)的向量。它们将通过命令ndgrid生成同型的矩阵,再作计算。若点(Y1,Y2,…,Yn)中有位于点(X1,X2,…,Xn)之外的点,则相应地返回特殊变量NaN。VI=interpn(V,Y1,Y2,?,Yn)%缺省地,X1=1:size(V,1),X2=1:size(V,2),…,Xn=1:size(V,n),再按上面的情形计算。VI=interpn(V,ntimes)%作ntimes次递归计算,在V的每两个元素之间插入它们的n维插值。这样,V的阶数将不断增加。interpn(V)等价于interpn(V,1)。VI=interpn(?,method)%用指定的算法method计算:‘linear’:线性插值(缺省算法);‘cubic’:三次插值;‘spline’:三次样条插值法;‘nearest’:最邻近插值算法。命令8meshgrid功能生成用于画三维图形的矩阵数据。格式[X,Y]=meshgrid(x,y)将由向量x,y(可以是不同方向的)指定的区域[min(x),max(x),min(y),max(y)]用直线x=x(i),y=y(j)(i=1,2,…,length(x),j=1,2,…,length(y))进行划分。这样,得到了length(x)*length(y)个点,这些点的横坐标用矩阵X表示,X的每个行向量与向量x相同;这些点的纵坐标用矩阵Y表示,Y的每个列向量与向量y相同。其中X,Y可用于计算二元函数z=f(x,y)与三维图形中xy平面矩形定义域的划分或曲面作图。[X,Y]=meshgrid(x)%等价于[X,Y]=meshgrid(x,x)。[X,Y,Z]=meshgrid(x,y,z)%生成三维阵列X,Y,Z,用于计算三元函数v=f(x,y,z)或三维容积图。例7[X,Y]=meshgrid(1:3,10:14)计算结果为:X=123123123123123Y=命令9ndgrid功能生成用于多维函数计算或多维插值用的阵列格式[X1,X2,…,Xn]=ndgrid(x1,x2,…,xn)%把通过向量x1,x2,x3…,xn指定的区域转换为数组x1,x2,x3,…,xn。这样,得到了length(x1)*length(x2)*…*length(xn)个点,这些点的第一维坐标用矩阵X1表示,X1的每个第一维向量与向量x1相同;这些点的第二维坐标用矩阵X2表示,X2的每个第二维向量与向量x2相同;如此等等。其中X1,X2,…,Xn可用于计算多元函数y=f(x1,x2,…,xn)以及多维插值命令用到的阵列。[X1,X2,…,Xn]=ndgrid(x)%等价于[X1,X2,…,Xn]=ndgrid(x,x,…,x)命令10table1功能一维查表格式Y=table1(TAB,X0)%返回用表格矩阵TAB中的行线性插值元素,对X0(TAB的第一列查找X0)进行线性插值得到的结果Y。矩阵TAB是第一列包含关键值,而其他列包含数据的矩阵。X0中的每一元素将相应地返回一线性插值行向量。矩阵TAB的第一列必须是单调的。例8>>tab=[(1:4)'hilb(4)]>>y=table1(tab,[12.33.64])查表结果为:>>tab=[(1:4)'hilb(4)]>>y=table1(tab,[12.33.64])
Ⅷ matlab中怎么用b样条曲线拟合
三次拟合可以分别进行,结果y1 y2 y3分别保存下来,最后一起画图: plot(x, y1, x, y2, x, y3) 这样就可以同时画出三条曲线了。
Ⅸ 什么叫数据拟合
插值和拟合都是函数逼近或者数值逼近的重要组成部分
他们的共同点都是通过已知一些离散点集M上的约束,求取一个定义
在连续集合S(M包含于S)的未知连续函数,从而达到获取整体规律的
目的,即通过"窥几斑"来达到"知全豹"。
简单的讲,所谓拟合是指已知某函数的若干离散函数值{f1,f2,…,fn},通
过调整该函数中若干待定系数f(λ1, λ2,…,λ3), 使得该函数与已知点集的
差别(最小二乘意义)最小。如果待定函数是线性,就叫线性拟合或者
线性回归(主要在统计中),否则叫作非线性拟合或者非线性回归。表
达式也可以是分段函数,这种情况下叫作样条拟合。
而插值是指已知某函数的在若干离散点上的函数值或者导数信息,通
过求解该函数中待定形式的插值函数以及待定系数,使得该函数在给
定离散点上满足约束。插值函数又叫作基函数,如果该基函数定义在
整个定义域上,叫作全域基,否则叫作分域基。如果约束条件中只有
函数值的约束,叫作Lagrange插值,否则叫作Hermite插值。
从几何意义上将,拟合是给定了空间中的一些点,找到一个已知形式
未知参数的连续曲面来最大限度地逼近这些点;而插值是找到一个(
或几个分片光滑的)连续曲面来穿过这些点。
具体插值拟合的计算参考下面回复:
1)Matlab中如何作线性拟合/线性回归/多元线性回归?
:#FangQ([email protected]),2002/6/21, BigGreen/MathTools #
即用y=a*x+b来拟合一组数据{{x1,y1},{x2,y2}…{xn,yn}}
matlab中使用polyfit
x=data(:,1);
y=data(:,2);
p=polyfit(x,y,1);
p(1)为斜率a,p(2)为截距b
多元线性回归即用y=a1*x1+a2*x2+..+am*xm来拟合数据点{x1i,x2i,…xmi,yi}
(i=1~n)
|x11,x21,…xm1|
A=|x12,x22,…xm2|
|…………… |
|x1n,x2n,…xmn|
Y={y1,y2,y3,…,yn}'
则系数{a1,a2,…,am}'=pinv(A)*Y
在matlab中使用
coeff=A\Y
则可以得到最小二乘意义上的拟合系数
matlab默认只提供了多项式拟合的函数polyfit,对于其他稍微简单
一点的拟合,如标准的指数、对数、高阶多项式拟合,都有解析公式,参见:
http://mathworld.wolfram.com/LeastSquaresFitting.html
对于更加复杂的非线性函数,建议使用Mathematica或者DataFit
Mathematica中提供了Fit[],以及
<< Statistics`NonlinearFit`
NonlinearFit[],NonlinearRegress[]
可以拟合任意复杂的表达式。
DataFit可以自定义拟合模型,适用于复杂系统的拟合。