-
大小: 5KB文件類型: .py金幣: 1下載: 0 次發布日期: 2021-05-15
- 語言: Python
- 標簽: python??matplotlib??newton??lagrange??
資源簡介
利用python中matplotlib庫,實現繪制牛頓插值、拉格朗日插值、三次樣條插值函數圖像。
隨機在圖像上產生5個隨機點,用三種插值方式求函數,并用python中matplotlib庫繪制在圖像上
代碼片段和文件信息
import?sys
from?PyQt5.QtWidgets?import?QApplication?QMainWindow?QSizePolicy?QPushButton
from?matplotlib.backends.backend_qt5agg?import?FigureCanvasQTAgg?as?FigureCanvas
from?matplotlib.figure?import?Figure
import?matplotlib.pyplot?as?plt
import?numpy?as?np
import?scipy.interpolate?as?spi
#顯示中文和負數
plt.rcParams[‘font.sans-serif‘]=[‘SimHei‘]
plt.rcParams[‘axes.unicode_minus‘]=False
class?App(QMainWindow):
????def?__init__(self):
????????super().__init__()
????????self.initUI()
????def?initUI(self):
????????self.setWindowtitle(“插值方法“)
????????self.setGeometry(200?200?640?400)
????????m?=?Interpolation(self?width=5?height=4)#實例化一個畫布對象
????????m.move(0?0)
????????#設置隨機數按鈕
????????button?=?QPushButton(‘隨機數‘?self)
????????button.setToolTip(“產生5個隨機數“)
????????button.move(520?20)
????????button.resize(100?75)
????????button.clicked.connect(m.main)
????????#設置牛頓插值按鈕
????????button?=?QPushButton(‘牛頓插值‘?self)
????????button.move(520?115)
????????button.resize(100?75)
????????button.clicked.connect(m.main1)
????????#設置拉格朗日按鈕
????????button?=?QPushButton(‘拉格朗日插值‘?self)
????????button.move(520?210)
????????button.resize(100?75)
????????button.clicked.connect(m.main2)
????????#設置三次樣條插值
????????button?=?QPushButton(‘三次樣條插值‘?self)
????????button.move(520?305)
????????button.resize(100?75)
????????button.clicked.connect(m.main3)
????????self.show()
#插值方法類
class?Interpolation(FigureCanvas):
????def?__init__(self?parent=None?width=5?height=4?dpi=100):
????????fig?=?Figure(figsize=(width?height)?dpi=dpi)
????????self.axes?=?fig.add_subplot(111)
????????FigureCanvas.__init__(self?fig)
????????self.setParent(parent)
????????FigureCanvas.setSizePolicy(self
???????????????????????????????????QSizePolicy.Expanding
???????????????????????????????????QSizePolicy.Expanding)
????????FigureCanvas.updateGeometry(self)
????????#初始為牛頓插值圖像
????????#self.main()
????????self.X?=?sorted(self.suiji(-20205))
????????self.Y?=?sorted(self.suiji(-20205))
????#牛頓插值函數
????def?newton_interpolation(XYinit):
????????sum=Y[0]
????????temp=np.zeros((len(X)len(X)))
????????#將第一行賦值
????????for?i?in?range(0len(X)):
????????????temp[i0]=Y[i]
????????temp_sum=1.0
????????for?i?in?range(1len(X)):
????????????#x的多項式
????????????temp_sum=temp_sum*(init-X[i-1])
評論
共有 條評論