文档

编程拟合

MATLAB多项式模型的函数

两个MATLAB®函数可以用多项式对数据建模。

多项式拟合函数

函数

描述

polyfit

polyfit (x, y, n)求多项式的系数p (x)的程度n这符合y数据通过最小化数据偏离模型的平方和(最小二乘拟合)。

polyval

polyval (p, x)返回次数多项式的值n这是由polyfit,估价为x

这个例子展示了如何用多项式对数据建模。

测量一个量y在不同的时间点t

T = [0 0.3 0.8 1.1 1.6 2.3];Y = [0.6 0.67 1.01 1.35 1.47 1.25];情节(t y“o”)标题(“y与t的关系”

你可以尝试用二次多项式函数对这些数据建模,

未知系数,,,通过最小化模型数据偏差的平方和来计算(最小二乘拟合)。

使用polyfit求多项式系数。

P = polyfit(t,y,2)
p =1×3-0.2942 1.0231 0.4981

MATLAB计算多项式系数降幂。

由方程给出数据的二次多项式模型

在等间隔时间内计算多项式,t2.然后,将原始数据和模型绘制在同一图形上。

T2 = 0:0.1:2.8;Y2 = polyval(p,t2);图绘制(t y“o”, t2, y2)标题(数据(点)和模型(线)图

在数据时间向量上评估模型

Y2 = polyval(p,t);

计算残差。

Res = y - y2;

画出残差。

人物,情节(t),“+”)标题(“残差图”

注意,二级拟合大致遵循数据的基本形状,但没有捕获数据似乎所在的平滑曲线。残差中似乎有一种模式,这表明可能需要一个不同的模型。五次多项式(如下所示)在跟踪数据波动方面做得更好。

重复这个练习,这次使用一个五次多项式polyfit

P5 = polyfit(t,y,5)
p5 =1×60.7303 -3.5892 5.4281 -2.5175 0.5910 0.6000

求多项式的值t2并在一个新的图形窗口中将拟合绘制在数据的顶部。

Y3 = polyval(p5,t2);图绘制(t y“o”, t2, y3)标题(“五次多项式拟合”

请注意

如果您正在尝试模拟一个物理情况,那么考虑特定顺序的模型在您的情况中是否有意义总是很重要的。

非多项式项线性模型

这个例子展示了如何用包含非多项式项的线性模型拟合数据。

当多项式函数不能产生令人满意的数据模型时,您可以尝试使用具有非多项式项的线性模型。例如,考虑下面的函数,它的参数是线性的,,但非线性的数据:

你可以计算未知系数,通过建立并求解一组联立方程,求解参数。下面的语法通过形成设计矩阵,其中每一列表示一个用于预测响应的变量(模型中的一个术语),每一行对应于对这些变量的一次观察。

输入t而且y作为列向量。

T = [0 0.3 0.8 1.1 1.6 2.3]';Y = [0.6 0.67 1.01 1.35 1.47 1.25]';

形成设计矩阵。

X = [ones(size(t)) exp(-t) t.*exp(-t)];

计算模型系数。

a = X\y
一个=3×11.3983 -0.8860 0.3085

因此,数据的模型由

现在,在有规则间隔的点上评估模型,并用原始数据绘制模型。

T = (0:0.1:2.5)';Y = [ones(size(T)) exp(-T) T.*exp(-T)]*a;情节(T Y“- - -”、t、y,“o”)、网格标题(“模型与原始数据图”

多元回归

这个例子展示了如何使用多元回归来对包含多个预测变量的数据建模。

当y是一个以上预测变量的函数时,表示变量之间关系的矩阵方程必须扩展以容纳额外的数据。这叫做多元回归

测量一个量对于几个值而且.将这些值存储在向量中x1x2,y,分别。

X1 =[。2.5 .6 .8 1.0 1.1]'; x2 = [.1 .3 .4 .9 1.1 1.4]'; y = [.17 .26 .28 .23 .27 .24]';

该数据的模型的形式为

多元回归求解未知系数,通过最小化模型数据偏差的平方和(最小二乘拟合)。

通过形成设计矩阵,构造并求解联立方程组,X

X = [ones(size(x1)) x1 x2];

使用反斜杠运算符求解参数。

a = X\y
一个=3×10.1018 0.4844 -0.2847

数据的最小二乘拟合模型为

要验证模型,请找到数据与模型偏差绝对值的最大值。

Y = X*a;max(abs(Y - Y))
MaxErr = 0.0038

该值比任何数据值都要小得多,这表明该模型准确地遵循了数据。

编程拟合

这个例子展示了如何使用MATLAB函数:

加载抽样普查数据census.mat其中包含1790年至1990年的美国人口数据。

负载人口普查

这将把以下两个变量添加到MATLAB工作区。

  • cdate是包含年份1790到1990的列向量,增量为10。

  • 流行是一个列向量,其中美国人口数量对应于年的cdate

绘制数据图。

情节(cdate、流行,“罗”)标题(《1790 - 1990年的美国人口》

该图显示了一个强的模式,这表明变量之间的高度相关性。

计算相关系数

在示例的这一部分中,您将确定变量之间的统计相关性cdate而且流行为了证明对数据建模的合理性。有关相关系数的详细信息,请参见线性相关

计算相关系数矩阵。

corrcoef (cdate、流行)
ans =2×21.0000 0.9597 0.9597 1.0000

对角线矩阵元素表示每个变量与其自身的完美相关性,并等于1。非对角线元素非常接近于1,表明变量之间有很强的统计相关性cdate而且流行

拟合数据的多项式

示例的这一部分应用polyfit而且polyvalMATLAB函数对数据进行建模。

计算拟合参数。

[p, errorrest] = polyfit(cdate,pop,2);

评估适合度。

pop_fit = polyval(p,cdate, errorrest);

绘制数据和拟合图。

情节(cdate pop_fit,“- - -”cdate流行,“+”);标题(《1790 - 1990年的美国人口》)传说(“多项式模型”“数据”“位置”“西北”);包含(“人口普查年”);ylabel (“人口(百万)”);

该图表明,二次多项式拟合提供了一个很好的近似数据。

计算此拟合的残差。

Res = pop - pop_fit;人物,情节(cdate res,“+”)标题(二次多项式模型的残差

请注意,残差图显示了一个模式,这表明二次多项式可能不适合对该数据建模。

绘制并计算置信界限

置信区间是预测响应的置信区间。区间的宽度表示拟合的确定程度。

应用示例的这一部分polyfit而且polyval人口普查为二阶多项式模型提供置信边界的样本数据。

下面的代码使用的间隔为 ± 2 Δ ,对应于大样本的95%置信区间。

评估拟合和预测误差估计(delta)。

[pop_fit,delta] = polyval(p,cdate, error rest);

绘制数据,拟合和置信界限。

情节(cdate、流行,“+”...cdate pop_fit,“g -”...cdate、pop_fit + 2 *δ“:”...cdate、pop_fit-2 *δ“:”);包含(“人口普查年”);ylabel (“人口(百万)”);标题(“带置信限的二次多项式拟合”网格)

95%区间表示有95%的概率,新的观测值将落在该范围内。

这个话题有用吗?