资源简介

利用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])

评论

共有 条评论