• 数学建模插值分析法(附完整代码)python实现(插值&拟合)


    直白来说
    插值:求过已知有限个数据点的近似函数。
    拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下它在这些点上的总偏差最小。
    插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者的数学方法上是完全不同的。而面对一个实际问题,究竟应该用插值还是拟合,有时容易确定,有时则并不明显。
    在这里插入图片描述
    插值函数的作用就是用于函数的拟合. 通常插值函数的应用就是通过函数表来构造一个足够简单, 并且能够反映函数 的特征的函数。
    在这里插入图片描述
    并且插值函数具有唯一性
    在这里插入图片描述
    这样表示的话矩阵为
    在这里插入图片描述
    在这里插入图片描述
    理论大概就是这些吧,CSDN我不会在上面打公式,所以在word里打好直接截图了,做建模的时候可能要费点劲了,那么说句最直白的,插值分析分为两种方法,一种是内插法和外插法,最大的区别就是处理方法不同、职责不同、工作内容不同,
    核心区别就是:内插法在样本数据的范围内预测,比外插法要准。用回归方程预测范围以外的数值称为外插法,而内插法是对数据范围内的点进行预测。
    内插比外插要准的多。下面用内插法实现。

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from scipy.interpolate import UnivariateSpline
    plt.rcParams['font.sans-serif'] = ['simhei']
    plt.rcParams['axes.unicode_minus'] = False
    data=pd.read_excel(open('data.xlsx', 'rb'), sheet_name='Sheet1')
    x= data['自变量']
    y= data['因变量']
    print('光滑因子默认为0.1 如需修改请查看源码')
    print('默认内插法分析')
    print('请输入要插值自变量的起始值:')
    input1=input(int())
    print('请输入要插值自变量的中止值:')
    input2=input(int())
    print('请输入要插入点的个数:')
    input3=input(int())
    print('请输入图表标题:')
    input4=input(str())
    print('请输入自变量名称:')
    input5=input(str())
    print('请输入因变量名称:')
    input6=input(str())
    
    xnew = np.linspace(int(input1),int(input2),int(input3))
    fSpl1 = UnivariateSpline(x, y, s=0)
    y1 = fSpl1(xnew)
    fSpl2 = UnivariateSpline(x, y)
    y2 = fSpl2(xnew)
    fSpl2.set_smoothing_factor(0.1)
    y3 = fSpl2(xnew)
    print("拟合后最终结果为:%s"%y3)
    
    fig, ax = plt.subplots(figsize=(8,6))
    plt.plot(x, y,'s',markersize=15,
             markerfacecolor="black",label="真实值")
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.plot(xnew, y3, 'b--', label="插值结果",ms=10)
    plt.xlabel(str(input5),size=14)
    plt.ylabel(str(input6),size =14)
    ax.set_title(str(input4))
    plt.legend(loc="best")
    with open('插值结果.txt',"w+",encoding='utf-8') as fp:
        fp.write(str(y3))
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    代码释义fSpl2.set_smoothing_factor(0.1)意思是平滑因子为0.1 当然我认为平滑因子是0.1可以了不用过分追究。
    使用时在根目录文件夹下放一个data.xlsx的文件如图所示
    在这里插入图片描述
    data.xlsx文件内设为两列 一列命名为自变量 另一列命名为因变量如图所示:
    在这里插入图片描述
    起始值随意 要看预测哪一路段,中止值同起始值。插入值50个点最好,下面就是设置图表格x轴y轴名字。
    在这里插入图片描述
    运行结果为:
    在这里插入图片描述
    上次没做好 仅拿了美赛H奖,唉 算是人生的一大遗憾。
    请添加图片描述
    GOOD LUCK for everybody
    ——from deyuLiang

  • 相关阅读:
    人工神经网络的基本属性,神经网络四个基本属性
    大一新生HTML期末作业,网页制作作业——海鲜餐饮网站登录页面(单页面)HTML+CSS+JavaScript
    Scatter plot with histograms
    JAVA设计模式1:单例模式,确保每个类只能有一个实例
    使用 SQL 的方式查询消息队列数据以及踩坑指南
    如何控制滚轮横向滑动(原生JS实现方法)
    【华为OD机试真题 python】 第k个排列【2022 Q4 | 100分】
    迭代器的封装与反向迭代器
    算法通关村第16关【白银】| 滑动窗口经典问题
    linux下python连接oracle数据库
  • 原文地址:https://blog.csdn.net/weixin_46900108/article/details/126529405