matlab数据拟合实验
大工数模班 yi 2.88 2.2576 1.9683 1.9528 2.0862 2.109 2.1979 2.5409 2.9627 3.155 3.2052
编写下面的程序 test82.m。
clc;clear all;
x=[0 0.2 0.4 0.7
0.9 0.92 0.99 1.2 1.4 1.48 1.5]';
Y=polyval(p,X) 其中 X 是给定的需要计算拟合值的向量,p 是 polyfit()函数的返回值,返回值 Y 是根据 p 计算出来的 X 处的多项式的值。
例 8‐1 利用函数 y = x2 + 2x + 3 ,在区间 x ∈[−2,1] 产生 31 个数据点,并对 y 值加入
适当的随机噪声,然后用二次多项式拟合得到的数据,观察拟合效果。 编写下面的程序 test81.m。
乘法原理求出替换后变量的直线方程。在实际中常利用此直线方程绘制数据的标准曲线,同
时根据需要可将此直线方程还原为曲线方程,实现对数据的曲线拟合。
常用的非线性函数线性化的方法如下:
1、 指数函数 y = aebx ,当 b > 0 时, y 随 x 增大而增大;当 b < 0 时, y 随 x 增大
而减少。可以两边取对数,得 ln y = ln a + bx 。因此当以 ln y 和 x 绘制的散点
图 8‐2 已知函数线性组合的拟合效果图
8.2.2 一元非线性拟合
在上面的例 8‐2 中,我们能看到虽然要拟合的函数形式是非常复杂的,但是在复杂的函
数形式如指数函数、幂函数的指数上没有未知参数,所以上面的问题会比较简单,可以直接
求解线性方程组得到结果。但在实际的问题场景中,如果我们已知的函数形式为 y(x) = aebx
实验八 Matlab 数据拟合实验
在科学实验和生产实践中,往往需要从一组实验数据 (xi , yi ) (i = 1, 2," n) 中,寻找变 量 x 和 y 之间的函数关系 y = f (x) 的某种近似表达式 s(x) 。上一个实验中介绍的插值方法 可 以 构 造 一 个 插 值 函 数 逼 近 已 知 函 数 。 但 是 , 一 般 来 说 , 给 定 的 实 验 数 据 (xi , yi ) (i = 1, 2," n) 的数量较大,且由于观测误差的原因,准确度不一定高,甚至在个别点有很 大的误差,形象地称之为“噪声”。如果用插值法来求 y = f (x) 的近似表达式,要使 s(x) 满足插值条件,势必将“噪声”带进近似函数 s(x) ,因而不能较好地描绘 y = f (x) 。为了
[p,S]=polyfit(x,y,n) 其中,x,y 是输入的实验数据,n 是拟合计算用到的多项式的次数,返回值 p 是拟合多 项式的系数,S 是用来估计误差和预测数据的结构体。
与 polyfit()函数配合使用的函数是 polyval(),这个函数根据拟合出来的多项式系数 p 计 算给定数据 x 处的 y 值。其调用格式如下:
6
5.5
5
4.5
4
3.5
3
2.5
2
1.5
-2
-1.5
-1
-0.5
精确值函数线性组合的拟合方法
图 8‐1 多项式拟合效果图
实际上,多项式函数的每一项的都可以被看做是一个函数,而多项式函数就是这些函数
的线性组合。对于更一般的情形,假设已知某函数的线性组合为:
f (x) = c1 f1(x) + c2 f2 (x) + c3 f3(x) +" + cn fn (x)
例 8‐2 假设测出了一组数据 (xi , yi ) ,由下面的表格 8‐1 给出,且已知函数的原型为
y(x) = c1 + c2e−3x + c3 cos(−2x)e−4x + c4 x2 ,试用已知数据求出待定系数 ci 的值。
表 8‐1
xi 0
0.2
0.4
0.7
0.9 0.92 0.99 1.2 1.4 1.48 1.5
这样在幂指数上带有未知数的形式,简单的线性求解就无能为力了。通常这种情况下,我们
有两种方法可以解决,一是将非线性函数进行适当的变换变成线性形式,另一种是有 Matlab 的优化工具箱中提供的 lsqcurvefit()函数进行求解。 非线性拟合化为线性拟合
对于某些非线性的变量关系可以通过简单的变量替换使之直线化,这样就可以按最小二
Maxinum yi − f (xi ) i = 1, 2,", m
这种准则通常被称为切比雪夫(Chebyshev)近似准则。这种准则在实际应用中通常很复 杂,应用这一准则所产生的最优化问题通常可以表示为线性规划问题,这可能需要高级的数 学方法,或者要用计算机的数值算法。所以在对有限的数据点拟合一条曲线时不常使用该准 则,然而当极小化最大绝对偏差很重要的时候仍应考虑这一准则。另外,用一个简单函数代
内部资料 据中拟合出一个有规律的解析式,而该解析式的某些参数(系数)是不定的未知量。数据拟合
的目的就是要根据散点数据在“最小误差”的意义下确定出解析式中这些不定参数。举一个
简单的例子,对于一条直线 y = kx + b ,该式中有 k 和 b 两个未知参数需要求出。由基本的
数学知识我们可以知道,只要有两个点就可以确定出这两个参数。但是若有更多的点,比如 实验数据往往有很多点,这些点由于有误差并不一定在一条直线上,需要找一条直线离这些 点“最近”,这就是拟合。从上面的例子我们可以看出,拟合具有两个特点:
A1=[ones(size(x0)) exp(‐3*x0) cos(‐3*x0).*exp(‐4*x0) x0.^2];
y1=A1*c;
plot(x0,y1,x,y,'*') 运行该程序可以得出拟合曲线和已知数据点,如图 8‐2 所示。
3.6
3.4
3.2
3
2.8
2.6
2.4
2.2
2
1.8
0
0.5
1
1.5
clc;clear all; a=1;b=2;c=3; x=‐2:0.1:1; %产生 x 值 y=a*x.^2+b*x+c;%产生 y 的精确值 figure plot(x,y,'r') %对已知的精确值作图 hold on;
大工数模班 yRandom=y+(rand(size(x))‐0.5)*0.3; %给 y 值加入随机噪声 plot(x,yRandom,'*') %对要进行拟合的实验数据作图 [p,S]=polyfit(x,yRandom,2);%对实验数据进行二次多项式拟合,得到多项式系数 yFit=polyval(p,x); plot(x,yFit,'‐kd') legend('精确值','实验数据','拟合值') p 内部资料 运行该程序可得到结果 p= 0.9640 1.9801 3.0171 当然由于我们的实验数据是加入随机噪声的,所以该程序每次运行的结果会略有不同, 但能发现拟合效果还是相当好的。另外,拟合的效果如图 8‐1 所示。
(1) 点数(已知数据数目)即方程的个数要大于待求参数的个数; (2) 方程所代表的曲线、曲面等并不一定通过这些已知的点。 在上一段中,“最近”的定义有很多种,不同的定义对应着数据拟合的不同准则。下面我 们介绍常见的几种数据拟合的准则。 切比雪夫(Chebyshev)近似准则
给定某种函数类型 y = f (x) 和 m 个数据点 (xi , yi ) 的一个集合,对整个集合极小化最大 绝对偏差 yi − f (xi ) ,即确定函数类型 y = f (x) 的参数从而极小化数量:
尽可能减少这种观测误差的影响,本次实验我们介绍数据拟合相关的方法及其 Matlab 实现。
8.1 实验目的
大工数模班 1、熟悉掌握 Matlab 中各种常见的拟合方法; 2、能够灵活编程来解决数据拟合的实际问题。
8.2 实验基本知识
数据的拟合主要分为曲线拟合(curve fitting)、曲面拟合(surface fitting)。它试图从散点数
大工数模班 似解方法的进步,使得该准则导致的最优化问题的求解变的可能。所以在一些特殊的场景下, 我们也可以考虑利用该准则进行数据拟合。 最小二乘准则 现在最常用的曲线拟合准则是最小二乘准则。使用与前面相同的记号,问题是确定函数 类型 y = f (x) 的参数,使得极小化和数 m ∑ yi − f (xi ) 2 内部资料 i=1 用此方法解决产生的最优化问题仅需使用几个变量的演算,所以容易普及,Matlab 软 件中提供的数据拟合方法也基本都是基于该准则的。数据拟合根据自变量的个数以及选取的 拟合函数的形式,可以分为一元线性拟合、一元非线性拟合、多元拟合等不同的问题场景。 下面我们就分别介绍这几种类型问题下最小二乘拟合的 Matlab 实现,并在最后介绍 Matlab 曲线拟合工具箱的使用。
图呈直线趋势时,可考虑采用指数函数来描述 y 与 x 之间的非线性关系,ln a 和
b 分别为截距和斜率。
大工数模班 2、 对数函数 y = a +bln x,当b > 0时, y 随 x增大而增大,先快后慢;当b < 0 时, y 随 x 增大而减少,先快后慢。因此,当以 y 和 ln x 绘制的散点图呈直线 趋势时,可考虑采用对数函数描述 y 与 x 之间的非线性关系,式中的 b 和 a 分 别为斜率和截距。
替在一个区间上定义的另一个复杂函数时,构成该准则的原则是极其重要的,在该区间上两 个函数间的最大差异必须达到最小,因此这一准则在函数逼近问题中具有很重要的应用。 极大化绝对偏差之和
极小化绝对偏差之和准则可以归纳为:给定某种函数类型 y = f (x) 和 m 个数据点