關於本:polynomial equation parameters 在那裏我得到一個平方函數y = a*x² + b*x + c
3個參數,現在我只想得到它描述了我的功能y = a*x²
平方函數的第一參數。換言之:我想設置b=c=0
並獲得a
的修改參數。如果我理解正確,polyfit無法做到這一點。numpy.polyfit有適合的參數
4
A
回答
7
這可以通過numpy.linalg.lstsq完成。爲了解釋如何使用它,最簡單的方法就是展示如何通過「手動」來實現標準的二階polyfit。假設你有您的測量矢量x
和y
,首先構造一個所謂design matrixM
像這樣:
M = np.column_stack((x**2, x, np.ones_like(x)))
之後就可以得到通常的係數作爲最小二乘方程的解M * k = y
使用lstsq
像此:
k, _, _, _ = np.linalg.lstsq(M, y)
其中k
是列向量[a, b, c]
與通常的係數。請注意0返回一些其他參數,您可以忽略。這是一個非常強大的技巧,它允許您將y
適用於您放入設計矩陣的任何列的線性組合。它可以用於例如對於類型爲z = a * x + b * y
的二維擬合(請參閱,例如,this example,我在Matlab中使用了相同的技巧),或者在您的問題中缺少係數的多重聚類。
就你而言,設計矩陣只是一個包含x**2
的列。簡單的例子:
import numpy as np
import matplotlib.pylab as plt
# generate some noisy data
x = np.arange(1000)
y = 0.00* x**2 + 3*np.random.randn(len(x))
# do fit
M = np.column_stack((x**2,)) # construct design matrix
k, _, _, _ = np.linalg.lstsq(M, y) # least-square fit of M * k = y
# quick plot
plt.plot(x, y, '.', x, k*x**2, 'r', linewidth=3)
plt.legend(('measurement', 'fit'), loc=2)
plt.title('best fit: y = {:.8f} * x**2'.format(k[0]))
plt.show()
結果:
-1
這些係數可以使平方誤差最小化,您不需要指定它們。但是,如果某些係數太小,則可以將其設置爲零。例如,我點的曲線上y = 33*x²
列表:
In [51]: x=np.arange(20)
In [52]: y=33*x**2 #y = 33*x²
In [53]: coeffs=np.polyfit(x, y, 2)
In [54]: coeffs
Out[54]: array([ 3.30000000e+01, 8.99625199e-14, -7.62430619e-13])
In [55]: epsilon=np.finfo(np.float32).eps
In [56]: coeffs[np.abs(coeffs)<epsilon]=0
In [57]: coeffs
Out[57]: array([ 33., 0., 0.])
+0
這隻適用於無噪聲數據。如果您的數據包含噪音,其他係數也將爲非零,並且您的二次項的估計不包含最佳值。 –
相關問題
- 1. 適合參數
- 2. 如何使用numpy.polyfit來擬合圖形?
- 3. 適合模擬到具有多個擬合參數
- 4. 適合scipy.optimize參數的錯誤
- 5. 最合適的AI參數加權?
- 6. numpy.polyfit的錯誤是什麼?
- 7. numpy.polyfit和scipy.polyfit和有什麼不一樣?
- 8. 可變參數模板:選擇具有合適的方法
- 9. 3參數Weibull適合.NET .NET框架
- 10. 爲什麼float參數適合int函數參數?
- 11. 具有適當參數的函數
- 12. 是numpy.polyfit與1度的擬合,TLS或OLS?
- 13. Gnuplot:適合沒有範圍的數據
- 14. 使用合適的參數上傳數據到MsSQL使用codeigniter
- 15. 從工作區傳遞參數以適合MATLAB中的函數
- 16. 如何使用PolynomialFeatures選擇最合適的度數參數?
- 17. 合併函數參數的適當命名約定是什麼?
- 18. 找不到適合ImageView的構造函數(無參數)
- 19. libcurl函數給出了一個不合適的參數
- 20. RestTemplate「沒有合適的HttpMessageConverter」
- 21. jcall中的R木槌錯誤:java.lang.NoSuchMethodException:給定參數沒有合適的方法
- 22. 適合所有分數加入地圖
- 23. Symfony的3 - 有沒有合適的CSPRNG
- 24. 參數不適用
- 25. 適合的數據結構
- 26. 適合的數據類型
- 27. 合適的數據結構
- 28. 不適用()的參數
- 29. 帶有混合參數的Ember.js助手
- 30. 有兩個參數的Haskell組合
'np.polyfit'來擬合多項式的幾點問題,你怎麼知道你的'Y = A *x²'會適合你的觀點? – zhangxaochen
我可以保證我的點數符合y = a *x²...當我使用polyfit時,對於b和c,我得到一些<10 ^( - 2)的值。 (而a> 20) – Munchkin