polyfit
多项式曲线拟合
描述
例子
拟合多项式与三角函数
在区间内沿正弦曲线等距生成10个点[0, 4 *π)
.
X = linspace(0,4*pi,10);Y = sinx;
使用polyfit
用7次多项式来拟合这些点。
P = polyfit(x,y,7);
在更细的网格上评估多项式并绘制结果。
X1 = linspace(0,4*pi);Y1 = polyval(p,x1);图绘制(x, y,“o”)举行在情节(x1, y1)从
拟合多项式到点集
在间隔中创建5个等距点的向量[0, 1]
,并评估
在这些点上。
X = linspace(0,1,5);Y = 1./(1+x);
拟合5个点的4次多项式。一般来说,对于n
点,你可以拟合一个多项式的次数n - 1
精确地通过这些点。
P = polyfit(x,y,4);
评估原始函数和多项式拟合在0到2之间的更精细的点网格上。
X1 = linspace(0,2);Y1 = 1./(1+x1);F1 = polyval(p,x1);
绘制函数值,多项式拟合在更宽的区间内(0, 2)
,用于获得多项式拟合的点以圆圈突出显示。原始模型的多项式拟合良好[0, 1]
区间,但迅速偏离拟合函数在该区间之外。
图绘制(x, y,“o”)举行在情节(x1, y1)情节(x1, f1,“r——”)传说(“y”,“日元”,“f1”)
拟合多项式与误差函数
首先生成一个向量x
点,在间隔中等距[0, 2.5]
,然后计算小块土地(x)
在这些点上。
X = (0:0.1:2.5)';Y = erf(x);
求近似6次多项式的系数。
P = polyfit(x,y,6)
p =1×70.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004
要查看拟合有多好,请在数据点处评估多项式,并生成一个显示数据、拟合和误差的表。
F = polyval(p,x);T = table(x,y,f,y-f,“VariableNames”, {“X”,“Y”,“健康”,“FitError”})
T =26日×4表X Y Fit FitError __________ __________ ___________ 00 0.00044117 -0.00044117 0.1 0.11246 0.11185 0.00060836 0.2 0.2227 0.2231 0.00039189 0.3 0.32863 0.32872 -9.7429e-05 0.4 0.42839 -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
在这个区间内,插值值与实际值相当接近。创建一个图表,以显示在这个区间之外,外推值如何迅速偏离实际数据。
X1 = (0:0.1:5)';Y1 = erf(x1);F1 = polyval(p,x1);图绘制(x, y,“o”)举行在情节(x1, y1,“- - -”)情节(x1, f1,“r——”)轴([0 5 0 2])保持从
使用定心和缩放来改善数值特性
创建一个1750年至2000年的人口数据表格,并绘制数据点。
年= (1750:25:2000)';Pop = 1e6*[791 856 978 1050 1262 1544 1650 2532 6122 8170 11560]';T =表(年份,流行)
T =11×2表年流行____ _________ 1750 7.91e+08 1775 8.56e+08 1800 9.78e+08 1825 1.05e+09 1850 1.262 2e+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
情节(年,流行,“o”)
使用polyfit
用三个输出来拟合一个五次多项式,使用定心和缩放,这改善了问题的数值性质。polyfit
将数据集中在一年
并将其缩放到标准偏差为1,从而避免了在拟合计算中出现病态范德蒙矩阵。
[p,~,mu] = polyfit(T。年,T.pop, 5);
使用polyval
有四个输入要计算p
随着年岁的增长,(year-mu(1)) /μ(2)
.将结果与原始年份对照。
F = polyval(p,year,[],mu);持有在情节(一年,f)从
简单线性回归
拟合一个简单的线性回归模型到一组离散的2-D数据点。
创建几个样本数据点向量(x, y).用一阶多项式拟合数据。
X = 1:50;Y = -0.3*x + 2*randn(1,50);P = polyfit(x,y,1);
求拟合多项式的值p
在这一点上x
.将结果与数据绘制成线性回归模型。
F = polyval(p,x);情节(x, y,“o”f, x,,“- - -”)传说(“数据”,“线性适应”)
带误差估计的线性回归
拟合一组数据点的线性模型并绘制结果,包括对95%预测区间的估计。
创建几个样本数据点向量(x, y).使用polyfit
用一阶多项式拟合数据。指定两个输出以返回线性拟合的系数以及误差估计结构。
X = 1:100;Y = -0.3*x + 2*randn(1100);[p,S] = polyfit(x,y,1);
求一阶多项式的拟合p
在这一点上x
.将误差估计结构指定为第三个输入,以便polyval
计算标准误差的估计值。返回标准误差估计δ
.
[y_fit,delta] = polyval(p,x,S);
绘制原始数据,线性拟合,95%预测区间 .
情节(x, y,“波”)举行在情节(x, y_fit,的r -)情节(x, y_fit + 2 *δ,“m——”, x, y_fit-2 *δ,“m——”)标题(95%预测区间数据的线性拟合)传说(“数据”,“线性适应”,“95%预测区间”)
输入参数
x
- - - - - -查询点
向量
查询点,指定为向量。在x
中所包含的拟合函数值对应y
.如果x
不是向量吗polyfit
把它转换成一个列向量x (:)
.
在以下情况下产生警告消息x
重复(或几乎重复)点或如果x
可能需要定心和缩放。
数据类型:单
|双
复数支持:万博1manbetx是的
y
- - - - - -查询点的拟合值
向量
查询点的拟合值,指定为向量。中的值y
中包含的查询点对应x
.如果y
不是向量吗polyfit
把它转换成一个列向量y (:)
.
数据类型:单
|双
复数支持:万博1manbetx是的
n
- - - - - -多项式拟合度
正整数标量
多项式拟合度,用正整数标量表示。n
中最左边系数的多项式幂p
.
输出参数
p
-最小二乘拟合多项式系数
向量
最小二乘拟合多项式系数,以矢量形式返回。p
长度n + 1
并包含多项式系数的降幂,其中最高次为n
.如果任何一x
或y
包含南
价值观和N <长度x
,然后所有的元素p
是南
.如果指定三个输出参数来集中和缩放数据,则polyfit
返回不同的系数p
与数据未居中和缩放时相比。
使用polyval
评估p
在查询点。
年代
-误差估计结构
结构
误差估计结构。类的输入polyval
函数获取误差估计。年代
包含以下字段:
场 | 描述 |
---|---|
R |
三角R 的范德蒙德矩阵的QR分解得到的因子(可能是排列的)x |
df |
自由度 |
normr |
残差的Norm |
如果数据在y
是随机的,那么协方差矩阵的估计p
是(Rinv * Rinv”)* normr ^ 2 / df
,在那里Rinv
是的倒数R
.
如果在数据中出现错误y
独立且正态,方差不变[y,delta] = polyval(…)
产生包含至少50%预测的错误边界。也就是说,y
±δ
包含至少50%的未来观测的预测x
.
μ
-定心和缩放值
双元素向量
居中和缩放值,作为两元素向量返回。μ(1)
是意思是(x)
,μ(2)
是性病(x)
.这些值将查询点置于中心x
在0处,单位标准差。
使用μ
作为第四个输入polyval
评估p
在缩放点上,(x - 1) / (2)
.
限制
在多点问题中,增加多项式拟合的程度
polyfit
并不总能带来更好的结果。高阶多项式可以在数据点之间振荡,导致a贫穷符合数据。在这些情况下,您可以使用低阶多项式拟合(在点之间往往更平滑)或不同的技术,这取决于问题。多项式本质上是无界的振荡函数。因此,它们不太适合外推有界数据或单调(增加或减少)数据。
算法
polyfit
使用x
形成范德蒙矩阵V
与n + 1
列和M =长度(x)
行,形成线性系统
哪一个polyfit
解决与p = V\y
.因为范德蒙德矩阵中的列是向量的幂x
的条件数V
对于高阶拟合通常较大,导致系数矩阵奇异。在这种情况下,定心和缩放可以改善系统的数值特性,从而产生更可靠的拟合。
扩展功能
高大的数组
使用行数超过内存容量的数组进行计算。
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
看到工具箱函数代码生成的可变大小限制(MATLAB编码器).
线程环境
使用MATLAB®在后台运行代码backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
.
这个函数完全支持基于线程的环境。万博1manbetx有关更多信息,请参见在线程环境中运行MATLAB函数.
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
本功能完全支持GPU阵列。万博1manbetx有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
分布式阵列
使用并行计算工具箱™跨集群的组合内存对大型数组进行分区。
该函数完全支持分布式数组。万博1manbetx有关更多信息,请参见运行MATLAB函数与分布式阵列(并行计算工具箱).
版本历史
R2006a之前介绍
第一MATLAB
海脂循环匹配函数对应求解MATLAB:
Esegui il commanmando inserendolo nella finestra di commanmando MATLAB。我的浏览器web不支持和MATLAB万博1manbetx。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。