教你如何利用python進行數值分析
一、準備
噪聲是在擬合過程中常用的幹擾手段,常用的噪聲:
1.統一分佈 U(a,b)
f ( x ) = { 1 i f a ≤ x < b 0 o t h e r f(x)=\begin{cases}\begin{aligned}1&\quad if\quad a\le x<b \\ 0&\quad other\end{aligned}\end{cases} f(x)={10ifa≤x<bother
import numpy as np x=np.random.uniform(a,b,100) #產生長度為100的U(a,b)
2.正態分佈N( μ \mu μ, σ 2 \sigma^2 σ2)
import numpy as np x=np.random.normal(mu, sig, 100) #產生長度為100的N(mu, sqart(sig))
二、三次樣條插值
def spline_fit(): size = 20 x = np.linspace(-10, 10, size) y = np.sin(x) + np.random.normal(0, 0.1, size) y2 = [0] * len(y) # for y_i in y: pp.plot(x, y) cs = CubicSpline(x, y) x2 = x = np.linspace(-10, 10, size * 100) pp.plot(x2, cs(x2)) pp.show()
三、最小二乘擬合
def least_square(): f = lambda p0, xx: p0[0] * np.sin(xx * p0[1]) + p0[2] LEN = 100 x = np.linspace(-1, 1, LEN) y = x ** 2 + 5 # 默認情況,param隻會返回求得的參數和返回的錯誤碼,1-4為成功,5-8為失敗,如果想輸出更多參數,可以指定full_out=1,可以看到出錯原因和其他參數 param = leastsq(lambda p0, xx, yy: f(p0, xx) - yy, (1, 1, 1), args=(x, y)) #初值的選擇比較重要,如果選取不當,容易陷入局部最優 print(param) pp.scatter(x, y) p0 = param[0] pp.plot(x, f(p0, x)) pp.show()
最小二乘的初值選取非常重要,以下是三份完全相同的數據,雖然最後都收斂瞭,但是初值不同,得到瞭完全不同的擬合結果
初值為 ( 1 , 2 , 1 ) (1,2,1) (1,2,1)
初值為 ( 1 , 1 , 1 ) (1,1,1) (1,1,1)
初值為 ( 10 , 10 , 1 ) (10,10,1) (10,10,1)
四、拉格朗日乘子法
def lagrange() from scipy.optimize import minimize import numpy as np e = 1e-10 fun = lambda x: 8 * (x[0] * x[1] * x[2]) # f(x,y,z) =8 *x*y*z cons = ({'type': 'eq', 'fun': lambda x: x[0] ** 2 + x[1] ** 2 + x[2] ** 2 - 1}, # x^2 + y^2 + z^2=1 {'type': 'ineq', 'fun': lambda x: x[0] - e}, # x>=e等價於 x > 0 {'type': 'ineq', 'fun': lambda x: x[1] - e}, {'type': 'ineq', 'fun': lambda x: x[2] - e} ) x0 = np.array((1.0, 1.0, 1.0)) # 設置初始值 res = minimize(fun, x0, method='SLSQP', constraints=cons) print('最大值:', res.fun) print('最優解:', res.x) print('迭代終止是否成功:', res.success) print('迭代終止原因:', res.message)
到此這篇關於教你如何利用python進行數值分析的文章就介紹到這瞭,更多相關python數值分析內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python Matplotlib數據可視化模塊使用詳解
- python數據可視化plt庫實例詳解
- 初識python的numpy模塊
- 從np.random.normal()到正態分佈的擬合操作
- Python高級數據分析之pandas和matplotlib繪圖