polyfit
语法
p = polyfit(x,y,n)
[p,S] = polyfit(x,y,n)
[p,S,mu] = polyfit(x,y,n)
说明
示例
p
= polyfit(x
,y
,n
)
返回阶数为 n
的多项式 p(x)
的系数,该阶数是 y
中数据的最佳拟合(在最小二乘方式中)。p
中的系数按降幂排列,p
的长度为 n+1
[p
,S
] = polyfit(x
,y
,n
)
还返回一个结构体 S
,后者可用作 polyval
的输入来获取误差估计值。
示例
[p
,S
,mu
] = polyfit(x
,y
,n
)
还返回 mu
,后者是一个二元素向量,包含中心化值和缩放值。mu(1)
是 mean(x)
,mu(2)
是 std(x)
。使用这些值时,polyfit
将 x
的中心置于零值处并缩放为具有单位标准差
这种中心化和缩放变换可同时改善多项式和拟合算法的数值属性。
示例
全部折叠
将多项式与三角函数拟合
在区间 [0,4*pi]
中沿正弦曲线生成 10 个等间距的点。
使用 polyfit
将一个 7 次多项式与这些点拟合。
在更精细的网格上计算多项式并绘制结果图。
创建一个由区间 [0,1]
中的 5 个等间距点组成的向量,并计算这些点处的 。
将 4 次多项式与 5 个点拟合。通常,对于 n
个点,可以拟合 n-1
次多项式以便完全通过这些点。
在由 0 和 2 之间的点组成的更精细网格上计算原始函数和多项式拟合。
在更大的区间 [0,2]
中绘制函数值和多项式拟合,其中包含用于获取以圆形突出显示的多项式拟合的点。多项式拟合在原始 [0,1]
区间中的效果较好,但在该区间外部很快与拟合函数出现差异。
对误差函数进行多项式拟合
首先生成 x
点的向量,在区间 [0,2.5]
内等间距分布;然后计算这些点处的 erf(x)
。
确定 6 阶逼近多项式的系数。
p = 1×7
0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004
为了查看拟合情况如何,在各数据点处计算多项式,并生成说明数据、拟合和误差的一个表。
T=26×4 table
X Y Fit FitError
___ _______ __________ ___________
0 0 0.00044117 -0.00044117
0.1 0.11246 0.11185 0.00060836
0.2 0.2227 0.22231 0.00039189
0.3 0.32863 0.32872 -9.7429e-05
0.4 0.42839 0.4288 -0.00040661
0.5 0.5205 0.52093 -0.00042568
0.6 0.60386 0.60408 -0.00022824
0.7 0.6778 0.67775 4.6383e-05
0.8 0.7421 0.74183 0.00026992
0.9 0.79691 0.79654 0.00036515
1 0.8427 0.84238 0.0003164
1.1 0.88021 0.88005 0.00015948
1.2 0.91031 0.91035 -3.9919e-05
1.3 0.93401 0.93422 -0.000211
1.4 0.95229 0.95258 -0.00029933
1.5 0.96611 0.96639 -0.00028097
⋮
在该区间中,插值与实际值非常符合。创建一个绘图,以显示在该区间以外,外插值与实际数据值如何快速偏离。
使用中心化和缩放改善数值属性
创建一个由 1750 - 2000 年的人口数据组成的表,并绘制数据点。
T=11×2 table
year pop
____ _________
1750 7.91e+08
1775 8.56e+08
1800 9.78e+08
1825 1.05e+09
1850 1.262e+09
1875 1.544e+09
1900 1.65e+09
1925 2.532e+09
1950 6.122e+09
1975 8.17e+09
2000 1.156e+10
使用带三个输入的 polyfit
拟合一个使用中心化和缩放的 5 次多项式,这将改善问题的数值属性。polyfit
将 year
中的数据以 0 为进行中心化,并缩放为具有标准差 1,这可避免在拟合计算中出现病态的 Vandermonde 矩阵。
使用带四个输入的 polyval
,根据缩放后的年份 (year-mu(1))/mu(2)
计算 p
。绘制结果对原始年份的图。
简单线性回归
将一个简单线性回归模型与一组离散二维数据点拟合。
创建几个由样本数据点 (x,y) 组成的向量。将一个一阶多项式与这些数据拟合。
计算在 x
中的点处拟合的多项式 p
。用这些数据绘制得到的线性回归模型。
具有误差估计值的线性回归
将一个线性模型拟合到一组数据点并绘制结果,其中包含预测区间为 95% 的估计值。
创建几个由样本数据点 (x,y) 组成的向量。使用 polyfit
对数据进行一阶多项式拟合。指定两个输出以返回线性拟合的系数以及误差估计结构体。
计算以 p
为系数的一阶多项式在 x
中各点处的拟合值。将误差估计结构体指定为第三个输入,以便 polyval
计算标准误差的估计值。标准误差估计值在 delta
中返回。
绘制原始数据、线性拟合和 95% 预测区间 。
输入参数
全部折叠
x
- 查询点
向量
查询点,指定为一个向量。x
中的点对应于 y
中包含的拟合函数值。
x
具有重复(或接近重复)的点或者如果 x
可能需要中心化和缩放时的警告消息结果。
数据类型: single
| double
复数支持: 是
y
- 查询点位置的拟合值
向量
查询点位置的拟合值,指定为向量。y
中的值对应于 x
中包含的查询点。
数据类型: single
| double
复数支持: 是
n
- 多项式拟合的阶数
正整数标量
多项式拟合的阶数,指定为正整数标量。n
指定 p
中最左侧系数的多项式幂。
输出参数
全部折叠
p
- 最小二乘拟合多项式系数
向量
最小二乘拟合多项式系数,以向量的形式返回。p
的长度为 n+1
,包含按降幂排列的多项式系数,最高幂为 n
。如果 x
或 y
包含 NaN
值且 n < length(x)
,则 p
的所有元素均为 NaN
。
使用 polyval
计算 p
在查询点处的解。
S
- 误差估计结构体
结构体
误差估计结构体。此可选输出结构体主要用作 polyval
函数的输入,以获取误差估计值。S
包含以下字段:
字段 | 说明 |
R |
Vandermonde 矩阵 x 的 QR 分解的三角因子 |
df |
自由度 |
normr |
残差的范数 |
如果 y
中的数据是随机的,则 p
的估计协方差矩阵是 (Rinv*Rinv')*normr^2/df
,其中 Rinv
是 R
的逆矩阵。
如果 y
中数据的误差呈独立正态分布,并具有常量方差,则 [y,delta] = polyval(...)
可生成至少包含 50% 的预测值的误差边界。即 y
± delta
至少包含 50% 对 x
处的未来观测值的预测值。
mu
- 中心化值和缩放值
二元素向量
中心化值和缩放值,以二元素向量形式返回。mu(1)
为 mean(x)
,mu(2)
为 std(x)
。这些值以单位标准差将 x
中的查询点的中心置于零值处。
使用 mu
作为 polyval
的第四个输入以计算 p
在缩放点 (x - mu(1))/mu(2)
处的解。
算法
polyfit
使用 x
构造具有 n+1
列和 m = length(x)
行的 Vandermonde 矩阵 V
并生成线性方程组