好久沒有更新文章了,學校的教材發下來了,作業一下就變多了。
成都創新互聯公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站制作、成都做網站、外貿營銷網站建設、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的瑪曲網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
首先,把最終效果放出來:
運用樣條插值,即 B-Spline ,可以使你在圖表中使用曲線連接離散數據(在插值法中,這些離散數據稱為 節點 )
正如你在上面所看到的那樣,在Python中插值非常簡單, Scipy 中的 interpolate 為你提供了樣條插值所需要的一系列函數。
import部分就不多說了,
這里首先定義了一系列節點,這里數據是隨機的,
接下來,首先使用 linspace 為插值提供所需的x值, splrep 根據節點計算了樣條曲線的參數,最后將其傳遞給 splev 計算插值后的結果。
你可能是抱著想要用曲線連接節點的目的來看這篇文章,但看到這里還沒搞懂插值法是個什么玩意,那么接下來的內容就是在講數學中的插值法,與Python和Scipy已無關聯。
插值法,就是在給定的節點中作出合適的函數,使得這條曲線 經過每一個節點 ,這也就是為什么在數據可視化中使用插值而不是其他方法的原因,因為插值后仍然能夠準確知道每一節點所對應的值。
那么,是不是節點越多,插值的準確性就越高呢?
貌似是這樣,畢竟節點越多,對曲線的限制條件就越多,那準確性不久越高了。
但是呢,如果你使用多節點直接插值(不是在程序中插值,因為程序會使用分段樣條插值),你就會發現,曲線在兩段有明顯的震蕩,并且節點越多,震蕩越明顯、越大:
這種現象被稱為 Tolmé Runge 現象( 龍格現象 ),描述的就是這一問題。對此的數學證明在知乎上有, 傳送門 。
通過龍格現象,我們會發現,當節點數量趨向于無窮時,插值的誤差會趨向于無窮大:
那么,如何避免這一情況呢,可以把我們原先的等距節點替換成Chebyshev節點,但是如果我們的離散數據確實等距,這一方法不好用,那么就可以才用分段插值,我們的程序對龍格現象也是這樣處理的。
分段插值就是將高次多項式拆分成多個低次多項式,一般都拆分成三次多項式。
由于插值和擬合常常一起出現,所以這里也簡單提一下擬合。
擬合是對你給出的離散數據,作出于數據 差距最小 的函數,另外,按照擬合的結果,擬合也分線性擬合和非線性擬合。
擬合與插值的差別就在于,插值必須過節點,但是擬合不需要,所以擬合曲線的整體效果會更好,也就是更平滑。
擬合一般都用在數據分析里,因為擬合曲線更能夠看出整體的變化趨勢嘛。
這篇文章寫起來難度還是想當大,如果我的描述有問題的話,歡迎評論區留言。
前往我的博客查看本文
spline函數可以實現三次樣條插值 x = 0:10; y = sin(x); xx = 0:.25:10; yy = spline(x,y,xx); plot(x,y,'o',xx,yy) 另外fnplt csapi這兩個函數也是三次樣條插值函數,具體你可以help一下!
在 數學 學科 數值分析 中, 樣條 是一種特殊的 函數 ,由 多項式 分段定義。樣條的 英語 單詞spline來源于可變形的樣條工具,那是一種在 造船 和 工程制圖 時用來畫出光滑形狀的工具。在中國大陸,早期曾經被稱做“齒函數”。后來因為工程學術語中“放樣”一詞而得名。
在 插值 問題中,樣條插值通常比 多項式插值 好用。用低階的樣條插值能產生和高階的多項式插值類似的效果,并且可以避免被稱為 龍格現象 的數值不穩定的出現。并且低階的樣條插值還具有“保凸”的重要性質。
在 計算機科學 的 計算機輔助設計 和 計算機圖形學 中,樣條通常是指分段定義的多項式 參數曲線 。由于樣條構造簡單,使用方便,擬合準確,并能近似 曲線擬合 和交互式曲線設計中復雜的形狀,樣條是這些領域中曲線的常用表示方法。
scipy.interpolate.splrep(x,y,w = None,xb = None,xe = None,k = 3,task = 0,s = None,t = None,full_output = 0,per = 0,quiet = 1 )
找到一維曲線的B樣條曲線表示。
給定數據點集,確定區間上度k的平滑樣條近似。(x[i], y[i])xb = x = xe
x,y: array_like
定義曲線y = f(x)的數據點。
w: array_like,optional
權重的嚴格正秩1數組,其長度與x和y相同。權重用于計算加權最小二乘樣條擬合。如果y值中的誤差具有矢量d給出的標準偏差,則w應為1 / d。默認值為1(len(x))。
xb, xe:float, optional
適合的間隔。如果為None,則它們分別默認為x [0]和x [-1]。
k: int,optional
花鍵擬合的程度。建議使用三次樣條。甚至應避免使用k值,尤其是在s值小的情況下。1 = k = 5
task:{1, 0, -1}, optional
如果task == 0,則在給定的平滑因子s下找到t和c。
如果task == 1,則找到t和c作為平滑因子s的另一個值。對于同一組數據,必須先前有一個task = 0或task = 1的調用(t將存儲為內部使用)
如果task = -1,則找到給定結點t的加權最小二乘樣條曲線。這些應該是內部結,因為兩端的結將自動添加。
s:float, optional
平滑條件。滿足以下條件來確定平滑度:sum((w (y-g)) * 2,axis = 0)= s其中g(x)是(x,y)的平滑插值。用戶可以使用s來控制貼合度和貼合度之間的權衡。較大的s表示更平滑,而較小的s表示較不平滑。s的推薦值取決于權重w。如果權重代表y的標準偏差的倒數,則應在(m-sqrt(2 * m),m + sqrt(2 * m))范圍內找到一個好的s值,其中m是x,y和w中的數據點。默認值:如果提供了權重,則s = m-sqrt(2 * m)。如果未提供權重,則s = 0.0(內插)。
t:array_like, optional
任務= -1所需的結。如果給出,則任務自動設置為-1。
f:full_outputbool, optional
如果非零,則返回可選輸出。
per:bool, optional
如果非零,則將數據點視為周期為x [m-1]-x [0]的周期,然后返回平滑的周期樣條近似。不使用y [m-1]和w [m-1]的值。
quiet:bool, optional
非零以禁止顯示消息。不推薦使用此參數;請改用標準的Python警告過濾器。
Returns:
tck:tuple
元組(t,c,k),包含結向量,B樣條系數和樣條度。
fp:array, optional
樣條近似值的平方殘差的加權總和。
ier:int, optional
有關splrep成功的整數標志。如果ier = 0,則表示成功。如果[1,2,3]中的ier發生錯誤,但未引發。否則會引發錯誤。
msg:str, optional
對應于整數標志ier的消息。
下面插值一個函數
分享題目:python中的樣條函數 python樣條曲線
當前路徑:http://vcdvsql.cn/article44/doodeee.html
成都網站建設公司_創新互聯,為您提供外貿建站、品牌網站建設、定制開發、網站維護、網站制作、軟件開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯