最小二乘法的matlab程序是怎样的?

最小二乘法的matlab程序是怎样的?,第1张

我给你个最小二乘拟合的例子自己体会一下:\x0d\x0a下面给定的是乌鲁木齐最近1个月早晨7:00左右(新疆时间)的天气预报所得到的温度数据表,按照数据找出任意次曲线拟合方程和它的图像。\x0d\x0a(2008年10月26~11月26)\x0d\x0a天数 1 2 3 4 5 6 7 8 9 10\x0d\x0a温度 9 10 11 12 13 14 13 12 11 9\x0d\x0a天数 11 12 13 14 15 16 17 18 19 20\x0d\x0a温度 10 11 12 13 14 12 11 10 9 8\x0d\x0a天数 21 22 23 24 25 26 27 28 29 30\x0d\x0a温度 7 8 9 11 9 7 6 5 3 1\x0d\x0a\x0d\x0a下面应用Matlab编程对上述数据进行最小二乘拟合\x0d\x0aMatlab程序代码:\x0d\x0ax=[1:1:30]\x0d\x0ay=[9,10,11,12,13,14,13,12,11,9,10,11,12,13,14,12,11,10,9,8,7,8,9,11,9,7,6,5,3,1]\x0d\x0aa1=polyfit(x,y,3)%三次多项式拟合%\x0d\x0aa2= polyfit(x,y,9) %九次多项式拟合%\x0d\x0aa3= polyfit(x,y,15)%十五次多项式拟合%\x0d\x0ab1= polyval(a1,x)\x0d\x0ab2= polyval(a2,x)\x0d\x0ab3= polyval(a3,x)\x0d\x0ar1= sum((y-b1).^2) %三次多项式误差平方和%\x0d\x0ar2= sum((y-b2).^2) %九次次多项式误差平方和%\x0d\x0ar3= sum((y-b3).^2) %十五次多项式误差平方和%\x0d\x0aplot(x,y,'*') %用*画出x,y图像%\x0d\x0ahold on\x0d\x0aplot(x,b1, 'r') %用红色线画出x,b1图像%\x0d\x0ahold on\x0d\x0aplot(x,b2, 'g') %用绿色线画出x,b2图像%\x0d\x0ahold on\x0d\x0aplot(x,b3, 'b:o') %用蓝色o线画出x,b3图像%

matlab中用最小二乘拟合的常用函数有polyfit(多项式拟合)、nlinfit(非线性拟合)以及regress(多元线性回归)。自变量有2个或以上时,应变量一个,可以使用的有nlinfit和regress,线性时用regress,非线性时用nlinfit。对于进阶matlab使用者还有更多的选择,如拟合工具箱、fit函数、interp系列插值拟合等等。

具体介绍一下regress

regress虽然名义上只能做线性回归但是可以把x^2等非线性量作为一个额外自变量做计算,因此在一些特殊情况下也可以做非线性拟合。

以matlab自带的数据为样本,示例代码如下:(%后面的是注释)

clcclear

load carsmall%此数据样本matlab自带

x=Weighty=Horsepowerz=MPG%取这3个变量作为拟合对象,x、y自变量,z应变量

plot3(x,y,z,'p')

hold on

c=ones(length(x),1)

b=regress(z,[x,y,c])%纯线性拟合 模型z=b(1)*x+b(2)*y+b(3)

[X,Y]=meshgrid(linspace(1500,5000,10),linspace(40,240,10))

C=ones(10)

mesh(X,Y,b(1)*X+b(2)*Y+b(3)*C)

grid on

b=regress(z,[x.^2,y.^2,x.*y,x,y,c])%添加非线性项进行拟合

figure

plot3(x,y,z,'p')

hold on

mesh(X,Y,b(1)*X.^2+b(2)*Y.^2+b(3)*X.*Y+b(4)*X+b(5)*Y+b(6)*C)

grid on

曲线拟合\x0d\x0a已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近给定的值,这一过程称为曲线拟合。最常用的曲线拟合方法是最小二乘法,该方法是寻找函数使得最小。\x0d\x0aMATLAB函数:p=polyfit(x,y,n)\x0d\x0a[p,s]= polyfit(x,y,n)\x0d\x0a说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。x必须是单调的。矩阵s用于生成预测值的误差估计。(见下一函数polyval)\x0d\x0a多项式曲线求值函数:polyval()\x0d\x0a调用格式: y=polyval(p,x)\x0d\x0a[y,DELTA]=polyval(p,x,s)\x0d\x0a说明:y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。\x0d\x0a[y,DELTA]=polyval(p,x,s) 使用polyfit函数的选项输出s得出误差估计YDELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。则YDELTA将至少包含50%的预测值。\x0d\x0a\x0d\x0a练习:如下给定数据的拟合曲线,x=[0.5,1.0,1.5,2.0,2.5,3.0],\x0d\x0ay=[1.75,2.45,3.81,4.80,7.00,8.60]。\x0d\x0a解:MATLAB程序如下:\x0d\x0ax=[0.5,1.0,1.5,2.0,2.5,3.0]\x0d\x0ay=[1.75,2.45,3.81,4.80,7.00,8.60]\x0d\x0ap=polyfit(x,y,2)\x0d\x0ax1=0.5:0.05:3.0\x0d\x0ay1=polyval(p,x1)\x0d\x0aplot(x,y,'*r',x1,y1,'-b')\x0d\x0a计算结果为:\x0d\x0ap =0.5614 0.82871.1560\x0d\x0a即所得多项式为y=0.5614x^2+0.08287x+1.15560\x0d\x0a===========================================================================\x0d\x0a===========================================================================\x0d\x0apolyfit函数是matlab中用于进行曲线拟合的一个函数。曲线拟合:已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近给定的值。\x0d\x0a解释1用法 polyfit(x,y,n ) 用多项式求过已知点的表达式,其中x为源数据点对应的横坐标,可为行向量、矩阵,y为源数据点对应的纵坐标,可为行向量、矩阵,n为你要拟合的阶数,一阶直线拟合,二阶抛物线拟合,并非阶次越高越好,看拟合情况matlab polyfit 做出来的值从左到右表示从高次到低次的多项式系数给个例子一看就知道了x = (0: 0.1: 2.5)'y = erf(x)p = polyfit(x,y,6)p =0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004则y=0.0084x^6-0.0983x^5+0.4217x^4-0.7435x^3+0.1471x^2+1.1064x+0.0004解释2:MATLAB软件提供了基本的曲线拟合函数的命令.多项式函数拟合:a=polyfit(xdata,ydata,n)其中n表示多项式的最高阶数,xdata,ydata为将要拟合的数据,它是用数组的方式输入.输出参数a为拟合多项式y=a1xn+...+anx+a n+1的系数多项式在x处的值y可用下面程序计算.y=polyval(a,x,m)线性:m=1, 二次:m=2, ?polyfit的输出是一个多项式系数的行向量。为了计算在xi数据点的多项式值,调用MATLAB的函数polyval。例:x=0:0.1:1y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.489.30 11.2] \x0d\x0apolyfit用法示例结果\x0d\x0aA=polyfit(x,y,2)z=polyval(A,x)plot(x,y,'r*',x,z,'b')释疑:在不少书中和论坛上,polyfit被误写作“ployfit”,使得很多初学者误解,认为自己安装的MATLAB软件出错,无法找到这样的函数。只要注意拼写正确即可。同样地,polyval函数也易被误写为“ployval”。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7769015.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存