最小二乘法的多项式拟合matlab实现
基于MATLAB的最小二乘曲线拟合

基于MATLAB的最小二乘曲线拟合摘要:本文主要介绍了最小二乘曲线拟合方法的基本思路,并通过编制MATLAB程序对测量数据进行了一阶拟合和二阶拟合,实现了拟合多项式系数的求解。
关键词:曲线拟合最小二乘多项式拟合Least-Square Curve Fitting Method Based on MATLABSHI Xin1, SHI Sen2, HE Chang-zheng3(1. Beijing Global Information Application and Development Center, Beijing 100094; 2. Ericsson (China) Communications Company Ltd., Beijing 100102;3. Beijing HT Horizon Technology Service Co., Ltd., Beijing 100026)Abstract: Least-Square curve fitting method was introduced in this paper, and the measured data was fitted with the MATLAB program, which realized solving the polynomial coefficient.Key words: Curve fitting, Least-Square, Polynomial fitting1 引言在工程科学计算中经常要建立实验数据的数学模型。
给定函数的实验数据,需要用比较简单和合适的函数来逼近(或拟合)实验数据。
逼近离散数据的基本方法就是曲线拟合,常采用最小二乘拟合。
用MATLAB对实验数据进行最小二乘拟合,能较准确地标记实验数据点和绘出拟合曲线[1]。
2 最小二乘曲线拟合曲线拟合问题的数学描述是,已知一组(二维)数据, , 互不相同,寻求一个函数(曲线) ,使在某种准则下与所有数据点最为接近,即曲线拟合得最好。
matlab最小二乘法数据拟合函数详解

matlab最⼩⼆乘法数据拟合函数详解定义:最⼩⼆乘法(⼜称最⼩平⽅法)是⼀种数学优化技术。
它通过最⼩化误差的平⽅和寻找数据的最佳函数匹配。
利⽤最⼩⼆乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平⽅和为最⼩。
最⼩⼆乘法还可⽤于曲线拟合。
其他⼀些优化问题也可通过最⼩化能量或最⼤化熵⽤最⼩⼆乘法来表达。
最⼩⼆乘法原理:在我们研究两个变量(x,y)之间的相互关系时,通常可以得到⼀系列成对的数据(x1,y1.x2,y2... xm,ym);将这些数据描绘在x -y直⾓坐标系中,若发现这些点在⼀条直线附近,可以令这条直线⽅程如(式1-1)。
Yj= a0 + a1 X (式1-1),其中:a0、a1 是任意实数。
matlab中⽤最⼩⼆乘拟合的常⽤函数有polyfit(多项式拟合)、nlinfit(⾮线性拟合)以及regress(多元线性回归)。
⾃变量有2个或以上时,应变量⼀个,可以使⽤的有nlinfit和regress,线性时⽤regress,⾮线性时⽤nlinfit。
对于进阶matlab使⽤者还有更多的选择,如拟合⼯具箱、fit函数、interp系列插值拟合等等。
MATLAB中关于最⼩⼆乘法的函数主要有:help polyfit -- POLYFIT Fit polynomial to data.help lsqcurvefit -- LSQCURVEFIT solves non-linear least squares problems.help lsqnonlin -- LSQNONLIN solves non-linear least squares problems.help nlinfit -- NLINFIT Nonlinear least-squares regression.help regress -- REGRESS Multiple linear regression using least squares.help meshgrid -- MESHGRID X and Y arrays for 3-D plots.本⽂主要讲解的函数:polyfit,lsqcurvefit,lsqnonlin,regress1.多项式曲线拟合:polyfit1.1 常见拟合曲线直线: y=a0X+a1多项式:,⼀般次数不易过⾼2,3双曲线: y=a0/x+a1指数曲线: y=a*e^b1.2 matlab中函数P=polyfit(x,y,n)[P S mu]=polyfit(x,y,n)polyval(P,t):返回n次多项式在t处的值注:其中x y已知数据点向量分别表⽰横纵坐标,n为拟合多项式的次数,结果返回:P-返回n次拟合多项式系数从⾼到低依次存放于向量P中,S-包含三个值其中normr是残差平⽅和,mu-包含两个值 mean(x)均值,std(x)标准差。
Matlab最小二乘法曲线拟合

最小二乘法在曲线拟合中比较普遍。
拟合的模型主要有1.直线型2.多项式型3.分数函数型4.指数函数型5.对数线性型6.高斯函数型......一般对于LS问题,通常利用反斜杠运算“\”、fminsearch或优化工具箱提供的极小化函数求解。
在Matlab中,曲线拟合工具箱也提供了曲线拟合的图形界面操作。
在命令提示符后键入:cftool,即可根据数据,选择适当的拟合模型。
“\”命令1.假设要拟合的多项式是:y=a+b*x+c*x^2.首先建立设计矩阵X:X=[ones(size(x)) x x^2];执行:para=X\ypara中包含了三个参数:para(1)=a;para(2)=b;para(3)=c;这种方法对于系数是线性的模型也适应。
2.假设要拟合:y=a+b*exp(x)+cx*exp(x^2)设计矩阵X为X=[ones(size(x)) exp(x) x.*exp(x.^2)];para=X\y3.多重回归(乘积回归)设要拟合:y=a+b*x+c*t,其中x和t是预测变量,y是响应变量。
设计矩阵为X=[ones(size(x)) x t] %注意x,t大小相等!para=X\ypolyfit函数polyfit函数不需要输入设计矩阵,在参数估计中,polyfit会根据输入的数据生成设计矩阵。
1.假设要拟合的多项式是:y=a+b*x+c*x^2p=polyfit(x,y,2)然后可以使用polyval在t处预测:y_hat=polyval(p,t)polyfit函数可以给出置信区间。
[p S]=polyfit(x,y,2) %S中包含了标准差[y_fit,delta] = polyval(p,t,S) %按照拟合模型在t处预测在每个t处的95%CI为:(y_fit-1.96*delta, y_fit+1.96*delta)2.指数模型也适应假设要拟合:y = a+b*exp(x)+c*exp(x.?2)p=polyfit(x,log(y),2)fminsearch函数fminsearch是优化工具箱的极小化函数。
最小二乘法曲线拟合-原理及matlab实现

曲线拟合(curve-fitting ):工程实践中,用测量到的一些离散的数据},...2,1,0),,{(m i y x i i =求一个近似的函数)(x ϕ来拟合这组数据,要求所得的拟合曲线能最好的反映数据的基本趋势(即使)(x ϕ最好地逼近()x f ,而不必满足插值原则。
因此没必要取)(i x ϕ=i y ,只要使i i i y x -=)(ϕδ尽可能地小)。
原理:给定数据点},...2,1,0),,{(m i y x i i =。
求近似曲线)(x ϕ。
并且使得近似曲线与()x f 的偏差最小。
近似曲线在该点处的偏差i i i y x -=)(ϕδ,i=1,2,...,m 。
常见的曲线拟合方法:1.使偏差绝对值之和最小2.使偏差绝对值最大的最小3.使偏差平方和最小最小二乘法:按偏差平方和最小的原则选取拟合曲线,并且采取二项式方程为拟合曲线的方法,称为最小二乘法。
推导过程:1. 设拟合多项式为:kk x a x a a x +++=...)(10ϕ2. 各点到这条曲线的距离之和,即偏差平方和如下:3. 问题转化为求待定系数0a ...k a 对等式右边求i a 偏导数,因而我们得到了:.......4、 把这些等式化简并表示成矩阵的形式,就可以得到下面的矩阵:5. 将这个范德蒙得矩阵化简后可得到:6. 也就是说X*A=Y ,那么A = (X'*X)-1*X'*Y ,便得到了系数矩阵A ,同时,我们也就得到了拟合曲线。
MATLAB实现:MATLAB提供了polyfit()函数命令进行最小二乘曲线拟合。
调用格式:p=polyfit(x,y,n)[p,s]= polyfit(x,y,n)[p,s,mu]=polyfit(x,y,n)x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。
x 必须是单调的。
矩阵s包括R(对x进行QR分解的三角元素)、df(自由度)、normr(残差)用于生成预测值的误差估计。
最小二乘曲线拟合及Matlab实现

软件技术 Software Technique
文章编号:1006-1576(2005)03-0107-02
最小二乘曲线拟合及 Matlab 实现
O. I. Automation 2005, Vol. 24, No. 3
陈光,任志良,孙海柱 (海军工程大学 兵器工程系,湖北 武汉 430033)
m
m
∑
e
2 i
=
∑ (a 0
+ a1xi
+
L
+
a
n
x
n i
−
yi )2 =最小,则有:
i=0
i=0
∑ ∂ϕ
∂a j
=
m
2
x
j i
(
a
0
i=0
+ a1x i
+
L
+
a
n
x
n i
− yi) =
0
j=0,1,2,…,n
m
m
∑ ∑ 即:
(a
0
x
j i
+
a1x1i+ j
+L +
a
n
x
n+ i
j
)
=
x
j i
y
i
i=0
关键词:曲线拟合;最小二乘;Matlab;多项式拟合 中图分类号:TP391.9; TP301.6 文献标识码:A
Curve Fitting in Least-Square Method and Its Realization with Matlab
CHEN Guang, REN Zhi-liang, SUN Hai-zhu (Dept. of Weapon Engineering, Naval University of Engineering, Wuhan 430033, China)
最小二乘法matlab多项式拟合

最小二乘法拟合探究吴春晖(中国海洋大学海洋环境学院山东青岛 266100)摘要:本文的拟合对象为含多个变量的待定系数的多项式。
通过最小二乘法对多项式作出拟合,以向量矩阵的形式来解出待定的系数。
在matlab中,通过算法,写出具体的解法。
之后,先对最小二乘法的准确性作出检验,分析该方法在应对复杂情况的误差。
在检验该方法的可行性之后,对给定的变量值进行拟合与解题。
同时,本文将对基于Laguerre多项式的最小二乘法进行分析检验,关键词:最小二乘法拟合多变量 Laguerre多项式引言:在之前的计算方法中,在给出已知节点后,如果需要根据给出的节点来确定未知节点的值,我们需要运用插值。
在对插值的精准性进行分析后,我们发现不同插值方式的误差都极大,而且插值所得出的函数的特征由插值方式所决定,并不能反映具体的节点原来可能的规律与分布。
所以,拟合的方法相比插值而言,并不要求函数值在原节点处的值相等,却能在一定程度上反映原函数的规律。
在该文中,我们主要运用最小二乘法进行拟合。
目录第一章matlab最小二乘法拟合程序 (3)1.1 最小二乘法拟合的数学方法 (3)1.2 编写最小二乘法的matlab拟合程序 (3)1.2.1程序算法 (3)1.2.2 最小二乘法拟合的程序 (4)1.3程序的分析说明 (4)第二章最小二乘拟合法的检验及应用 (5)2.1 最小二乘法拟合的检验 (5)2.2最小二乘法拟合的实际应用 (7)第三章Laguerre多项式的最小二乘拟合 (8)3.1 算法与程序 (8)3.2检验与分析 (9)第四章最小二乘法拟合的分析总结 (11)第一章matlab 最小二乘法拟合程序1.1 最小二乘法拟合的数学方法最小二乘法拟合的算法如下:对于给定的一组数据(,)i i x y ,1,2,,i N =求t ()t N 次多项式jti j y a x ==∑使总误差21()j N ti i i j Q y a x ===-∑∑最小.由于Q 可以视作关于i a (0,1,2,,)i t =的多元函数,故上述拟合多项式的构造可归结为多元函数的极值问题.令0,0,1,2,,kQk ta ∂==∂得到1()0,0,1,2,,Ntjk ij ii i j y a xx k t==-==∑∑即有方程组0121011201t i t i it i i t i i i t t t t i i t i i i a N a x a x y a x a x a x x y a x a x a x x y++⎧+∑++∑=∑⎪∑+∑++∑=∑⎪⎨⎪⎪∑+∑++∑=∑⎩求解该正规方程组,即可得到最小二乘法的拟合系数。
matlab多项式的拟合

matlab多项式的拟合多项式拟合是一种常见的数学方法,用于将一组数据点通过最小二乘法拟合成一个多项式函数。
在MATLAB中,可以使用polyfit函数进行多项式拟合。
本文将介绍MATLAB中多项式拟合的基本原理和使用方法,并通过一个简单的例子演示其应用。
多项式拟合的目标是找到一个多项式函数,使其在给定的数据点上拟合效果最好。
这里的拟合效果可以使用拟合误差来度量,一般使用最小二乘法来求解最优拟合多项式的系数。
对于给定的数据集,假设有n+1个数据点,可以通过多项式函数表示为:f(x) = c0 + c1 * x + c2 * x^2 + ... + cn * x^n其中,c0,c1,...,cn是多项式的系数,n是多项式的次数。
多项式的次数决定了拟合函数的复杂度,过高的次数可能导致过拟合,而过低的次数可能导致欠拟合。
在实际应用中,需要根据问题的具体需求选取适当的次数。
在MATLAB中,可以使用polyfit函数进行多项式拟合。
其基本用法如下:```matlabp = polyfit(x, y, n)```其中,x为输入数据的自变量,y为对应的因变量,n为最优拟合多项式的次数。
函数的输出p是一个包含了多项式系数的向量。
通过polyval函数可以使用得到的系数来计算拟合函数在给定点的值:```matlabyfit = polyval(p, xfit)```下面通过一个示例来演示多项式拟合的过程。
假设有如下一组数据:x = [0, 1, 2, 3, 4, 5]y = [5.1, 4.9, 7.4, 12.2, 15.8, 19.9]我们希望找到一个拟合这些数据的二次多项式函数。
可以通过以下代码实现:```matlabx = [0, 1, 2, 3, 4, 5];y = [5.1, 4.9, 7.4, 12.2, 15.8, 19.9];p = polyfit(x, y, 2);yfit = polyval(p, x);plot(x, y, 'o', x, yfit)```运行上述代码,可以得到如下的拟合效果:从图中可以看出,二次多项式成功地拟合了原始数据。
最小二乘法曲线拟合的Matlab程序

最⼩⼆乘法曲线拟合的Matlab程序⽅便⼤家使⽤的最⼩⼆乘法曲线拟合的Matlab程序⾮常⽅便⽤户使⽤,直接按提⽰操作即可;这⾥我演⽰⼀个例⼦:(红⾊部分为⽤户输⼊部分,其余为程序运⾏的结果,结果图为Untitled.fig,Untitled2.fig) 请以向量的形式输⼊x,y.x=[1,2,3,4]y=[3,4,5,6]通过下⾯的交互式图形,你可以事先估计⼀下你要拟合的多项式的阶数,⽅便下⾯的计算.polytool()是交互式函数,在图形上⽅[Degree]框中输⼊阶数,右击左下⾓的[Export]输出图形回车打开polytool交互式界⾯回车继续进⾏拟合输⼊多项式拟合的阶数m = 4Warning: Polynomial is not unique; degree >= number of data points. > In polyfit at 72In zxecf at 64输出多项式的各项系数a = 0.0200000000000001a = -0.2000000000000008a = 0.7000000000000022a = 0.0000000000000000a = 2.4799999999999973输出多项式的有关信息 SR: [4x5 double]df: 0normr: 2.3915e-015Warning: Zero degrees of freedom implies infinite error bounds.> In polyval at 104In polyconf at 92In zxecf at 69观测数据拟合数据x y yh1.0000 3.0000 3.00002.0000 4.0000 4.00003 5 54.0000 6.0000 6.0000剩余平⽅和 Q = 0.000000相关指数 RR = 1.000000请输⼊你所需要拟合的数据点,若没有请按回车键结束程序.输⼊插值点x0 = 3输出插值点拟合函数值 y0 = 5.0000>>结果:untitled.figuntitled2.fig⼀些matlab优化算法代码的分享代码的⽬录如下:欢迎讨论1.约束优化问题:minRosen(Rosen梯度法求解约束多维函数的极值)(算法还有bug) minPF(外点罚函数法解线性等式约束) minGeneralPF(外点罚函数法解⼀般等式约束)minNF(内点罚函数法)minMixFun(混合罚函数法)minJSMixFun(混合罚函数加速法)minFactor(乘⼦法)minconPS(坐标轮换法)(算法还有bug)minconSimpSearch(复合形法)2.⾮线性最⼩⼆乘优化问题minMGN(修正G-N法)3.线性规划:CmpSimpleMthd(完整单纯形法)4.整数规划(含0-1规划)DividePlane(割平⾯法)ZeroOneprog(枚举法)5.⼆次规划QuadLagR(拉格朗⽇法)ActivedeSet(起作⽤集法)6.辅助函数(在⼀些函数中会调⽤)minNT(⽜顿法求多元函数的极值)minMNT(修正的⽜顿法求多元函数极值)minHJ(黄⾦分割法求⼀维函数的极值)7.⾼级优化算法1)粒⼦群优化算法(求解⽆约束优化问题)1>PSO(基本粒⼦群算法)2>YSPSO(待压缩因⼦的粒⼦群算法)3>LinWPSO(线性递减权重粒⼦群优化算法)4>SAPSO(⾃适应权重粒⼦群优化算法)5>RandWSPO(随机权重粒⼦群优化算法)6>LnCPSO(同步变化的学习因⼦)7>AsyLnCPSO(异步变化的学习因⼦)(算法还有bug)8>SecPSO(⽤⼆阶粒⼦群优化算法求解⽆约束优化问题)9>SecVibratPSO(⽤⼆阶振荡粒⼦群优化算法求解五约束优化问题)10>CLSPSO(⽤混沌群粒⼦优化算法求解⽆约束优化问题)11>SelPSO(基于选择的粒⼦群优化算法)12>BreedPSO(基于交叉遗传的粒⼦群优化算法)13>SimuAPSO(基于模拟退⽕的粒⼦群优化算法)2)遗传算法1>myGA(基本遗传算法解决⼀维约束规划问题)2>SBOGA(顺序选择遗传算法求解⼀维⽆约束优化问题)3>NormFitGA(动态线性标定适应值的遗传算法求解⼀维⽆约束优化问题)4>GMGA(⼤变异遗传算法求解⼀维⽆约束优化问题)5>AdapGA(⾃适应遗传算法求解⼀维⽆约束优化问题)6>DblGEGA(双切点遗传算法求解⼀维⽆约束优化问题)7>MMAdapGA(多变异位⾃适应遗传算法求解⼀维⽆约束优化问题)⾃⼰编写的马尔科夫链程序A 代表⼀组数据序列⼀维数组本程序的操作对象也是如此t=length(A); % 计算序列“A”的总状态数B=unique(A); % 序列“A”的独⽴状态数顺序,“E”E=sort(B,'ascend');a=0;b=0;c=0;d=0;Localization=find(A==E(j)); % 序列“A”中找到其独⽴状态“E”的位置for i=1:1:length(Localization)if Localization(i)+1>tbreak; % 范围限定elseif A(Localization(i)+1)== E(1)a=a+1;elseif A(Localization(i)+1)== E(2)b=b+1;elseif A(Localization(i)+1)== E(3)c=c+1;% 依此类推,取决于独⽴状态“E”的个数elsed=d+1;endendT(j,1:tt)=[a,b,c,d]; % “T”为占位矩阵endTT=T;for u=2:1:ttTT(u,:)= T(u,:)- T(u-1,:);endTT; % ⾄此,得到转移频数矩阵Y=sum(TT,2);for uu=1:1:ttTR(uu,:)= TT(uu,:)./Y(uu,1);endTR % 最终得到马尔科夫转移频率/概率矩阵% 观测序列马尔科夫性质的检验:N=numel(TT);uuu=1;Col=sum(TT,2); % 对列求和Row=sum(TT,1); % 对⾏求和Total=sum(Row); % 频数总和for i=1:1:ttxx(uuu,1)=sum((TT(i,j)-(Row(i)*Col(j))./Total).^2./( (Row(i)*Col(j)). /Total)); uuu=uuu+1; % 计算统计量x2endendxx=sum(xx)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最小二乘法的多项式拟
合m a t l a b实现
Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】
用最小二乘法进行多项式拟合(matlab 实现)
西安交通大学
徐彬华
算法分析:
对给定数据 (i=0 ,1,2,3,..,m),一共m+1个数据点,取多项式P(x),使
函数P(x)称为拟合函数或最小二乘解,令似的
使得
其中,a0,a1,a2,…,an 为待求未知数,n 为多项式的最高次幂,由此,该问题化为求
的极值问题。
由多元函数求极值的必要条件:
j=0,1,…,n
得到:
j=0,1,…,n 这是一个关于a0,a1,a2,…,an 的线性方程组,用矩阵表示如下:
因此,只要给出数据点
及其个数m ,再给出所要拟合的参数n ,则即可求出未知数矩阵(a0,a1,a2,…,an )
试验题1
编制以函数 为基的多项式最小二乘拟合程序,并用于对下列数据作三次多项式最小二乘拟合(取权函数wi ≡1)
x i y i
总共有7个数据点,令m=6
第一步:画出已知数据的的散点图,确定拟合参数n; x=::;y=[,,,,,,]; plot(x,y,'*') xlabel 'x 轴' ylabel 'y 轴' title '散点图' hold on
{}
n
k k x 0=
因此将拟合参数n设为3.
第二步:计算矩阵
A= 注意到该矩阵为(n+1)*(n+1)矩阵,
多项式的幂跟行、列坐标(i,j)的关系为i+j-2,由此可建立循环来求矩阵的各个元素,程序如下:
m=6;n=3;
A=zeros(n+1);
for j=1:n+1
for i=1:n+1
for k=1:m+1
A(j,i)=A(j,i)+x(k)^(j+i-2)
end
end
end;
再来求矩阵
B=
B=[0 0 0 0];
for j=1:n+1
for i=1:m+1
B(j)=B(j)+y(i)*x(i)^(j-1)
end
end
第三步:写出正规方程,求出a0,,a1…,an.
B=B';
a=inv(A)*B;
第四步:画出拟合曲线
x=[::];
z=a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3;
plot(x,z)
legend('离散点','y=a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3') title('拟合图')
总程序附下:
x=::;y=[,,,,,,];
plot(x,y,'*')
xlabel 'x轴'
ylabel 'y轴'
title '散点图'
hold on
m=6;n=3;
A=zeros(n+1);
for j=1:n+1
for i=1:n+1
for k=1:m+1
A(j,i)=A(j,i)+x(k)^(j+i-2) end
end
end;
B=[0 0 0 0];
for j=1:n+1
for i=1:m+1
B(j)=B(j)+y(i)*x(i)^(j-1) end
end
B=B';
a=inv(A)*B;
x=[::];
z=a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3;
plot(x,z)
legend('离散点','y=a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3') title('拟合图')。