Hướng dẫn what is polyfit python?
Hãy để tôi bắt đầu bằng cách nói rằng những gì tôi nhận được có thể không phải là những gì tôi mong đợi và có lẽ bạn có thể giúp tôi ở đây. Tôi có dữ liệu sau:
Bây giờ, tôi muốn kết hợp những dữ liệu này với, chẳng hạn, một đa thức bậc 4. Vì vậy tôi làm:
Bây giờ tôi tạo một lưới mới cho các giá trị x để đánh giá hàm phù hợp
Khi tôi thực hiện tất cả việc vẽ biểu đồ (tập dữ liệu và đường cong phù hợp) bằng lệnh:
Tôi nhận được những điều sau: fit_data.pngNhững gì tôi mong đợi là chức năng điều chỉnh để khớp chính xác (ít nhất là gần giá trị lớn nhất của dữ liệu). Tôi đang làm gì sai? Cảm ơn trước. 51 hữu ích 0 bình luận 136k xem chia sẻ Hãy để tôi bắt đầu bằng cách nói rằng những gì tôi nhận được có thể không phải là những gì tôi mong đợi và có lẽ bạn có thể giúp tôi ở đây. Tôi có dữ liệu sau:
Bây giờ, tôi muốn kết hợp những dữ liệu này với, chẳng hạn, một đa thức bậc 4. Vì vậy tôi làm:
Bây giờ tôi tạo một lưới mới cho các giá trị x để đánh giá hàm phù hợp
Khi tôi thực hiện tất cả việc vẽ biểu đồ (tập dữ liệu và đường cong phù hợp) bằng lệnh:
Tôi nhận được những điều sau: fit_data.pngNhững gì tôi mong đợi là chức năng điều chỉnh để khớp chính xác (ít nhất là gần giá trị lớn nhất của dữ liệu). Tôi đang làm gì sai? Cảm ơn trước. 51 hữu ích 0 bình luận 136k xem chia sẻ Hãy để tôi bắt đầu bằng cách nói rằng những gì tôi nhận được có thể không phải là những gì tôi mong đợi và có lẽ bạn có thể giúp tôi ở đây. Tôi có dữ liệu sau:
Bây giờ, tôi muốn kết hợp những dữ liệu này với, chẳng hạn, một đa thức bậc 4. Vì vậy tôi làm:
Bây giờ tôi tạo một lưới mới cho các giá trị x để đánh giá hàm phù hợp
Khi tôi thực hiện tất cả việc vẽ biểu đồ (tập dữ liệu và đường cong phù hợp) bằng lệnh:
Tôi nhận được những điều sau: fit_data.pngNhững gì tôi mong đợi là chức năng điều chỉnh để khớp chính xác (ít nhất là gần giá trị lớn nhất của dữ liệu). Tôi đang làm gì sai? Cảm ơn trước. 51 hữu ích 0 bình luận 136k xem chia sẻ Hãy để tôi bắt đầu bằng cách nói rằng những gì tôi nhận được có thể không phải là những gì tôi mong đợi và có lẽ bạn có thể giúp tôi ở đây. Tôi có dữ liệu sau:
Bây giờ, tôi muốn kết hợp những dữ liệu này với, chẳng hạn, một đa thức bậc 4. Vì vậy tôi làm:
Bây giờ tôi tạo một lưới mới cho các giá trị x để đánh giá hàm phù hợp
Khi tôi thực hiện tất cả việc vẽ biểu đồ (tập dữ liệu và đường cong phù hợp) bằng lệnh:
Tôi nhận được những điều sau: fit_data.pngNhững gì tôi mong đợi là chức năng điều chỉnh để khớp chính xác (ít nhất là gần giá trị lớn nhất của dữ liệu). Tôi đang làm gì sai? Cảm ơn trước. 51 hữu ích 0 bình luận 136k xem chia sẻ Hãy để tôi bắt đầu bằng cách nói rằng những gì tôi nhận được có thể không phải là những gì tôi mong đợi và có lẽ bạn có thể giúp tôi ở đây. Tôi có dữ liệu sau:
Bây giờ, tôi muốn kết hợp những dữ liệu này với, chẳng hạn, một đa thức bậc 4. Vì vậy tôi làm:
Bây giờ tôi tạo một lưới mới cho các giá trị x để đánh giá hàm phù hợp
Khi tôi thực hiện tất cả việc vẽ biểu đồ (tập dữ liệu và đường cong phù hợp) bằng lệnh:
Tôi nhận được những điều sau: fit_data.pngNhững gì tôi mong đợi là chức năng điều chỉnh để khớp chính xác (ít nhất là gần giá trị lớn nhất của dữ liệu). Tôi đang làm gì sai? Cảm ơn trước. 51 hữu ích 0 bình luận 136k xem chia sẻ Least squares polynomial fit. Note This forms part of the old polynomial API. Since version 1.4, the new polynomial API defined in Fit a polynomial
The x-coordinates of the M sample points y-coordinates of the sample points. Several data sets of sample points sharing the same x-coordinates can be fitted at once by passing in a 2D-array that contains one dataset per column. degintDegree of the fitting polynomial rcondfloat, optionalRelative condition number of the fit. Singular values smaller than this relative to the largest singular value will be ignored. The default value is len(x)*eps, where eps is the relative precision of the float type, about 2e-16 in most cases. fullbool, optionalSwitch determining nature of return value. When it is False (the default) just the coefficients are returned, when True diagnostic information from the singular value decomposition is also returned. warray_like, shape (M,), optionalWeights. If not None, the weight If given and not False, return not just the estimate but also its covariance matrix. By default, the covariance are scaled by chi2/dof, where
dof = M - (deg + 1), i.e., the weights are presumed to be unreliable except in a relative sense and everything is scaled such that the reduced chi2 is unity. This scaling is omitted if Polynomial coefficients, highest power first. If y was 2-D, the coefficients for k-th data set
are in These values are only returned if
For more details, see Present only if The rank of the coefficient matrix in the least-squares fit is deficient. The warning is only raised if The warnings can be turned off by >>> import warnings >>> warnings.simplefilter('ignore', np.RankWarning) Notes The solution minimizes the squared error \[E = \sum_{j=0}^k |p(x_j) - y_j|^2\] in the equations: x[0]**n * p[0] + ... + x[0] * p[n-1] + p[n] = y[0] x[1]**n * p[0] + ... + x[1] * p[n-1] + p[n] = y[1] ... x[k]**n * p[0] + ... + x[k] * p[n-1] + p[n] = y[k] The coefficient matrix of the coefficients p is a Vandermonde matrix.
Note that fitting polynomial coefficients is inherently badly conditioned when the degree of the polynomial is large or the interval of sample points is badly centered. The quality of the fit should always be checked in these cases. When polynomial fits are not satisfactory, splines may be a good alternative. References 1Wikipedia, “Curve fitting”, https://en.wikipedia.org/wiki/Curve_fitting 2Wikipedia, “Polynomial interpolation”, https://en.wikipedia.org/wiki/Polynomial_interpolation Examples >>> import warnings >>> x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) >>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0]) >>> z = np.polyfit(x, y, 3) >>> z array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254]) # may vary It is convenient to use >>> p = np.poly1d(z) >>> p(0.5) 0.6143849206349179 # may vary >>> p(3.5) -0.34732142857143039 # may vary >>> p(10) 22.579365079365115 # may vary High-order polynomials may oscillate wildly: >>> with warnings.catch_warnings(): ... warnings.simplefilter('ignore', np.RankWarning) ... p30 = np.poly1d(np.polyfit(x, y, 30)) ... >>> p30(4) -0.80000000000000204 # may vary >>> p30(5) -0.99999999999999445 # may vary >>> p30(4.5) -0.10547061179440398 # may vary Illustration: >>> import matplotlib.pyplot as plt >>> xp = np.linspace(-2, 6, 100) >>> _ = plt.plot(x, y, '.', xp, p(xp), '-', xp, p30(xp), '--') >>> plt.ylim(-2,2) (-2, 2) >>> plt.show() |