日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

数学建模——一维、二维插值模型详解Python代码

發布時間:2025/3/21 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数学建模——一维、二维插值模型详解Python代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數學建模——一維、二維插值模型詳解Python代碼

一、一維插值

# -*-coding:utf-8 -*- import numpy as np from scipy import interpolate import pylab as plx=np.linspace(0,10,11) #x=[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] y=np.sin(x) xnew=np.linspace(0,10,101) pl.plot(x,y,"ro")for kind in ["nearest","zero","slinear","quadratic","cubic"]:#插值方式#"nearest","zero"為階梯插值#slinear 線性插值#"quadratic","cubic" 為2階、3階B樣條曲線插值f=interpolate.interp1d(x,y,kind=kind)# ‘slinear’, ‘quadratic’ and ‘cubic’ refer to a spline interpolation of first, second or third order)ynew=f(xnew)pl.plot(xnew,ynew,label=str(kind)) pl.legend(loc="lower right") pl.show()

二、二維插值

# -*- coding: utf-8 -*- """ 演示二維插值。 """ import numpy as np from scipy import interpolate import pylab as pl import matplotlib as mpldef func(x, y):return (x+y)*np.exp(-5.0*(x**2 + y**2))

X-Y軸分為15*15的網格

y,x= np.mgrid[-1:1:15j, -1:1:15j]

fvals = func(x,y) # 計算每個網格點上的函數值 15*15的值
print len(fvals[0])

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

計算100*100的網格上的插值

xnew = np.linspace(-1,1,100)#x
ynew = np.linspace(-1,1,100)#y
fnew = newfunc(xnew, ynew)#僅僅是y值 100*100的值

繪圖

為了更明顯地比較插值前后的區別,使用關鍵字參數interpolation=‘nearest’

關閉imshow()內置的插值運算。

pl.subplot(121)
im1=pl.imshow(fvals, extent=[-1,1,-1,1], cmap=mpl.cm.hot, interpolation=‘nearest’, origin=“lower”)#pl.cm.jet
#extent=[-1,1,-1,1]為x,y范圍 favals為
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.show()

三、二維插值的三維展示方法```python # -*- coding: utf-8 -*- """ 演示二維插值。 """ # -*- coding: utf-8 -*- import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib as mpl from scipy import interpolate import matplotlib.cm as cm import matplotlib.pyplot as pltdef func(x, y):return (x+y)*np.exp(-5.0*(x**2 + y**2))# X-Y軸分為20*20的網格 x = np.linspace(-1, 1, 20) y = np.linspace(-1,1,20) x, y = np.meshgrid(x, y)#20*20的網格數據fvals = func(x,y) # 計算每個網格點上的函數值 15*15的值fig = plt.figure(figsize=(9, 6)) #Draw sub-graph1 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')#newfunc為一個函數# 計算100*100的網格上的插值 xnew = np.linspace(-1,1,100)#x ynew = np.linspace(-1,1,100)#y fnew = newfunc(xnew, ynew)#僅僅是y值 100*100的值 np.shape(fnew) is 100*100 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.show()

總結

以上是生活随笔為你收集整理的数学建模——一维、二维插值模型详解Python代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。