python數(shù)學(xué)建模 (2) 數(shù)值逼近問題

一維插值

應(yīng)用場景

樣本點是必須滿足的(關(guān)鍵點不允許偏移)
經(jīng)濟學(xué)陌僵、氣象,已經(jīng)有一些數(shù)據(jù)嗅骄,不想用微分方程机杜,在論文里放圖

線性插值與樣條插值

import numpy as np
import pylab as pl
from scipy import interpolate
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi + np.pi/4, 10)
y = np.sin(x)  
x_new = np.linspace(0, 2*np.pi + np.pi/4, 100)
f_linear = interpolate.interp1d(x, y) #一維插值
tck = interpolate.splrep(x, y) #形成樣條關(guān)系式
y_bspline = interpolate.splev(x_new, tck) #B樣條
#可視化
plt.xlabel(u'ampere/A')


plt.ylabel(u'volt/V')
plt.plot(x, y, "o", label = u"The original data")
plt.plot(x_new, f_linear(x_new), label = u"Linear interpolation")
plt.plot(x_new, y_bspline, label = u"B-spline interpolation")
pl.legend()
pl.show()

高階樣條插值

#創(chuàng)建數(shù)據(jù)點集
import numpy as np
x = np.linspace(0, 10, 11)
y = np.sin(x)

#繪制數(shù)據(jù)點集
import pylab as pl
pl.figure(figsize = (12,9))
pl.plot(x, y, 'ro')

#根據(jù)kind創(chuàng)建interpld對象f、計算插值結(jié)果
xnew = np.linspace(0, 10, 101)
from scipy import interpolate
for kind in ['nearest', 'zero', 'linear', 'quadratic', 5]:
    f = interpolate.interp1d(x, y, kind = kind)
    ynew = f(xnew)
    pl.plot(xnew, ynew, label = str(kind))
pl.xticks(fontsize = 20)
pl.yticks(fontsize = 20)
pl.legend(loc = 'lower right')
pl.show()

擴大x的范圍

5階樣條更加接近正弦曲線其弊,但x范圍更大以后5階的龍格現(xiàn)象也越明顯

二維插值

方法與一維數(shù)據(jù)插值類似癞己,為二維樣條插值

import numpy as np
from scipy import interpolate
import pylab as pl
import matplotlib as mpl

def func(x, y):
    return (x+y)*np.exp(-5.0*(x**2+y**2))

#X-Y軸分為15*15的網(wǎng)格
y, x = np.mgrid[-1:1:15j, -1:1:15j]

#計算每個網(wǎng)格點上函數(shù)值
fvals = func(x, y)

#三次樣條二維插值
newfunc = interpolate.interp2d(x, y, fvals, kind = 'cubic')

#計算100*100網(wǎng)格上插值
xnew = np.linspace(-1, 1, 100)
ynew = np.linspace(-1, 1, 100)
np.meshgrid(xnew, ynew)
fnew = newfunc(xnew, ynew)

#可視化
#讓imshow的參數(shù)interpolation設(shè)置為'nearest'方便比較插值處理
pl.subplot(121)
im1 = pl.imshow(fvals, extent = [-1, 1, -1, 1],
                cmap = mpl.cm.hot, interpolation='nearest', origin='lower')
pl.colorbar(im1)
pl.subplot(122)
im2 = pl.imshow(fnew, extent = [-1, 1, -1, 1], 
                cmap = mpl.cm.hot, interpolation='nearest', origin='lower')
pl.colorbar(im2)
pl.tight_layout()
pl.show()

二維插值的三維圖

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from scipy import interpolate
import matplotlib as mpl
import matplotlib.cm as cm
import matplotlib.pyplot as plt

def func(x, y):
    return (x+y)*np.exp(-5.0*(x**2+y**2))

#X-Y軸分為20*20的網(wǎng)格
x = np.linspace(-1, 1, 20)
y = np.linspace(-1, 1, 20)
x, y = np.meshgrid(x, y)
fvals = func(x,y)

#畫分圖1
fig = plt.figure(figsize = (9,6))
ax = plt.subplot(1, 2, 1, projection = '3d')
surf = ax.plot_surface(x, y, fvals, rstride=2, cstride=2,
                       cmap=cm.coolwarm, linewidth=0.5, antialiased=True)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('f(x,y)')
plt.colorbar(surf, shrink=0.5, aspect=5)    #添加顏色條標注

#二維插值
newfunc = interpolate.interp2d(x, y, fvals, kind='cubic')
#計算100*100網(wǎng)格上插值
xnew = np.linspace(-1, 1, 100)
ynew = np.linspace(-1, 1, 100)
fnew = newfunc(xnew, ynew)
xnew, ynew = np.meshgrid(xnew, ynew)
ax2 = plt.subplot(1, 2, 2, projection='3d')
surf2 = ax2.plot_surface(xnew, ynew, fnew, rstride=2, cstride=2,
                        cmap=cm.coolwarm, linewidth=0.5, antialiased=True)
ax2.set_xlabel('xnew')
ax2.set_ylabel('ynew')
ax2.set_zlabel('fnew(x,y)')
plt.colorbar(surf2, shrink=0.5, aspect=5)    #添加顏色條標注
plt.tight_layout()
plt.show()


左圖的二維數(shù)據(jù)集的函數(shù)值由于樣本較少,會顯得粗糙梭伐。而右圖對二維樣本數(shù)據(jù)進行三次樣條插值痹雅,擬合得到更多數(shù)據(jù)點的樣本值,繪圖后圖像明顯光滑多了

最小二乘擬合


import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
plt.figure(figsize=(9,9))
X = np.array([8.19, 2.72, 6.39, 8.71, 4.7, 2.66, 3.78])
Y = np.array([7.01, 2.78, 6.47, 6.71, 4.1, 4.23, 4.05])

#計算以p為參數(shù)的直線與原始數(shù)據(jù)之間的誤差
def f(p):
    k, b = p
    return (Y-(k*X+b))

#leastsq使得f的輸出數(shù)組的平方和最小糊识,參數(shù)初始值為[1,0]
r = leastsq(f, [1,0])
k, b = r[0]
plt.scatter(X, Y, s=100, alpha=1.0, marker='o', label = 'Data Points')
x = np.linspace(0, 10, 1000)
y = k*x + b
plt.plot(x, y, color='r', linewidth=5,
         linestyle=":", markersize=20, label = 'Fitting Curve')
plt.legend(loc=0, numpoints=1)
leg = plt.gca().get_legend()
ltext = leg.get_texts()
plt.setp(ltext, fontsize='xx-large')
plt.xlabel('Amphere/A', fontsize=20)
plt.ylabel('Volt/V', fontsize=20)
plt.xlim(0, x.max()*1.1)
plt.ylim(0, y.max()*1.1)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.legend(loc='upper left')    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绩社,一起剝皮案震驚了整個濱河市摔蓝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愉耙,老刑警劉巖贮尉,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異朴沿,居然都是意外死亡猜谚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門赌渣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魏铅,“玉大人,你說我怎么就攤上這事坚芜±婪迹” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵货岭,是天一觀的道長路操。 經(jīng)常有香客問我疾渴,道長千贯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任搞坝,我火速辦了婚禮搔谴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桩撮。我一直安慰自己敦第,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布店量。 她就那樣靜靜地躺著芜果,像睡著了一般。 火紅的嫁衣襯著肌膚如雪融师。 梳的紋絲不亂的頭發(fā)上右钾,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音旱爆,去河邊找鬼舀射。 笑死,一個胖子當著我的面吹牛怀伦,可吹牛的內(nèi)容都是我干的脆烟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼房待,長吁一口氣:“原來是場噩夢啊……” “哼邢羔!你這毒婦竟也來了驼抹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤张抄,失蹤者是張志新(化名)和其女友劉穎砂蔽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體署惯,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡左驾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了极谊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诡右。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖轻猖,靈堂內(nèi)的尸體忽然破棺而出帆吻,到底是詐尸還是另有隱情,我是刑警寧澤咙边,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布猜煮,位于F島的核電站,受9級特大地震影響败许,放射性物質(zhì)發(fā)生泄漏王带。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一市殷、第九天 我趴在偏房一處隱蔽的房頂上張望愕撰。 院中可真熱鬧,春花似錦醋寝、人聲如沸搞挣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囱桨。三九已至,卻和暖如春嗅绰,著一層夾襖步出監(jiān)牢的瞬間舍肠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工办陷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留貌夕,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓民镜,卻偏偏與公主長得像啡专,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子制圈,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. 拉格朗日多項式插值 了解概念 插值多項式插值節(jié)點范德蒙特(Vandermonde)行列式截斷誤差们童、插值余項...
    野狗子嗷嗷嗷閱讀 2,712評論 0 9
  • 這是一篇關(guān)于暑期數(shù)學(xué)建模課程的論文畔况,可能有點長和枯燥,會浪費大家一點時間慧库。第一次寫論文跷跪,寫的也不是很好,多多指教齐板。...
    呆呆說閱讀 3,397評論 0 5
  • ->點擊訪問個人博客吵瞻,相互交流學(xué)習<- 相關(guān)模型解決的問題數(shù)據(jù)分析類算法一覽100個經(jīng)典動態(tài)規(guī)劃方程 優(yōu)化問題 線...
    JackHCC閱讀 2,312評論 0 2
  • 使用教材:《數(shù)值分析》李慶揚,王能超甘磨,易大義 編橡羞。大致梳理整本書的內(nèi)容和重點。 第1章 數(shù)值分析與科學(xué)計算引論 本...
    流星落黑光閱讀 8,280評論 0 7
  • 1. 拉格朗日多項式插值 了解概念 插值多項式插值節(jié)點范德蒙特(Vandermonde)行列式截斷誤差济舆、插值余項...
    野狗子嗷嗷嗷閱讀 2,549評論 0 3