Matlab直线拟合和平面拟合_精品文档Word文档下载推荐.doc
《Matlab直线拟合和平面拟合_精品文档Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《Matlab直线拟合和平面拟合_精品文档Word文档下载推荐.doc(6页珍藏版)》请在冰豆网上搜索。
);
%MakeXacolumnvector
Ycolv=y(:
%MakeYacolumnvector
Const=ones(size(Xcolv));
%Vectorofonesforconstantterm
Coeffs=[XcolvConst]\Ycolv;
%Findthecoefficients
m1=Coeffs
(1);
b1=Coeffs
(2);
%Tofitanotherfunctiontothisdata,simplychangethefirst
%matrixonthelinedefiningCoeffs
%Forexample,thiscodewouldfitaquadratic
%y=Coeffs
(1)*x^2+Coeffs
(2)*x+Coeffs(3)
%Coeffs=[Xcolv.^2XcolvConst]\Ycolv;
%Notethe.^beforetheexponentofthefirstterm
%Plottheoriginalpointsandthefittedcurve
figure
plot(x,y,'
ro'
)
holdon
x2=0:
0.01:
1;
y2=m1*x2+b1;
%Evaluatefittedcurveatmanypoints
plot(x2,y2,'
g-'
title(sprintf('
Non-noisydata:
y=%f*x+%f'
m1,b1))
%Determinecoefficientsfornoisylineyn=m2*x+b2
Yncolv=yn(:
%MakeYnacolumnvector
NoisyCoeffs=[XcolvConst]\Yncolv;
m2=NoisyCoeffs
(1);
b2=NoisyCoeffs
(2);
plot(x,yn,'
yn2=m2*x2+b2;
plot(x2,yn2,'
Noisydata:
m2,b2))
2、平面拟合matlab代码
y=rand(1,10);
z=(3-2*x-5*y)/4;
%Equationoftheplanecontaining
%(x,y,z)pointsis2*x+5*y+4*z=3
Zcolv=z(:
%MakeZacolumnvector
Coefficients=[XcolvYcolvConst]\Zcolv;
XCoeff=Coefficients
(1);
%Xcoefficient
YCoeff=Coefficients
(2);
CCoeff=Coefficients(3);
%constantterm
%Usingtheabovevariables,z=XCoeff*x+YCoeff*y+CCoeff
L=plot3(x,y,z,'
%Plottheoriginaldatapoints
set(L,'
Markersize'
2*get(L,'
))%Makingthecirclemarkerslarger
Markerfacecolor'
'
r'
)%Fillinginthemarkers
[xx,yy]=meshgrid(0:
0.1:
1,0:
1);
%Generatingaregulargridforplotting
zz=XCoeff*xx+YCoeff*yy+CCoeff;
surf(xx,yy,zz)%Plottingthesurface
Plottingplanez=(%f)*x+(%f)*y+(%f)'
XCoeff,YCoeff,CCoeff))
%Byrotatingthesurface,youcanseethatthepointslieontheplane
%Also,ifyoumultiplybothsidesoftheequationinthetitleby4,
%yougettheequationinthecommentonthethirdlineofthisexample
如何用matlab最小二乘法进行平面拟合
MATLAB软件提供了基本的曲线拟合函数的命令:
多项式函数拟合:
a=polyfit(xdata,ydata,n)
其中n表示多项式的最高阶数,xdata,ydata为要拟合的数据,它是用数组的方式输入。
输出参数a为拟合多项式y=a1xn+…+anx+an+1的系数a=[a1,…,an,an+1]。
多项式在x处的值y可用下面程序计算。
y=polyval(a,x)
一般的曲线拟合:
p=curvefit(‘Fun’p0,xdata,ydata)
其中Fun表示函数Fun(p,xdata)的M-文件,p0表示函数的初值。
curvefit命令的求解问题形式是:
min{p}sum{(Fun(p,xdata)-ydata).^2}
若要求解点x处的函数值可用程序f=Fun(p,x)计算。
例如已知函数形式y=ae-bx+ce–dx,并且已知数据点(xi,yi),i=1,2,…,n,要确定四个未知参数a,b,c,d。
使用curvefit命令,数据输入xdata=[x1,x2,…,xn];
ydata=[y1,y2,…,yn];
初值输入p0=[a0,b0,c0,d0];
并且建立函数y=ae-bx+ce–dx的M-文件(Fun.m)。
若定义p1=a,p2=b,p3=c,p4=d,则输出p=[p1,p2,p3,p4]。
引例求解:
t=[1:
16];
%数据输入
y=[46.488.49.289.59.79.861010.210.3210.4210.510.5510.5810.6];
plot(t,y,'
o'
)%画散点图
p=polyfit(t,y,2)(二次多项式拟合)
计算结果:
p=-0.04451.07114.3252%二次多项式的系数
从而得到某化合物的浓度y与时间t的拟合函数:
y=4.3252+1.0711t–0.0445t2
对函数的精度如何检测呢?
仍然以图形来检测,将散点与拟合曲线画在一个画面上。
xi=linspace(0,16,160);
yi=polyval(p,xi);
plot(x,y,'
xi,yi)
在MATLAB的NAGFoundationToolbox中也有一些曲面拟合函数,如e02daf,e02cf,e02def可分别求出矩形网格点数据、散点数据的最小平方误差双三次样条曲面拟合,e02def等可求出曲面拟合的函数值。
用matlab的regress命令进行平面拟合
(2011-08-1622:
00:
38)
转载▼
标签:
教育
分类:
数学软件
以少量数据为例
x=[15637]'
;
y=[29358]'
z=[435116]'
scatter3(x,y,z,'
filled'
即可将散点绘制出来
我们继续
X=[ones(5,1)xy];
//5为size(x)
b=regress(z,X)//拟合,其实是线性回归,但可以用来拟合平面。
regress命令还有其它用法,但一般这样就可以满足要求了。
于是显示出
b=
6.5642
-0.1269
-0.0381
这就表示z=6.5643-0.1269*x-0.0381*y是拟合出来的平面的方程
下面把它绘制出来
xfit=min(x):
max(x);
//注0.1表示数据的间隔
yfit=min(y):
max(y);
[XFIT,YFIT]=meshgrid(xfit,yfit);
//制成网格数据
ZFIT=b
(1)+b
(2)*XFIT+b(3)*YFIT;
mesh(XFIT,YFIT,ZFIT)
这样,图就出来啦
%rpq就是你的x,y,z
r=randi(10,20,1);
p=randi(10,20,1);
q=randi(10,20,1);
b=regress(r,[pq]);
scatter3(r,p,q,'
rfit=min(r):
1:
max(r);
pfit=min(p):
max(p);
[RFITPFIT]=meshgri