最小二乘法曲线拟合 原理及matlab实现
最小二乘法的基本原理和多项式拟合matlab实现_0

---------------------------------------------------------------最新资料推荐------------------------------------------------------ 最小二乘法的基本原理和多项式拟合matlab实现最小二乘法的基本原理和多项式拟合 matlab 实现最小二乘法的基本原理和多项式拟合一、最小二乘法的基本原理从整体上考虑近似函数 p(x) 同所给数据点(xi, yi) (i=0, 1, , m) 误差 ri p(xi) yi(i=0, 1, , m) 的大小,常用的方法有以下三种:一是误差 riri p(xi) yi(i=0, 1, , m) 绝对值的最大值max0 i m,即误差向量 r (r0, r1, rm) T 的范数;二是误差绝对值的和i 0mri,即误差向量 r 的 1范数;三是误差平方和 i 0 rm2i 的算术平方根,即误差向量 r 的 2范数;前两种方法简单、自然,但不便于微分运算,后一种方法相当于考虑 2范数的平方,因此在曲线拟合中常采用误差平方和 i 0 体大小。
rm2i 来度量误差 ri(i=0, 1,, m) 的整数据拟合的具体作法是:对给定数据 (xi, yi) (i=0, 1, , m) ,在取定的函数类中,求 p(x) , 使误差 ri p(xi) yi(i=0, 1, , m)的平方和最小,即 i 0 rm2i i 0 p(x) y iim2 min 从几何意义上讲,就是寻求与给定点(xi, yi) (i=0, 1, , m) 的距离平方和为最小的曲线y p(x) (图 6-1)。
函数 p(x) 称为拟合函数或最小二乘解,求拟合函数 p(x) 的1 / 15方法称为曲线拟合的最小二乘法。
在曲线拟合中,函数类可有不同的选取方法 .61 二多项式拟合为所有次数不超过 n(n m) 的多项式构假设给定数据点(xi, yi) (i=0, 1, , m) , pn(x) akxkk 0n 成的函数类,现求一 m , 使得 2 I pn(xi) yi i 0 2 n akxik yi mini 0 k0 (1) m 当拟合函数为多项式时,称为多项式拟合,满足式(1)的 pn(x) 称为最小二乘拟合多项式。
最小二乘曲线拟合及MATLAB实现_测绘专业论文 精品

内蒙古科技大学本科生毕业设计说明书(毕业论文)题目:最小二乘曲线拟合及MATLAB实现学生姓名:李亚学号:0972143230专业:测绘工程班级:2009测绘2班指导教师:孙同贺讲师最小二乘曲线拟合及MATLAB实现摘要介绍曲线拟合的基本理论,对最小二乘原理进行了全方位的理论阐述,同时也阐述了曲线拟合的基本原理及多项式曲线拟合模型的建立。
详细的解答了曲线拟合中的最小二乘法,并介绍了部分的正交最小二乘法理论。
重点讲解多项式拟合的具体步骤,同时也介绍了非线性方程的最小二乘拟合,在建立理论的基础上对最小二乘曲线拟合法的MATLAB实现方法进行研究,利用MATLAB2012b的平台对测量数据进行最小二乘曲线拟合,介绍MATLAB的具体构造和曲线拟合工具。
利用MATLAB中的ployfit函数对实测数据进行多项式曲线拟合,并给出曲线拟合MATLAB实现的源程序,给出拟合曲线,并评定拟合的精度证明该方法是行之有效的。
关键词:最小二乘法,曲线拟合,MATLAB,测量数据Curve Fitting in Least-Square Methodand Its Realization with MatlabAbstractTo introduce the basic theory of curve fitting and discuss the least squares principle in this paper, what’s more, we also discuss the basic principle of curve fitting and the establishment of polynomial curve fitting model. Meanwhile, we also introduce the least-square method of curve fitting in detail and part of the theory of orthogonal least square method. We mainly discuss the specific steps of polynomial fitting, and also introduces the nonlinear equation of the least squares fitting at the same time, which established on the theory of least squares curve fitting in MATLAB in order to realize the method to do research. Using MATLAB2012b platform to achieve the goal of measuring data and introducing the special structure of MATLAB and curve fitting tool. We can use ployfit function in MATLAB to polynomial curve fitting of experimental data, and get the MATLAB source program about curve fitting and the fitting curve. Finally, we need to prove the method of assessing the precision of the fitting is effective.Key words: least square method; curve fitting; MATLAB, metrical data最小二乘曲线拟合及MATLAB实现 (I)摘要 (I)CURVE FITTING IN LEAST-SQUARE METHOD AND ITS REALIZATION WITH MATLAB (II)ABSTRACT (II)第一章引言 (1)1.1研究背景 (1)1.1.1 历史理论原理 (1)1.1.2 现代研究 (1)1.2问题定义 (2)1.2.1 曲线拟合的思想 (2)1.2.2 多项式拟合 (3)1.2.3 利用Matlab的polyfit函数进行多项式拟合 (3)1.3论文结构 (3)第二章数据曲线拟合 (4)2.1测量数据 (4)2.2拟合模型 (4)2.3最小二乘原理 (5)2.3.1最小二乘法 (5)2.3.2最小二乘估计与极大似然估计 (7)2.4.1曲线拟合理论 (9)2.4.2最小二乘法线性拟合原理 (10)2.4.3最小二乘非线性拟合 (12)2.4.4正交多项式 (13)2.4.5正交最小二乘曲线拟合 (15)2.5曲线拟合精度评定 (17)第三章MATLAB (19)3.1MATLAB概述 (19)3.1.1MATLAB简介 (19)3.1.2MATLAB的主要组成部分 (21)3.2MATLAB2012B的运行简介 (23)3.2.1启动和退出MATLAB2012b (23)3.2.2MATLAB2012b桌面系统 (24)3.2.3MATLAB函数调用系统 (26)3.2.4MATLAB2012b的帮助系统 (27)3.2.5附件管理系统 (28)3.2.6数据交换系统 (28)3.2.7MATLAB 中的其他系统 (29)3.3最小二乘曲线拟合法的MATLAB实现 (30)第四章最小二乘法曲线拟合的MATLAB实现 (32)4.1使用POLYFIT函数实现多项式拟合 (32)4.3三次多项式的曲线拟合 (34)4.4四次多项式曲线拟合 (35)4.5数据处理和精度评定 (36)第五章总结 (40)参考文献 (41)附录1: (43)MATLAB语言编程源代码 (43)附录2: (45)各次拟合的拟合曲线方程 (45)致谢 (46)外文翻译 (47)外文部分 (47)翻译部分 (54)第一章 引 言1.1研究背景1.1.1 历史理论原理Weierstrass 第一逼近定理[1]对任意函数()f C[a,b]x ∈和任意给定的0ε>,都存在n 次代数多项式()n p x ,满足()()[,]||<max nx a b f x p x ε∈- (1-1-1) Bernstein 多项式(bernstein polynomial )[1]前苏联数学家Bernstein 曾经给出这样的多项式序列:0(,)(1)n k n k n k n k B f x f x x k n -=⎛⎫⎛⎫=- ⎪ ⎪⎝⎭⎝⎭∑ (1-1-2)在整体上一致逼近()f x ,但它的收敛缓慢,要达到一定的精度,则n 要取很大,计算量大,所以研究如何在给定的精度下,对()f x 进行整体逼近,成为逼近论中的一个重要问题。
最小二乘曲线拟合及Matlab 实现

图3
测量数据散点图与拟合曲线图
5
结束语
通过 Matlab 实现对磁偶极子辐射场测量数据 的曲线拟合 可在有限的测量数据条件下精确描述 导电介质中电磁波的传播特性 为实验研究与工程 应用提供依据 基于最小二乘曲线拟合及 Matlab 实现方法简明 适用 可应用于类似的测量数据处 理和实验研究
参考文献
[1] 周陪森 , 刘震涛 , 吴淑荣 . 自动检测与仪表 [M]. 北京 : 清华大学出版社 , 1987. [2] 何汉林 , 魏汝祥 , 李卫军 . 数值分析 [M]. 武汉 : 湖北科 学技术出版社 , 1999. [3] 何仁斌 . MATLAB6 工程计算及应用 [M]. 重庆 : 重庆大 学出版社 , 2001. [4] 牛中奇 , 朱满座 , 卢志远 , 等 . 电磁场理论基础 [M]. 北 京 : 电子工业出版社 , 2001. [5] 易芳 . 采用 MATLAB 的线性回归分析 [J]. 兵工自动化 , 2004, 23 (2): 68 - 69.
polynomialfitting1引言由于磁偶极子在导电介质中的传播衰减大并具有强非线性测量数据与被测物理量的真值不完全一致求被测物理量的变化规律法是对测量数据进行曲线拟合1曲线拟合用matlab实现对导电介质中磁偶极子辐需对数据进行必要的数学加工和处理寻解决此类问题的常用方故基于最小二乘射场的传播特性的曲线拟合与仿真2最小二乘曲线拟合给定一组测量数据xiyii求得变量x和y之间的函数关系fxa使它最佳地逼近或拟合已知数据2aa0a1012m基于最小二乘原理fxa称为拟合模型做法是选择参数a使得拟合模型与实际观测值在各点的残差ekykfxka的加权平方和最小m2iiiyxfxan是一些待定参数即求fx使??m0i2iii0iyxfxminxi0称为权应用此法拟合的曲线称为最小二乘拟它反映数据xiyi在实验中所占数据的比重合曲线用最小二乘法求拟合曲线首先要确定拟合模型fx一般来说根据各门科的知识可以大致确定函数的所属类若不具备这些知识则通常从问题的运动规律及给定数据的散点图来确定拟合曲线的形式21多项式拟合若拟合模型fxa多项式拟合假设各数据点的权为1mm2iaaea0a1xanxn则称其为an由最小二乘法确定系数a0a1令a0a12最小ani0inini100iyxax?则有0yxaxaax2am0iinini10jij????j012man即ii得方程组m0iji0jninj1i1ji0yxxaxax??????????????????????????????????????????????????mmmm0iini0iiim0iin10m0in2im0i1nim0ini0i1ni0i2im0iim0inim0iiyxyxyaaaxxxxxxxx1m此方程称为多项式拟合的法方程令????????????????iiiiiimmm0n2im01nim0ni01ni02im0im0inim0iixxxxxxxx1mx????????????????????iimm0ini0iim0iiyxyxyy??????????????n10aaaa则得xay从而ax1y收稿日期作者简介20041209修回日期男20041231陈光1980吉林人在读硕士1999年毕业于海军工程大学从事水下目标探测与制导研究107万方数据兵工自动化软件技术o
最小二乘法曲线拟合-原理及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实现

曲线拟合(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实现的最小二乘拟合-数值计算方法

实验二最小二乘拟合【实验内容】1、理解最小二乘拟合的原理;2、理解适定、欠定、超定三类线性方程组的区别,会求其解;3、理解和掌握“左除运算”;4、完成最小二乘拟合的程序(过程或函数)5、会使用画图命令6、与系统函数进行对比分析和学习。
【实验方法与步骤】一、回答下面的问题1、什么是超定方程,其对应的珍贵方程组是什么,系数特点是什么?2、最小二乘拟合方法和插值方法的相同点和不同点,各自用在什么情况下?请举例说明你在其它实验课中遇到的使用最小二乘拟合方法的场景;3、生成超定方程时,大家发现了Matlab的矩阵存储顺序是行优先(C语言规则),还是列优先(Fortran语言规则)?为什么呢?4、时间测试下,请对自己编写的最小二乘拟合代码和系统内置函数的执行效率比较和分析。
在自己的代码中,将循环体改写成等价的矩阵运算,执行时间是否有所缩短?二、完成下列计算,写出代码1、用矩阵逆、左除和rref分别求p74第9题,测试执行时间2、画图命令,画出习题5第16、17题的拟合点图形,进行拟合函数选型3、编写最小二乘拟合程序,求出习题5第16、17题的拟合函数,并绘图4、执行系统函数polyfit,与自己程序的计算结果进行比对和分析。
【实验结果】解:一、1:超定方程定义方程个数大于未知量个数的方程组对应正规方程组对于方程组Ra=y,R为n×m矩阵,如果R列满秩,且n>m。
则方程组没有精确解,此时称方程组为超定方程组。
系数特点R为n×m矩阵,R列满秩,且n>m解:一、2最小二乘法与插值法方法相同点不同点适用情况最小二乘法都是从一组数据去求函数)(xfy=的近似表达式在知道一组实验数据(不准确值)中寻找自变量x和因变量y之间的函数关系y=F(x),用拟合曲线S(x)去逼近实验数据,来描述自变量x和因变量y之间的函数关系在用最小二乘法求拟合曲线时,不要求曲线过给定的一组点。
数据通常是实验测定出来的,出于对精度的要求,不一定保留全部数据插值在不知道函数y=f(x)解析式,知道函数在[a,b]区间上一系列点的函数值(准确值)的前提下,构造插值函数P(x)来代替f(x),来求非插值节点的函数值。
基于最小二乘法的曲线拟合及其在Matlab中的应用

基于最小二乘法的曲线拟合及其在Matlab中的应用【摘要】物理量之间的函数关系的确定在实际研究工作中有很重要的作用。
目前我们用于曲线拟合的方法主要是三次多项式插值法,抛物线加权平均法,张力样条函数插值法等,但这些方法计算量大。
本文结合最小二乘法的基本原理,利用最小二乘方法进行曲线拟合,计算过程简便。
首先介绍了最小二乘法拟合的基本原理,然后介绍了用Matlab实现曲线拟合以得到函数关系的方法和步骤,最后举例详细介绍了该方法的应用。
【关键词】最小二乘法;Matlab;曲线拟合1.引言在现代科学研究中,物理量之间的相互关系通常是用函数来描述的。
有些函数关系是由经典理论分析推导得出的,这些函数关系为我们进一步的分析研究工作提供了理论基础。
在现实的科学研究过程中,有一些问题很难由经典理论推导出物理量的函数表达式,或者此推导出的表达式也十分复杂,不利于进一步的分析,但又很希望能得到这些量之间的函数关系,这时就可以利用曲线拟合的方法,用实验数据结合数学方法得到物理量之间的近似函数表达式。
Matlab是Math Works公司推出的一种科学计算软件,是集数值计算、符号运算及出色的图形处理、程序语言设计等强大功能于一体的科学计算语言。
应用Matlab处理既克服了最小二乘法计算量大等缺点,又使繁琐、枯燥的数值计算变成种简单、直观的可视化操作过程,且能较准确地标记实验数据点和绘出拟合曲线。
2.最小二乘法拟合的基本原理曲线拟合又称函数逼近,是指对一个复杂函数,求出一个简单的便于计算的函数,要求使与的误差在某种度量意义下最小。
我们把近似值和测得值的差值称为残余误差。
即显然,残差的大小是衡量拟合好坏的重要标志。
经常采用的三种衡量的准则为:(1)使残差的最大绝对值最小:;(2)使残差的绝对值之和最小:;(3)使残差的平方和最小:。
分析上面的三种准则,准则(1)、(2)的提法都比较自然,但是由于含有绝对值,所以不利于实际计算,而按照准则(3)来确定参数,得到拟合曲线的方法称作曲线拟合的最小二乘法,它的计算比较简单,是工程实际当中常用的一种函数逼近的方法。
基于Matlab实现最小二乘曲线拟合

基于Matlab实现最小二乘曲线拟合一、本文概述在数据分析和科学计算中,曲线拟合是一种常见且重要的技术。
通过拟合,我们可以根据已知数据建立数学模型,预测未知数据,以及深入理解数据背后的规律。
最小二乘法是曲线拟合中最常用的一种方法,其原理是通过最小化预测值与实际值之间的平方误差来寻找最佳拟合曲线。
本文旨在介绍如何使用Matlab这一强大的数学计算软件,实现最小二乘曲线拟合,包括其理论基础、实现步骤以及实际应用案例。
通过本文的学习,读者将能够掌握在Matlab环境中进行最小二乘曲线拟合的基本方法,提高数据处理和分析能力。
二、最小二乘曲线拟合原理最小二乘法(Least Squares Method)是一种数学优化技术,它通过最小化误差的平方和来寻找数据的最佳函数匹配。
在曲线拟合中,最小二乘法被广泛应用于通过一组离散的数据点来估计一个连续函数的形状。
这种方法的基本思想是通过选择一个模型函数(通常是多项式、指数函数、对数函数等),使得该模型函数与实际数据点之间的差距(即残差)的平方和最小。
假设我们有一组数据点 ((x_1, y_1), (x_2, y_2), \ldots,(x_n, y_n)),我们希望通过一个模型函数 (y = f(x, \mathbf{p})) 来拟合这些数据点,其中 (\mathbf{p}) 是模型的参数向量。
最小二乘法的目标就是找到最优的参数向量 (\mathbf{p}^*),使得残差平方和 (S(\mathbf{p})) 最小:S(\mathbf{p}) = \sum_{i=1}^{n} [y_i - f(x_i,\mathbf{p})]^2]为了使 (S(\mathbf{p})) 达到最小,我们需要对(S(\mathbf{p})) 求偏导数,并令其等于零。
这样,我们就得到了一个关于 (\mathbf{p}) 的方程组。
解这个方程组,就可以得到最优的参数向量 (\mathbf{p}^*)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
曲线拟合(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. 设拟合多项式为: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(残差)用于生成预测值的误差估计。
[p,s,mu]=polyfit(x,y,n)在拟合过程中,首先对x进行数据标准化处理,以在拟合中消除量纲等影响,mu包含标准化处理过程中使用的x的均值和标准差。
polyval( )为多项式曲线求值函数,调用格式: y=polyval(p,x)[y,DELTA]=polyval(p,x,s)y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。
[y,DELTA]=polyval(p,x,s) 使用polyfit函数的选项输出s得出误差估计Y DELTA。
它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。
则Y DELTA将至少包含50%的预测值。
如下给定数据的拟合曲线: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]。
解:MATLAB程序如下: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')运行结果如图1计算结果为:p =0.5614 0.8287 1.1560即所得多项式为y=0.5614x^2+0.08287x+1.15560图1 最小二乘法曲线拟合示例对比检验拟合的有效性:例:在[0,π]区间上对正弦函数进行拟合,然后在[0,2π]区间画出图形,比较拟合区间和非拟合区间的图形,考察拟合的有效性。
在MATLAB中输入如下代码:clearx=0:0.1:pi;y=sin(x);[p,mu]=polyfit(x,y,9)x1=0:0.1:2*pi;y1=sin(x1);%实际曲线y2=polyval(p,x1);%根据由区间0到pi上进行拟合得到的多项式计算0到2pi上的函数值,%需要注意的是polyval()返回的函数值在pi到2pi上并没有进行拟合plot(x1,y2,'k*',x1,y1,'k-')运行结果:p =0.0000 0.0000 -0.0003 0.0002 0.0080 0.0002 -0.1668 0.00001.0000 0.0000mu =R: [10x10 double]df: 22normr: 1.6178e-07MATLAB的最优化工具箱还提供了lsqcurvefit()函数命令进行最小二乘曲线拟合(Solve nonlinear curve-fitting (data-fitting) problems in least-squares sense)。
调用格式:x = lsqcurvefit(fun,x0,xdata,ydata)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)x = lsqcurvefit(problem)[x,resnorm] = lsqcurvefit(...)[x,resnorm,residual] = lsqcurvefit(...)[x,resnorm,residual,exitflag] = lsqcurvefit(...)[x,resnorm,residual,exitflag,output] = lsqcurvefit(...)[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(...)[x,resnorm,residual,exitflag,output,lambda,jacobian] =x0为初始解向量;xdata,ydata为满足关系ydata=F(x, xdata)的数据;lb、ub为解向量的下界和上界,若没有指定界,则lb=[ ],ub=[ ];options为指定的优化参数;fun为拟合函数,其定义方式为:x = lsqcurvefit(@myfun,x0,xdata,ydata),其中myfun已定义为 function F = myfun(x,xdata)F = … % 计算x处拟合函数值fun的用法与前面相同;resnorm=sum ((fun(x,xdata)-ydata).^2),即在x处残差的平方和; residual=fun(x,xdata)-ydata,即在x处的残差;exitflag为终止迭代的条件;output为输出的优化信息;lambda为解x处的Lagrange乘子;jacobian为解x处拟合函数fun的jacobian矩阵。
例:lsqcurvefit()优化程序Data = ...[0.0000 5.89550.1000 3.56390.2000 2.51730.3000 1.97900.4000 1.89900.5000 1.39380.6000 1.13590.7000 1.00960.8000 1.03430.9000 0.84351.0000 0.68561.1000 0.61001.2000 0.53921.3000 0.39461.4000 0.39031.5000 0.54741.6000 0.34591.7000 0.13701.8000 0.22111.9000 0.17042.0000 0.2636];t = Data(:,1);y = Data(:,2);% axis([0 2 -0.5 6])plot(t,y,'ro')title('Data points')%We would like to fit the function y = c(1)*exp(-lam(1)*t) + c(2)*exp(-lam(2)*t) to the data%The lsqcurvefit function solves this type of problem easily.%To begin, define the parameters in terms of one variable x:%x(1) = c(1)%x(2) = lam(1)%x(3) = c(2)%x(4) = lam(2)%Then define the curve as a function of the parameters x and the data t: F = @(x,xdata)x(1)*exp(-x(2)*xdata) + x(3)*exp(-x(4)*xdata);x0 = [1 1 1 0];[x,resnorm,~,exitflag,output] = lsqcurvefit(F,x0,t,y)hold onplot(t,F(x,t))hold offFsumsquares = @(x)sum((F(x,t) - y).^2);opts = optimset('LargeScale','off');[xunc,ressquared,eflag,outputu] = ...fminunc(Fsumsquares,x0,opts)fprintf(['There were %d iterations using fminunc,' ...' and %d using lsqcurvefit.\n'], ...outputu.iterations,output.iterations)fprintf(['There were %d function evaluations using fminunc,' ...' and %d using lsqcurvefit.'], ...outputu.funcCount,output.funcCount)type fitvectorx02 = [1 0];F2 = @(x,t) fitvector(x,t,y);[x2,resnorm2,~,exitflag2,output2] = lsqcurvefit(F2,x02,t,y)fprintf(['There were %d function evaluations using the 2-d ' ...'formulation, and %d using the 4-d formulation.'], ...output2.funcCount,output.funcCount)x0bad = [5 1 1 0];[xbad,resnormbad,~,exitflagbad,outputbad] = ...lsqcurvefit(F,x0bad,t,y)hold onplot(t,F(xbad,t),'g')legend('Data','Global fit','Bad local fit','Location','NE')hold offfprintf(['The residual norm at the good ending point is %f,' ...' and the residual norm at the bad ending point is %f.'], ...resnorm,resnormbad)displayEndOfDemoMessage(mfilename)拟合效果如下:直线的最小二乘拟合:y=a+bx式中有两个待定参数,a代表截距,b代表斜率。