網站首頁 編程語言 正文
????????數模比賽中,常常需要對數據進行處理和分析,但有時候數據不多,就需要一些方法“模擬產生”一些靠譜的值來滿足需求,這就是插值的作用。本文不再具體介紹每個插值算法的內在原理,將直接通過調包實現。
????????下面,先上三件套,看一下原始數據的大致情況:
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 如何使用C語言將數字、字符等數據寫入、輸出到文本文件中_C 語言
- 2022-04-11 K8S部署Kafka界面管理工具(kafkamanager)方法詳解_云其它
- 2022-10-11 Linux下恢復應用程序被刪除的文件(lsof)
- 2022-12-11 python中windows鏈接linux執行命令并獲取執行狀態的問題小結_python
- 2022-05-31 C#實現WPF項目復制和移動文件夾_C#教程
- 2022-11-11 C#中的Hashtable?類使用詳解_C#教程
- 2022-07-03 使用pyscript在網頁中撰寫Python程式的方法_python
- 2022-02-14 centos7系統部署k8s集群詳細介紹_Linux
- 最近更新
-
- 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同步修改后的遠程分支