Polyfitn是polyfit的延伸,从而允许用户与多于一个的独立变量创建模型。它也允许用户指定的一般模型,例如,二次模型,具有恒定和二次项,但是没有线性项。
例如,为了拟合一个多项式模型到余弦曲线上选择的点,我们只需要偶数有序项。
x = 2: .1:2;
y = cos (x);
P = polyfitn(X,Y, '恒定的x ^ 2×^ 4×^ 6');
p.Coefficients
ans =
[0.99996 -0.49968 0.041242 -0.0012079]
系数当然不会是精确的,因为我只使用了有限数量的项对于本质上是一个截短的泰勒级数,我只有有限数量的点来建立模型。cos级数的前4个系数应该是
>> [1 -1/2 1/24 -1/720]
ans =
1 -0.5 0.041667 -0.0013889
所以我们得到了预期的结果。
当然,聚苯乙烯可以在更高的维度下工作,因为这是它真正设计来解决的问题。
x =兰德(100 1);
Y =兰特(100,1);
Z = EXP(X + Y)+ randn(100,1)/ 100;
p = polyfitn (x, y, z, 3);
结果可以被转换成一个符号形式更简单地查看模型。在这里,我会用我的sympoly工具箱,而且还提供了一个polyn2sym功能。
polyn2sympoly (p)
ans =
* x1 ^2 + 1.4919* x1 ^2* x2 + 0.041084* x1 ^2 + 1.4615* x1 * x2 ^2 - 0.095977* x1 * x2 + 1.2799* x1 + 0.56912* x2 ^3 - 0.15306* x2 ^2 + 1.361* x2 + 0.94819
当然,参数误差估计是为那些想要确定所生成项的重要性的人而生成的。
我还提供了评估这些模型和区分模型的工具。
一个警告-小心使用高阶多项式来拟合你的数据。仅仅因为低阶模型有效,高阶模型并不一定更好。高阶多项式常常在数据点之间产生严重的环。总是绘制你的数据。想想你将要构建的模型。然后绘制结果模型。使用您的眼睛来验证结果,而不是简单地查看r平方系数(尽管我也返回了该参数)。
如果您确实发现高阶多项式模式是必要的,因为您的曲线太复杂了,考虑使用回归或平滑样条模型代替。
引用作为
约翰D 'Errico(2021)。polyfitn(//www.tatmou.com/matlabcentral/fileexchange/34765-polyfitn), MATLAB中央文件交换。检索.