欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用scipy進(jìn)行曲線擬合的方法實例

 更新時間:2022年05月05日 11:08:26   作者:修煉之路  
這篇文章主要給大家介紹了關(guān)于Python使用scipy進(jìn)行曲線擬合的相關(guān)資料,Scipy優(yōu)化和擬合采用的是optimize模塊,該模塊提供了函數(shù)最小值(標(biāo)量或多維)、曲線擬合和尋找等式的根的有用算法,需要的朋友可以參考下

導(dǎo)讀

曲線擬合的應(yīng)用在生活中隨處可見,不知道大家是否還記得物理實驗中的自由落體運(yùn)動中下降高度與時間關(guān)系之間的探究,在初速度為0的情況下,我們想要探究下降高度與時間的關(guān)系。

我們當(dāng)時采用的方法是通過設(shè)置不同的下降時間來記錄下降的高度,測量記錄多組數(shù)據(jù)之后,再利用二維坐標(biāo)系將記錄的點(diǎn)繪制到坐標(biāo)系當(dāng)中去,然后保證繪制的曲線到這些點(diǎn)的距離之和最小,最終得到的曲線就是h與t的關(guān)系。

繪制出h和t的關(guān)系之后,我就可以知道任意取值t在初速度為0的情況下,下降高度h對應(yīng)的值。除此之外,曲線擬合的應(yīng)用還有很多例如房價預(yù)測、經(jīng)濟(jì)預(yù)測、股價預(yù)測等。

不知道,大家有沒有思考過,為什么我們可以通過測量值來繪制出t和h的關(guān)系曲線呢?這里面用到的邏輯究竟是什么呢?其實關(guān)于曲線的擬合通常有兩種解決方案:

  1. 我們已經(jīng)知道了自變量(x)和因變量(y)的關(guān)系,只是不知道參數(shù),通過觀察值來計算出參數(shù),就能計算出自變量和因變量之間的關(guān)系
  2. 利用萬能函數(shù)逼近器神經(jīng)網(wǎng)絡(luò)來擬合曲線,通過定義代價函數(shù),利用已有觀察值的輸入值來計算出預(yù)測值,再計算出預(yù)測值與觀測值的輸出值之間的差距,在通過反向傳播,來計算出神經(jīng)網(wǎng)絡(luò)的參數(shù)

下面我們主要探討如何利用方法1來實現(xiàn)曲線的擬合

曲線擬合

曲線擬合還可以分為兩種情況,第一種就是沒有約束的曲線擬合,第二種就是帶有約束條件的曲線擬合。scipy中提供了curve_fit函數(shù)使用非線性的最小二乘法用來擬合沒有約束條件的曲線,提供了least_squares函數(shù)用來擬合帶有約束條件的曲線。

  • 沒有約束條件的曲線擬合

  • 帶約束條件的曲線擬合

有時候在求解曲線參數(shù)的時候,會對參數(shù)的邊界做出一些限制,下面就展示了在對參數(shù)的邊界做出限制的情況下如何來求解的問題。我們使用jac矩陣結(jié)合最小二乘法來計算曲線的參數(shù)

import numpy as np
from scipy.optimize import least_squares
import matplotlib.pyplot as plt

def model(x,u):
    """定義擬合的曲線
    :param x:輸入值自變量
    :param u:輸入值函數(shù)的參數(shù)
    :return:返回值因變量
    """
    return x[0] * (u ** 2 + x[1] * u) / (u ** 2 + x[2] * u + x[3])

def fun(x,u,y):
    return model(x,u) - y

def jac(x,u,y):
    J = np.empty((u.size,x.size))
    den = u ** 2 + x[2] * u + x[3]
    num = u ** 2 + x[1] * u
    J[:,0] = num / den
    J[:,1] = x[0] * u / den
    J[:,2] = -x[0] * num * u / den ** 2
    J[:,3] = -x[0] * num / den ** 2
    return J

#輸入值自變量
u = np.array([4.0, 2.0, 1.0, 5.0e-1, 2.5e-1, 1.67e-1, 1.25e-1, 1.0e-1,
              8.33e-2, 7.14e-2, 6.25e-2])
#輸入值因變量
y = np.array([1.957e-1, 1.947e-1, 1.735e-1, 1.6e-1, 8.44e-2, 6.27e-2,
              4.56e-2, 3.42e-2, 3.23e-2, 2.35e-2, 2.46e-2])
#函數(shù)的參數(shù)
x0 = np.array([2.5, 3.9, 4.15, 3.9])
#利用jac矩陣結(jié)合最小二乘法來計算曲線的參數(shù),設(shè)置參數(shù)的取值在(0,100)之間
res = least_squares(fun, x0, jac=jac, bounds=(0, 100), args=(u, y), verbose=1)

#需要預(yù)測值得輸入值
u_test = np.linspace(0, 5)
#利用計算的曲線參數(shù)來計算預(yù)測值
y_test = model(res.x, u_test)
plt.plot(u, y, 'o', markersize=4, label='data')
plt.plot(u_test, y_test, label='fitted model')
plt.xlabel("u")
plt.ylabel("y")
plt.legend(loc='lower right')
plt.show()

總結(jié)

到此這篇關(guān)于Python使用scipy進(jìn)行曲線擬合的文章就介紹到這了,更多相關(guān)Python scipy曲線擬合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 全面解析Python的While循環(huán)語句的使用方法

    全面解析Python的While循環(huán)語句的使用方法

    這篇文章主要介紹了全面解析Python的While循環(huán)語句的使用方法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • 在python中利用pycharm自定義代碼塊教程(三步搞定)

    在python中利用pycharm自定義代碼塊教程(三步搞定)

    這篇文章主要介紹了在python中利用pycharm自定義代碼塊教程(三步搞定),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python如何實現(xiàn)Paramiko的二次封裝

    Python如何實現(xiàn)Paramiko的二次封裝

    這篇文章主要介紹了Python如何實現(xiàn)Paramiko的二次封裝,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • Python使用日志模塊快速調(diào)試代碼并記錄異常信息

    Python使用日志模塊快速調(diào)試代碼并記錄異常信息

    本文詳細(xì)介紹了Python logging日志模塊的使用方法,包括如何在代碼中使用logging記錄調(diào)試信息、如何設(shè)置日志級別、如何記錄異常信息等。通過本文的指南,讀者可以快速學(xué)會如何使用logging模塊進(jìn)行調(diào)試,并保留有用的日志信息,便于后續(xù)排查問題和優(yōu)化代碼
    2023-04-04
  • python寫入xml文件的方法

    python寫入xml文件的方法

    這篇文章主要介紹了python寫入xml文件的方法,涉及Python操作XML模塊實現(xiàn)針對XML文件操作的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 淺談python 里面的單下劃線與雙下劃線的區(qū)別

    淺談python 里面的單下劃線與雙下劃線的區(qū)別

    這篇文章主要介紹了淺談python 里面的單下劃線與雙下劃線的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Django+Celery實現(xiàn)動態(tài)配置定時任務(wù)的方法示例

    Django+Celery實現(xiàn)動態(tài)配置定時任務(wù)的方法示例

    這篇文章主要介紹了Django + Celery 實現(xiàn)動態(tài)配置定時任務(wù)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Python的NumPy使用之?dāng)?shù)組過濾

    Python的NumPy使用之?dāng)?shù)組過濾

    這篇文章主要介紹了Python的NumPy使用之?dāng)?shù)組過濾,在 NumPy中,我們使用布爾索引列表來過濾數(shù)組布爾索引列表是與數(shù)組中的索引相對應(yīng)的布爾值列表,需要的朋友可以參考下
    2023-07-07
  • 使用Keras加載含有自定義層或函數(shù)的模型操作

    使用Keras加載含有自定義層或函數(shù)的模型操作

    這篇文章主要介紹了使用Keras加載含有自定義層或函數(shù)的模型操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 詳解Python中類方法@classmethod的應(yīng)用技巧

    詳解Python中類方法@classmethod的應(yīng)用技巧

    在Python中,類方法(class method)是一種特殊的方法,可以在不創(chuàng)建類的實例的情況下調(diào)用,本文將詳細(xì)介紹類方法的概念、用法以及在實際開發(fā)中的應(yīng)用場景,希望對大家有所幫助
    2024-03-03

最新評論