網站首頁 編程語言 正文
????????數模比賽中,常常需要對數據進行處理和分析,但有時候數據不多,就需要一些方法“模擬產生”一些靠譜的值來滿足需求,這就是插值的作用。本文不再具體介紹每個插值算法的內在原理,將直接通過調包實現。
????????下面,先上三件套,看一下原始數據的大致情況:
import numpy as np import pandas as pd import matplotlib.pyplot as plt data = pd.read_excel('data.xlsx')
????????拉格朗日插值算法
????????原始數據我們采用sin(x)的形式,看一下原始數據點:
import scipy from scipy.interpolate import lagrange x = np.linspace(0,10,6) #0~10等差插入11個數,需要預測的值 y = np.sin(x) x_new = np.linspace(0,10,200) #用于繪制圖形 y_new = np.sin(x_new) plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b')
f1 = lagrange(x,y) plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b') plt.plot(x_new,f1(x_new),'g')
????????看一下擬合效果:
????????分段線性插值?
f4 = scipy.interpolate.interp1d(x,y,kind='linear') plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b') plt.plot(x_new,f4(x_new),'g')
????????分段二次(三次)插值
f5 = scipy.interpolate.interp1d(x,y,kind='quadratic') #三次就是cubic plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b') plt.plot(x_new,f5(x_new),'g')
????????牛頓插值法:暫未找到相應的庫
????????分段三次埃爾米特插值
f5 = scipy.interpolate.interp1d(x,y,kind='quadratic') #三次就是cubic plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b') plt.plot(x_new,f5(x_new),'g')
????????三次樣條插值
f3 = scipy.interpolate.CubicSpline(x,y) plt.plot(x,y,'ro') plt.plot(x_new,y_new,'b') plt.plot(x_new,f3(x_new),'g')
????????接下來,讓我們看看一個具體實例的比較:
y = np.array(data)[:,1] x = np.linspace(2009,2018,10) x_new = np.array([2019,2020,2021]) f2 = scipy.interpolate.PchipInterpolator(x,y) f3 = scipy.interpolate.CubicSpline(x,y) #coding:utf-8 plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號 plt.plot(x,y,color='black',marker='o',label='樣本點') plt.plot(x_new,f2(x_new),'b-',marker='x',label='分段三次埃米爾特') plt.plot(x_new,f3(x_new),'r-',marker='x',label='三次樣條插值') plt.xticks(range(2009,2022,1)) #調整x軸間距 plt.legend() plt.show()
Tips:①最常用的就是埃爾米特三次插值、三次樣條插值
? ? ? ? ? ②拉格朗日插值雖然在訓練集上表現良好,但是在測試集上著實難堪,尤其擬合高階函數時,千萬不要輕易用此預測
原文鏈接:https://blog.csdn.net/qq_22841119/article/details/122953561
相關推薦
- 2022-08-21 Python?Map函數保姆級使用教程_python
- 2024-07-18 MybatisPlus優雅實現加密?
- 2022-04-20 Python統計節假日剩余天數的腳本_python
- 2022-05-14 shell腳本如何讀取properties文件中的值_linux shell
- 2022-12-14 深入了解Rust中trait的使用_Rust語言
- 2022-05-13 UnicodeEncodeError: ‘utf-8‘ codec can‘t encode cha
- 2022-09-25 CopyOnWriteArrayList的源碼分析
- 2022-02-20 千分位保留兩位小數,出現“toFixed() is not a function”的解決辦法
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支