python中的樣條函數(shù) python樣條曲線

「Scipy」樣條插值在數(shù)據(jù)可視化中的運(yùn)用

好久沒有更新文章了,學(xué)校的教材發(fā)下來了,作業(yè)一下就變多了。

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的瑪曲網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

首先,把最終效果放出來:

運(yùn)用樣條插值,即 B-Spline ,可以使你在圖表中使用曲線連接離散數(shù)據(jù)(在插值法中,這些離散數(shù)據(jù)稱為 節(jié)點(diǎn) )

正如你在上面所看到的那樣,在Python中插值非常簡(jiǎn)單, Scipy 中的 interpolate 為你提供了樣條插值所需要的一系列函數(shù)。

import部分就不多說了,

這里首先定義了一系列節(jié)點(diǎn),這里數(shù)據(jù)是隨機(jī)的,

接下來,首先使用 linspace 為插值提供所需的x值, splrep 根據(jù)節(jié)點(diǎn)計(jì)算了樣條曲線的參數(shù),最后將其傳遞給 splev 計(jì)算插值后的結(jié)果。

你可能是抱著想要用曲線連接節(jié)點(diǎn)的目的來看這篇文章,但看到這里還沒搞懂插值法是個(gè)什么玩意,那么接下來的內(nèi)容就是在講數(shù)學(xué)中的插值法,與Python和Scipy已無關(guān)聯(lián)。

插值法,就是在給定的節(jié)點(diǎn)中作出合適的函數(shù),使得這條曲線 經(jīng)過每一個(gè)節(jié)點(diǎn) ,這也就是為什么在數(shù)據(jù)可視化中使用插值而不是其他方法的原因,因?yàn)椴逯岛笕匀荒軌驕?zhǔn)確知道每一節(jié)點(diǎn)所對(duì)應(yīng)的值。

那么,是不是節(jié)點(diǎn)越多,插值的準(zhǔn)確性就越高呢?

貌似是這樣,畢竟節(jié)點(diǎn)越多,對(duì)曲線的限制條件就越多,那準(zhǔn)確性不久越高了。

但是呢,如果你使用多節(jié)點(diǎn)直接插值(不是在程序中插值,因?yàn)槌绦驎?huì)使用分段樣條插值),你就會(huì)發(fā)現(xiàn),曲線在兩段有明顯的震蕩,并且節(jié)點(diǎn)越多,震蕩越明顯、越大:

這種現(xiàn)象被稱為 Tolmé Runge 現(xiàn)象( 龍格現(xiàn)象 ),描述的就是這一問題。對(duì)此的數(shù)學(xué)證明在知乎上有, 傳送門 。

通過龍格現(xiàn)象,我們會(huì)發(fā)現(xiàn),當(dāng)節(jié)點(diǎn)數(shù)量趨向于無窮時(shí),插值的誤差會(huì)趨向于無窮大:

那么,如何避免這一情況呢,可以把我們?cè)鹊牡染喙?jié)點(diǎn)替換成Chebyshev節(jié)點(diǎn),但是如果我們的離散數(shù)據(jù)確實(shí)等距,這一方法不好用,那么就可以才用分段插值,我們的程序?qū)埜瘳F(xiàn)象也是這樣處理的。

分段插值就是將高次多項(xiàng)式拆分成多個(gè)低次多項(xiàng)式,一般都拆分成三次多項(xiàng)式。

由于插值和擬合常常一起出現(xiàn),所以這里也簡(jiǎn)單提一下擬合。

擬合是對(duì)你給出的離散數(shù)據(jù),作出于數(shù)據(jù) 差距最小 的函數(shù),另外,按照擬合的結(jié)果,擬合也分線性擬合和非線性擬合。

擬合與插值的差別就在于,插值必須過節(jié)點(diǎn),但是擬合不需要,所以擬合曲線的整體效果會(huì)更好,也就是更平滑。

擬合一般都用在數(shù)據(jù)分析里,因?yàn)閿M合曲線更能夠看出整體的變化趨勢(shì)嘛。

這篇文章寫起來難度還是想當(dāng)大,如果我的描述有問題的話,歡迎評(píng)論區(qū)留言。

前往我的博客查看本文

如何通過python實(shí)現(xiàn)三次樣條插值

spline函數(shù)可以實(shí)現(xiàn)三次樣條插值 x = 0:10; y = sin(x); xx = 0:.25:10; yy = spline(x,y,xx); plot(x,y,'o',xx,yy) 另外fnplt csapi這兩個(gè)函數(shù)也是三次樣條插值函數(shù),具體你可以help一下!

數(shù)值分析中的樣條函數(shù):使用scipy.interpolate.splrep函數(shù)實(shí)現(xiàn)

在 數(shù)學(xué) 學(xué)科 數(shù)值分析 中, 樣條 是一種特殊的 函數(shù) ,由 多項(xiàng)式 分段定義。樣條的 英語 單詞spline來源于可變形的樣條工具,那是一種在 造船 和 工程制圖 時(shí)用來畫出光滑形狀的工具。在中國大陸,早期曾經(jīng)被稱做“齒函數(shù)”。后來因?yàn)楣こ虒W(xué)術(shù)語中“放樣”一詞而得名。

在 插值 問題中,樣條插值通常比 多項(xiàng)式插值 好用。用低階的樣條插值能產(chǎn)生和高階的多項(xiàng)式插值類似的效果,并且可以避免被稱為 龍格現(xiàn)象 的數(shù)值不穩(wěn)定的出現(xiàn)。并且低階的樣條插值還具有“保凸”的重要性質(zhì)。

在 計(jì)算機(jī)科學(xué) 的 計(jì)算機(jī)輔助設(shè)計(jì) 和 計(jì)算機(jī)圖形學(xué) 中,樣條通常是指分段定義的多項(xiàng)式 參數(shù)曲線 。由于樣條構(gòu)造簡(jiǎn)單,使用方便,擬合準(zhǔn)確,并能近似 曲線擬合 和交互式曲線設(shè)計(jì)中復(fù)雜的形狀,樣條是這些領(lǐng)域中曲線的常用表示方法。

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樣條曲線表示。

給定數(shù)據(jù)點(diǎn)集,確定區(qū)間上度k的平滑樣條近似。(x[i], y[i])xb = x = xe

x,y: array_like

定義曲線y = f(x)的數(shù)據(jù)點(diǎn)。

w: array_like,optional

權(quán)重的嚴(yán)格正秩1數(shù)組,其長度與x和y相同。權(quán)重用于計(jì)算加權(quán)最小二乘樣條擬合。如果y值中的誤差具有矢量d給出的標(biāo)準(zhǔn)偏差,則w應(yīng)為1 / d。默認(rèn)值為1(len(x))。

xb, xe:float, optional

適合的間隔。如果為None,則它們分別默認(rèn)為x [0]和x [-1]。

k: int,optional

花鍵擬合的程度。建議使用三次樣條。甚至應(yīng)避免使用k值,尤其是在s值小的情況下。1 = k = 5

task:{1, 0, -1}, optional

如果task == 0,則在給定的平滑因子s下找到t和c。

如果task == 1,則找到t和c作為平滑因子s的另一個(gè)值。對(duì)于同一組數(shù)據(jù),必須先前有一個(gè)task = 0或task = 1的調(diào)用(t將存儲(chǔ)為內(nèi)部使用)

如果task = -1,則找到給定結(jié)點(diǎn)t的加權(quán)最小二乘樣條曲線。這些應(yīng)該是內(nèi)部結(jié),因?yàn)閮啥说慕Y(jié)將自動(dòng)添加。

s:float, optional

平滑條件。滿足以下條件來確定平滑度:sum((w (y-g)) * 2,axis = 0)= s其中g(shù)(x)是(x,y)的平滑插值。用戶可以使用s來控制貼合度和貼合度之間的權(quán)衡。較大的s表示更平滑,而較小的s表示較不平滑。s的推薦值取決于權(quán)重w。如果權(quán)重代表y的標(biāo)準(zhǔn)偏差的倒數(shù),則應(yīng)在(m-sqrt(2 * m),m + sqrt(2 * m))范圍內(nèi)找到一個(gè)好的s值,其中m是x,y和w中的數(shù)據(jù)點(diǎn)。默認(rèn)值:如果提供了權(quán)重,則s = m-sqrt(2 * m)。如果未提供權(quán)重,則s = 0.0(內(nèi)插)。

t:array_like, optional

任務(wù)= -1所需的結(jié)。如果給出,則任務(wù)自動(dòng)設(shè)置為-1。

f:full_outputbool, optional

如果非零,則返回可選輸出。

per:bool, optional

如果非零,則將數(shù)據(jù)點(diǎn)視為周期為x [m-1]-x [0]的周期,然后返回平滑的周期樣條近似。不使用y [m-1]和w [m-1]的值。

quiet:bool, optional

非零以禁止顯示消息。不推薦使用此參數(shù);請(qǐng)改用標(biāo)準(zhǔn)的Python警告過濾器。

Returns:

tck:tuple

元組(t,c,k),包含結(jié)向量,B樣條系數(shù)和樣條度。

fp:array, optional

樣條近似值的平方殘差的加權(quán)總和。

ier:int, optional

有關(guān)splrep成功的整數(shù)標(biāo)志。如果ier = 0,則表示成功。如果[1,2,3]中的ier發(fā)生錯(cuò)誤,但未引發(fā)。否則會(huì)引發(fā)錯(cuò)誤。

msg:str, optional

對(duì)應(yīng)于整數(shù)標(biāo)志ier的消息。

下面插值一個(gè)函數(shù)

分享題目:python中的樣條函數(shù) python樣條曲線
當(dāng)前路徑:http://www.muchs.cn/article44/doodeee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、品牌網(wǎng)站建設(shè)定制開發(fā)、網(wǎng)站維護(hù)網(wǎng)站制作、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)