【发布时间】:2015-07-16 14:31:17
【问题描述】:
我有一个要转换为 Python 的 matlab 脚本。因为我想对程序(而不是单个计算)进行比较,所以我希望单个计算在 Python 和 Matlab 中都匹配。计算涉及多项式曲面拟合某些数据点。
Matlab:
[xData, yData, zData] = prepareSurfaceData( dbMTOM, dbRange, dbOEM )
ft = fittype( 'poly12' );
opts = fitoptions(ft);
opts.Normalize = 'off';
fitresult = fit([xData, yData], zData, ft, opts)
Python:
xdegree = 2
ydegree = 3
# Set up the canonical least squares form
Ax = np.vander(x, xdegree)
Ay = np.vander(y, ydegree)
A = np.hstack((Ax, Ay))
# Solve for a least squares estimate
(coeffs, residuals, rank, sing_vals) = np.linalg.lstsq(A, z)
两个代码的数据集是相等的。拟合度也相等(x-degree = 2, y-degree = 3 应该类似于 poly12)。
我没有制作上述脚本。 matlab 脚本是我要转换的原始脚本,Python 脚本是我在搜索 Python 多项式曲面拟合时找到的经过调整的代码。
结果系数的数量级相同,但不相等。 系数:
[Matlab] p00 = 3703.000000, p10 = 0.470000, p01 = 0.182000, p11 = -0.000021, p02 = 0.000156, p20 = 0.000000
[Python] fx0 = 2632.006003, fx1 = 0.539073, fy1 = -0.579960, --- = 0.000000, fy2 = -0.000182, fx2 = 0.000000
我怀疑这里使用的拟合方法不一样。但是我找不到在 Matlab 和 Python 中同样有效的拟合方法。获得相等(或几乎相等)结果的建议方法是什么?
【问题讨论】:
-
结果有何不同?这些是在一些小的公差范围内的相同系数,还是这些真正不同的多项式?同一
x,y数据上的两个多项式给出的z值有何不同?
标签: python matlab numpy surface data-fitting