【Koopman】从傅立叶到库普曼:长期时间序列预测的谱方法(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Python代码、文章下载


💥1 概述

我们提出了一种用于线性和非线性准周期动力系统产生的时间信号的长期预测的频谱方法。对于线性信号,我们引入了一种类似于傅里叶变换的算法,但不依赖于周期性假设,允许在可能是任意采样间隔的情况下进行预测。然后,我们通过利用Koopman理论将这种算法扩展到处理非线性。所得到的算法在非线性、数据相关的基础上进行了频谱分解。这两种算法的优化目标都是高度非凸的。然而,将目标表达在频域中使我们能够以可扩展和高效的方式计算误差曲面的全局最优解,部分地利用了快速傅里叶变换的计算特性。由于它们与贝叶斯频谱分析的密切关系,不确定性量化指标是频谱预测方法的自然副产品。我们在一系列合成实验以及在实际电力系统和流体流动背景下,对这些算法与其他领先的预测方法进行了广泛的基准测试。

详细文章见第4部分。

📚2 运行结果

部分代码:

a_guess = 1 #current guess of optimal a
a_true = 1 #this is in reality an imaginary number because the true data is generated by a sin
w_true = 0.05 #true frequency
T = 1000 #number of data points
data_true = a_true * np.sin(np.arange(T)*w_true) #sin!

#Brute force computation of the error surface
E = [] #errors for specific w_guess
for w_guess in np.linspace(0,0.3,10001):
    
    data_guess = a_guess * np.cos(np.arange(T)*w_guess)
    e = np.mean((data_guess - data_true)**2)
    E.append(e)
    
E_ms = np.array(E)
E_ms = np.abs(E-np.median(E))
    
plt.subplot(2,1,1)
plt.plot(np.linspace(0,0.3,10001), E)
plt.xlabel('$\omega$')
plt.ylabel('Error')

plt.subplot(2,1,2)
plt.xlabel('$\omega$')
plt.ylabel('Error - mean sbtrct')
plt.plot(np.linspace(0,0.3,10001), E_ms)
plt.tight_layout()

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Python代码、文章下载

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值